System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 8236a75db8a230a04f99e1dde2db112c35e99bff:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 75 73 69 6e 67 20 53 79 73  ices;..using Sys
0150: 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a  tem.Threading;..
0160: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e  using System.Win
0170: 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69  dows.Forms;..usi
0180: 6e 67 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a  ng System.Xml;..
0190: 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e  using Microsoft.
01a0: 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70  Win32;....namesp
01b0: 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ace System.Data.
01c0: 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23  SQLite..{..    #
01d0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65  region Public De
01e0: 6c 65 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74  legates..    int
01f0: 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76  ernal delegate v
0200: 6f 69 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63  oid TraceCallbac
0210: 6b 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  k(..        stri
0220: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
0230: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
0240: 67 6f 72 79 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  gory..    );....
0250: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
02a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
02b0: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
02c0: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
02d0: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
02e0: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
02f0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
0300: 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20   invariant,..   
0310: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
0320: 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
0330: 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
0340: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
0350: 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
0360: 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
0370: 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
0380: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
0390: 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
03a0: 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
03b0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
03c0: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
03d0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
03e0: 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  ,..        bool 
03f0: 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
0400: 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64    ref bool saved
0410: 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  ,..        ref s
0420: 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
0430: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f   );....    /////
0440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0480: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
0490: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
04a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65  bool FrameworkRe
04b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
04c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
04d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
04e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
04f0: 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
0500: 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
0510: 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
0520: 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
0530: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
0540: 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
0550: 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
0560: 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
0570: 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
0580: 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
0590: 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
05a0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
05b0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76  ..        bool v
05c0: 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
05d0: 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
05e0: 72 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20  r..    );....   
05f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0640: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c      internal del
0650: 65 67 61 74 65 20 62 6f 6f 6c 20 56 69 73 75 61  egate bool Visua
0660: 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43  lStudioRegistryC
0670: 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
0680: 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4d 6f 63 6b    Installer.Mock
0690: 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
06a0: 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 56 65  Key,..        Ve
06b0: 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
06c0: 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c  ..        Instal
06d0: 6c 65 72 2e 50 61 63 6b 61 67 65 20 70 61 63 6b  ler.Package pack
06e0: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 62  age,..        ob
06f0: 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
0700: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
0710: 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 62  ow64,..        b
0720: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0730: 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  ng,..        boo
0740: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
0750: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
0760: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74  ..        ref st
0770: 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
0780: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
0790: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
07a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
07f0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d  gion Public Enum
0800: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46  erations..    [F
0810: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62  lags()]..    pub
0820: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c  lic enum Install
0830: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Flags..    {..  
0840: 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30        None = 0x0
0850: 2c 0d 0a 20 20 20 20 20 20 20 20 47 41 43 20 3d  ,..        GAC =
0860: 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41   0x1,..        A
0870: 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d  ssemblyFolders =
0880: 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44   0x2,..        D
0890: 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
08a0: 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20   = 0x4,..       
08b0: 20 56 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38   VsPackage = 0x8
08c0: 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 61 74  ,..        VsDat
08d0: 61 53 6f 75 72 63 65 20 3d 20 30 78 31 30 2c 0d  aSource = 0x10,.
08e0: 0a 20 20 20 20 20 20 20 20 56 73 44 61 74 61 50  .        VsDataP
08f0: 72 6f 76 69 64 65 72 20 3d 20 30 78 32 30 2c 0d  rovider = 0x20,.
0900: 0a 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f  .        Framewo
0910: 72 6b 20 3d 20 47 41 43 20 7c 20 41 73 73 65 6d  rk = GAC | Assem
0920: 62 6c 79 46 6f 6c 64 65 72 73 20 7c 20 44 62 50  blyFolders | DbP
0930: 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 2c 0d  roviderFactory,.
0940: 0a 20 20 20 20 20 20 20 20 56 73 20 3d 20 56 73  .        Vs = Vs
0950: 50 61 63 6b 61 67 65 20 7c 20 56 73 44 61 74 61  Package | VsData
0960: 53 6f 75 72 63 65 20 7c 20 56 73 44 61 74 61 50  Source | VsDataP
0970: 72 6f 76 69 64 65 72 2c 0d 0a 20 20 20 20 20 20  rovider,..      
0980: 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77 6f 72    All = Framewor
0990: 6b 20 7c 20 56 73 2c 0d 0a 20 20 20 20 20 20 20  k | Vs,..       
09a0: 20 41 6c 6c 45 78 63 65 70 74 47 41 43 20 3d 20   AllExceptGAC = 
09b0: 41 6c 6c 20 26 20 7e 47 41 43 2c 0d 0a 20 20 20  All & ~GAC,..   
09c0: 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20 41       Default = A
09d0: 6c 6c 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ll..    }....   
09e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
09f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0a30: 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20      [Flags()].. 
0a40: 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 54     public enum T
0a50: 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20  racePriority..  
0a60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e    {..        Non
0a70: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
0a80: 20 20 4c 6f 77 65 73 74 20 3d 20 30 78 31 2c 0d    Lowest = 0x1,.
0a90: 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 72 20 3d  .        Lower =
0aa0: 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 4c   0x2,..        L
0ab0: 6f 77 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20  ow = 0x4,..     
0ac0: 20 20 20 4d 65 64 69 75 6d 4c 6f 77 20 3d 20 30     MediumLow = 0
0ad0: 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  x8,..        Med
0ae0: 69 75 6d 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20  ium = 0x10,..   
0af0: 20 20 20 20 20 4d 65 64 69 75 6d 48 69 67 68 20       MediumHigh 
0b00: 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x20,..       
0b10: 20 48 69 67 68 20 3d 20 30 78 34 30 2c 0d 0a 20   High = 0x40,.. 
0b20: 20 20 20 20 20 20 20 48 69 67 68 65 72 20 3d 20         Higher = 
0b30: 30 78 38 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x80,..        H
0b40: 69 67 68 65 73 74 20 3d 20 30 78 31 30 30 2c 0d  ighest = 0x100,.
0b50: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
0b60: 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20 20 7d   = Medium..    }
0b70: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
0b80: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
0b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
0be0: 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43 6c 61  on Installer Cla
0bf0: 73 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ss..    internal
0c00: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 49 6e   static class In
0c10: 73 74 61 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a  staller..    {..
0c20: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
0c30: 50 72 69 76 61 74 65 20 48 65 6c 70 65 72 20 43  Private Helper C
0c40: 6c 61 73 73 65 73 0d 0a 20 20 20 20 20 20 20 20  lasses..        
0c50: 23 72 65 67 69 6f 6e 20 41 6e 79 50 61 69 72 20  #region AnyPair 
0c60: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
0c70: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
0c80: 61 73 73 20 41 6e 79 50 61 69 72 3c 54 31 2c 20  ass AnyPair<T1, 
0c90: 54 32 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  T2>..        {..
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
0cb0: 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
0cc0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
0cd0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
0ce0: 20 20 20 20 20 2f 2f 20 57 41 52 4e 49 4e 47 3a       // WARNING:
0cf0: 20 54 68 69 73 20 63 6f 6e 73 74 72 75 63 74 6f   This constructo
0d00: 72 20 70 72 6f 64 75 63 65 73 20 61 6e 20 69 6d  r produces an im
0d10: 6d 75 74 61 62 6c 65 20 22 65 6d 70 74 79 22 20  mutable "empty" 
0d20: 70 61 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20  pair..          
0d30: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6f 62    //          ob
0d40: 6a 65 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  ject...         
0d50: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
0d60: 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69     public AnyPai
0d70: 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r()..           
0d80: 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20       : base().. 
0d90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0db0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
0dc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
0dd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
0e30: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20  blic AnyPair(T1 
0e40: 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x)..            
0e50: 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20      : this()..  
0e60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
0e80: 73 2e 78 20 3d 20 78 3b 0d 0a 20 20 20 20 20 20  s.x = x;..      
0e90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
0ea0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0ef0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
0f00: 20 41 6e 79 50 61 69 72 28 54 31 20 78 2c 20 54   AnyPair(T1 x, T
0f10: 32 20 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  2 y)..          
0f20: 20 20 20 20 20 20 3a 20 74 68 69 73 28 78 29 0d        : this(x).
0f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f50: 74 68 69 73 2e 79 20 3d 20 79 3b 0d 0a 20 20 20  this.y = y;..   
0f60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
0f70: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
0f80: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
0f90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fd0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
0fe0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
0ff0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
1000: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1010: 61 74 65 20 54 31 20 78 3b 0d 0a 20 20 20 20 20  ate T1 x;..     
1020: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 31         public T1
1030: 20 58 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   X..            
1040: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1050: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1060: 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  x; }..          
1070: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1080: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
10d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 32        private T2
10e0: 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   y;..           
10f0: 20 70 75 62 6c 69 63 20 54 32 20 59 0d 0a 20 20   public T2 Y..  
1100: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1110: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1120: 20 7b 20 72 65 74 75 72 6e 20 79 3b 20 7d 0d 0a   { return y; }..
1130: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1140: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1150: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
1160: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1170: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
11d0: 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65     #region Trace
11e0: 4f 70 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Ops Class..     
11f0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1200: 63 20 63 6c 61 73 73 20 54 72 61 63 65 4f 70 73  c class TraceOps
1210: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1220: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1230: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
1240: 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
1250: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1260: 72 69 6e 67 20 44 65 66 61 75 6c 74 44 65 62 75  ring DefaultDebu
1270: 67 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20  gFormat = "#{0} 
1280: 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20  @ {1}: {2}";..  
1290: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
12a0: 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44  e const string D
12b0: 65 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61  efaultTraceForma
12c0: 74 20 3d 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a  t = "#{0} @ {1}:
12d0: 20 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20   {2}";....      
12e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
12f0: 6e 73 74 20 73 74 72 69 6e 67 20 49 73 6f 38 36  nst string Iso86
1300: 30 31 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74  01DateTimeOutput
1310: 46 6f 72 6d 61 74 20 3d 0d 0a 20 20 20 20 20 20  Format =..      
1320: 20 20 20 20 20 20 20 20 20 20 22 79 79 79 79 2e            "yyyy.
1330: 4d 4d 2e 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66  MM.ddTHH:mm:ss.f
1340: 66 66 66 66 66 66 22 3b 0d 0a 20 20 20 20 20 20  ffffff";..      
1350: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1360: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
13c0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
13d0: 74 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a  te Static Data..
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
13f0: 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63  ate static objec
1400: 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77  t syncRoot = new
1410: 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20   object();..    
1420: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1430: 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74  static long next
1440: 44 65 62 75 67 49 64 3b 0d 0a 20 20 20 20 20 20  DebugId;..      
1450: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1460: 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74 54 72  atic long nextTr
1470: 61 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  aceId;..        
1480: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1490: 69 63 20 49 4c 69 73 74 3c 54 72 61 63 65 4c 69  ic IList<TraceLi
14a0: 73 74 65 6e 65 72 3e 20 64 65 62 75 67 4c 69 73  stener> debugLis
14b0: 74 65 6e 65 72 73 3b 0d 0a 20 20 20 20 20 20 20  teners;..       
14c0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
14d0: 74 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74  tic TracePriorit
14e0: 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  y debugPriority 
14f0: 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
1500: 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20  Default;..      
1510: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1520: 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72 69  atic TracePriori
1530: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
1540: 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79   = TracePriority
1550: 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20  .Default;..     
1560: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1570: 74 61 74 69 63 20 73 74 72 69 6e 67 20 64 65 62  tatic string deb
1580: 75 67 46 6f 72 6d 61 74 20 3d 20 44 65 66 61 75  ugFormat = Defau
1590: 6c 74 44 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a  ltDebugFormat;..
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
15b0: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
15c0: 67 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  g traceFormat = 
15d0: 44 65 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d  DefaultTraceForm
15e0: 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
15f0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1600: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1660: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61  egion Public Sta
1670: 74 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  tic Properties..
1680: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1690: 69 63 20 73 74 61 74 69 63 20 54 72 61 63 65 50  ic static TraceP
16a0: 72 69 6f 72 69 74 79 20 44 65 62 75 67 50 72 69  riority DebugPri
16b0: 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
16c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16d0: 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b        get { lock
16e0: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65   (syncRoot) { re
16f0: 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69  turn debugPriori
1700: 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ty; } }..       
1710: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
1720: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
1730: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d   debugPriority =
1740: 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20   value; } }..   
1750: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1760: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
17b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
17c0: 6c 69 63 20 73 74 61 74 69 63 20 54 72 61 63 65  lic static Trace
17d0: 50 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72  Priority TracePr
17e0: 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
17f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1800: 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63         get { loc
1810: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72  k (syncRoot) { r
1820: 65 74 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72  eturn tracePrior
1830: 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  ity; } }..      
1840: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1850: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
1860: 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  { tracePriority 
1870: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
1880: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1890: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
18f0: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
1900: 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a  ng DebugFormat..
1910: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1930: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
1940: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 64 65  oot) { return de
1950: 62 75 67 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a  bugFormat; } }..
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1970: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
1980: 52 6f 6f 74 29 20 7b 20 64 65 62 75 67 46 6f 72  Root) { debugFor
1990: 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  mat = value; } }
19a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
19b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
19c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1a10: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
1a20: 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d  string TraceForm
1a30: 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  at..            
1a40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1a50: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
1a60: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
1a70: 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d  n traceFormat; }
1a80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a90: 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28      set { lock (
1aa0: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61 63  syncRoot) { trac
1ab0: 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  eFormat = value;
1ac0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
1ad0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1ae0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1af0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1b50: 65 67 69 6f 6e 20 49 6e 74 65 72 61 63 74 69 76  egion Interactiv
1b60: 65 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64  e Support Method
1b70: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  s..            [
1b80: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
1b90: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
1ba0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
1bb0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1bc0: 61 74 69 63 20 44 69 61 6c 6f 67 52 65 73 75 6c  atic DialogResul
1bd0: 74 20 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a  t ShowMessage(..
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
1c00: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1c20: 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75  aceCallback debu
1c30: 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1c50: 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
1c60: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1c70: 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
1c80: 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  ly assembly,..  
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1ca0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
1cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1cc0: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 2c 0d  tring category,.
1cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce0: 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
1cf0: 6e 73 20 62 75 74 74 6f 6e 73 2c 0d 0a 20 20 20  ns buttons,..   
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
1d10: 73 61 67 65 42 6f 78 49 63 6f 6e 20 69 63 6f 6e  sageBoxIcon icon
1d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
1d40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d50: 20 20 20 20 44 69 61 6c 6f 67 52 65 73 75 6c 74      DialogResult
1d60: 20 72 65 73 75 6c 74 20 3d 20 44 69 61 6c 6f 67   result = Dialog
1d70: 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20  Result.OK;....  
1d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
1d90: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
1da0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1dd0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6d 65  raceCallback, me
1de0: 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29  ssage, category)
1df0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e00: 20 20 20 20 20 69 66 20 28 53 79 73 74 65 6d 49       if (SystemI
1e10: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 55 73 65 72 49  nformation.UserI
1e20: 6e 74 65 72 61 63 74 69 76 65 29 0d 0a 20 20 20  nteractive)..   
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e50: 20 20 20 20 73 74 72 69 6e 67 20 74 69 74 6c 65      string title
1e60: 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69   = GetAssemblyTi
1e70: 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 3b 0d 0a  tle(assembly);..
1e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e90: 20 20 20 20 20 20 69 66 20 28 74 69 74 6c 65 20        if (title 
1ea0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec0: 20 20 74 69 74 6c 65 20 3d 20 41 70 70 6c 69 63    title = Applic
1ed0: 61 74 69 6f 6e 2e 50 72 6f 64 75 63 74 4e 61 6d  ation.ProductNam
1ee0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1ef0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1f00: 20 3d 20 4d 65 73 73 61 67 65 42 6f 78 2e 53 68   = MessageBox.Sh
1f10: 6f 77 28 6d 65 73 73 61 67 65 2c 20 74 69 74 6c  ow(message, titl
1f20: 65 2c 20 62 75 74 74 6f 6e 73 2c 20 69 63 6f 6e  e, buttons, icon
1f30: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f40: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
1f50: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
1f60: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f80: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1f90: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1fa0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc0: 20 20 20 20 20 20 22 55 73 65 72 20 63 68 6f 69        "User choi
1fd0: 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72  ce of {0}.", For
1fe0: 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29  Display(result))
1ff0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2000: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67             categ
2010: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2030: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
2040: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2060: 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28    DebugAndTrace(
2070: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2090: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
20a0: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
20b0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
20c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20d0: 20 20 20 20 20 20 22 44 65 66 61 75 6c 74 20 63        "Default c
20e0: 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20  hoice of {0}.", 
20f0: 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c  ForDisplay(resul
2100: 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
2110: 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f            catego
2120: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2130: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
2140: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
2150: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2160: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21d0: 23 72 65 67 69 6f 6e 20 54 72 61 63 69 6e 67 20  #region Tracing 
21e0: 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d  Support Methods.
21f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2200: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
2210: 53 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e  SetupDebugListen
2220: 65 72 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ers()..         
2230: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2240: 20 20 20 20 20 20 69 66 20 28 64 65 62 75 67 4c        if (debugL
2250: 69 73 74 65 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c  isteners == null
2260: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2270: 20 20 20 20 20 20 20 64 65 62 75 67 4c 69 73 74         debugList
2280: 65 6e 65 72 73 20 3d 20 6e 65 77 20 4c 69 73 74  eners = new List
2290: 3c 54 72 61 63 65 4c 69 73 74 65 6e 65 72 3e 28  <TraceListener>(
22a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22b0: 20 20 20 20 20 20 64 65 62 75 67 4c 69 73 74 65        debugListe
22c0: 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e  ners.Add(new Con
22d0: 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65  soleTraceListene
22e0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
22f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2340: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2350: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2360: 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 44 65  atic long NextDe
2370: 62 75 67 49 64 28 29 0d 0a 20 20 20 20 20 20 20  bugId()..       
2380: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2390: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
23a0: 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65  nterlocked.Incre
23b0: 6d 65 6e 74 28 72 65 66 20 6e 65 78 74 44 65 62  ment(ref nextDeb
23c0: 75 67 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  ugId);..        
23d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2420: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2430: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
2440: 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 54  tatic long NextT
2450: 72 61 63 65 49 64 28 29 0d 0a 20 20 20 20 20 20  raceId()..      
2460: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2470: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2480: 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72  Interlocked.Incr
2490: 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 74 54 72  ement(ref nextTr
24a0: 61 63 65 49 64 29 3b 0d 0a 20 20 20 20 20 20 20  aceId);..       
24b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24c0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
24d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2510: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2520: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 69  static string Ti
2530: 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65  meStamp(DateTime
2540: 20 64 61 74 65 54 69 6d 65 29 0d 0a 20 20 20 20   dateTime)..    
2550: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2560: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2570: 6e 20 64 61 74 65 54 69 6d 65 2e 54 6f 53 74 72  n dateTime.ToStr
2580: 69 6e 67 28 49 73 6f 38 36 30 31 44 61 74 65 54  ing(Iso8601DateT
2590: 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 29  imeOutputFormat)
25a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2600: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2610: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2620: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2630: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2640: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2650: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2660: 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 0d   GetMethodName(.
2670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2680: 20 53 74 61 63 6b 54 72 61 63 65 20 73 74 61 63   StackTrace stac
2690: 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20  kTrace,..       
26a0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76           int lev
26b0: 65 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  el..            
26c0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
26d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26e0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
26f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2710: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2720: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2730: 45 3a 20 49 66 20 61 20 76 61 6c 69 64 20 73 74  E: If a valid st
2740: 61 63 6b 20 74 72 61 63 65 20 77 61 73 20 6e 6f  ack trace was no
2750: 74 20 73 75 70 70 6c 69 65 64 20 62 79 20 74 68  t supplied by th
2760: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2770: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2780: 63 61 6c 6c 65 72 2c 20 63 72 65 61 74 65 20 6f  caller, create o
2790: 6e 65 20 6e 6f 77 20 62 61 73 65 64 20 6f 6e 20  ne now based on 
27a0: 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..   
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c0: 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74   //       execut
27d0: 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20  ion stack...    
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2800: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 63          if (stac
2810: 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d  kTrace == null).
2820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2830: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2850: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2870: 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 63 75  OTE: Grab the cu
2880: 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20  rrent execution 
2890: 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20  stack...        
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 63              stac
28d0: 6b 54 72 61 63 65 20 3d 20 6e 65 77 20 53 74 61  kTrace = new Sta
28e0: 63 6b 54 72 61 63 65 28 29 3b 0d 0a 0d 0a 20 20  ckTrace();....  
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2900: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2920: 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79    // NOTE: Alway
2930: 73 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c  s skip this call
2940: 20 66 72 61 6d 65 20 77 68 65 6e 20 77 65 20 63   frame when we c
2950: 61 70 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  apture..        
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2970: 2f 2f 20 20 20 20 20 20 20 74 68 65 20 73 74 61  //       the sta
2980: 63 6b 20 74 72 61 63 65 2e 0d 0a 20 20 20 20 20  ck trace...     
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
29c0: 65 76 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  evel++;..       
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a10: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 73   NOTE: Get the s
2a20: 70 65 63 69 66 69 65 64 20 73 74 61 63 6b 20 66  pecified stack f
2a30: 72 61 6d 65 20 28 61 6c 77 61 79 73 20 61 64 64  rame (always add
2a40: 20 6f 6e 65 20 74 6f 0d 0a 20 20 20 20 20 20 20   one to..       
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2a60: 20 20 20 20 20 20 73 6b 69 70 20 74 68 69 73 20        skip this 
2a70: 6d 65 74 68 6f 64 29 2e 0d 0a 20 20 20 20 20 20  method)...      
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aa0: 20 20 20 20 20 20 53 74 61 63 6b 46 72 61 6d 65        StackFrame
2ab0: 20 73 74 61 63 6b 46 72 61 6d 65 20 3d 20 73 74   stackFrame = st
2ac0: 61 63 6b 54 72 61 63 65 2e 47 65 74 46 72 61 6d  ackTrace.GetFram
2ad0: 65 28 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20  e(level);....   
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2b00: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2b10: 3a 20 47 65 74 20 74 68 65 20 6d 65 74 68 6f 64  : Get the method
2b20: 20 66 6f 72 20 74 68 65 20 73 74 61 63 6b 20 66   for the stack f
2b30: 72 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  rame...         
2b40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 20 20 20 4d 65 74 68 6f 64 42 61 73 65 20 6d 65     MethodBase me
2b70: 74 68 6f 64 42 61 73 65 20 3d 20 73 74 61 63 6b  thodBase = stack
2b80: 46 72 61 6d 65 2e 47 65 74 4d 65 74 68 6f 64 28  Frame.GetMethod(
2b90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ba0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74    // NOTE: Get t
2bd0: 68 65 20 74 79 70 65 20 66 6f 72 20 74 68 65 20  he type for the 
2be0: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c10: 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d       Type type =
2c20: 20 6d 65 74 68 6f 64 42 61 73 65 2e 44 65 63 6c   methodBase.Decl
2c30: 61 72 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a 20 20  aringType;....  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c50: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2c60: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2c70: 45 3a 20 47 65 74 20 74 68 65 20 6e 61 6d 65 20  E: Get the name 
2c80: 6f 66 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a  of the method...
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2cb0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2cc0: 6e 67 20 6e 61 6d 65 20 3d 20 6d 65 74 68 6f 64  ng name = method
2cd0: 42 61 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  Base.Name;....  
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2d00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2d10: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 70 72  E: Return the pr
2d20: 6f 70 65 72 6c 79 20 66 6f 72 6d 61 74 74 65 64  operly formatted
2d30: 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20   result...      
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
2d70: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d90: 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22       "{0}{1}{2}"
2da0: 2c 20 74 79 70 65 2e 4e 61 6d 65 2c 20 54 79 70  , type.Name, Typ
2db0: 65 2e 44 65 6c 69 6d 69 74 65 72 2c 20 6e 61 6d  e.Delimiter, nam
2dc0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2dd0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2de0: 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e10: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
2e20: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
2e30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e40: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e50: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
2e60: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e70: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2ec0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2ed0: 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 62 75  static void Debu
2ee0: 67 43 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20  gCore(..        
2ef0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
2f00: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
2f10: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f20: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
2f30: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2f40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
2f60: 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
2f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f90: 20 20 20 20 69 66 20 28 64 65 62 75 67 4c 69 73      if (debugLis
2fa0: 74 65 6e 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d  teners != null).
2fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe0: 66 6f 72 65 61 63 68 20 28 54 72 61 63 65 4c 69  foreach (TraceLi
2ff0: 73 74 65 6e 65 72 20 6c 69 73 74 65 6e 65 72 20  stener listener 
3000: 69 6e 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72  in debugListener
3010: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
3020: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3040: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65             liste
3050: 6e 65 72 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65  ner.WriteLine(me
3060: 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29  ssage, category)
3070: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
3090: 69 73 74 65 6e 65 72 2e 46 6c 75 73 68 28 29 3b  istener.Flush();
30a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
30e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
30f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3100: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3140: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3150: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
3160: 61 74 69 63 20 76 6f 69 64 20 54 72 61 63 65 43  atic void TraceC
3170: 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ore(..          
3180: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
3190: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
31a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
31b0: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
31c0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
31d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31e0: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
31f0: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
3200: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3220: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3230: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3240: 45 3a 20 57 72 69 74 65 20 74 68 65 20 6d 65 73  E: Write the mes
3250: 73 61 67 65 20 74 6f 20 61 6c 6c 20 74 68 65 20  sage to all the 
3260: 61 63 74 69 76 65 20 74 72 61 63 65 0d 0a 20 20  active trace..  
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3280: 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 65    //       liste
3290: 6e 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  ners...         
32a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c0: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
32d0: 6e 65 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65  ne(message, cate
32e0: 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3300: 65 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20  e.Flush();..    
3310: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
3320: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3380: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
3390: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
33a0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
33b0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
33c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
33d0: 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75  atic string Debu
33e0: 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
33f0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3400: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
3410: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
3420: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
3430: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
3440: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
3450: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
3460: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
3470: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
3480: 20 20 20 20 20 20 45 78 63 65 70 74 69 6f 6e 20        Exception 
3490: 65 78 63 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  exception,..    
34a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
34b0: 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20  ng category..   
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
34f0: 66 20 28 65 78 63 65 70 74 69 6f 6e 20 21 3d 20  f (exception != 
3500: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3510: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3520: 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  n DebugAndTrace(
3530: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64  tracePriority, d
3540: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
3550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3560: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
3570: 62 61 63 6b 2c 20 6e 65 77 20 53 74 61 63 6b 54  back, new StackT
3580: 72 61 63 65 28 65 78 63 65 70 74 69 6f 6e 2c 20  race(exception, 
3590: 74 72 75 65 29 2c 20 30 2c 0d 0a 20 20 20 20 20  true), 0,..     
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b0: 20 20 20 65 78 63 65 70 74 69 6f 6e 2e 54 6f 53     exception.ToS
35c0: 74 72 69 6e 67 28 29 2c 20 63 61 74 65 67 6f 72  tring(), categor
35d0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
35e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
35f0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
3600: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3610: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3660: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
3670: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
3680: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
3690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
36a0: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
36b0: 67 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  g DebugAndTrace(
36c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36d0: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
36e0: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65  TraceCallback de
3710: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
3730: 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
3740: 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
3750: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
3760: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
3770: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
3780: 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
3790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
37a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 72 65 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54  return DebugAndT
37d0: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
37e0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
37f0: 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43  Priority, debugC
3800: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
3810: 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c  llback, null, 1,
3820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3830: 20 20 20 20 20 20 6d 65 73 73 61 67 65 2c 20 63        message, c
3840: 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
3850: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3860: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
38b0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
38c0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
38d0: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
38e0: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
38f0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
3900: 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e  c string DebugAn
3910: 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
3920: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
3930: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
3940: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
3950: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
3960: 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
3970: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
3980: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
3990: 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
39a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
39b0: 20 20 20 53 74 61 63 6b 54 72 61 63 65 20 73 74     StackTrace st
39c0: 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20  ackTrace,..     
39d0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
39e0: 65 76 65 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  evel,..         
39f0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
3a00: 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
3a10: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
3a20: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
3a30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
3a40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3a50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3a70: 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73  / NOTE: Always s
3a80: 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72  kip this call fr
3a90: 61 6d 65 20 69 66 20 74 68 65 20 73 74 61 63 6b  ame if the stack
3aa0: 20 74 72 61 63 65 20 69 73 0d 0a 20 20 20 20 20   trace is..     
3ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
3ac0: 20 20 20 20 67 6f 69 6e 67 20 74 6f 20 62 65 20      going to be 
3ad0: 63 61 70 74 75 72 65 64 20 62 79 20 47 65 74 4d  captured by GetM
3ae0: 65 74 68 6f 64 4e 61 6d 65 2e 0d 0a 20 20 20 20  ethodName...    
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b10: 69 66 20 28 73 74 61 63 6b 54 72 61 63 65 20 3d  if (stackTrace =
3b20: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 76               lev
3b40: 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  el++;....       
3b50: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3b70: 4e 4f 54 45 3a 20 46 6f 72 6d 61 74 20 74 68 65  NOTE: Format the
3b80: 20 6d 65 73 73 61 67 65 20 66 6f 72 20 64 69 73   message for dis
3b90: 70 6c 61 79 20 28 6f 6e 63 65 29 2e 0d 0a 20 20  play (once)...  
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3bc0: 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 74    string formatt
3bd0: 65 64 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ed = String.Form
3be0: 61 74 28 22 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a  at("{0}: {1}",..
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d      GetMethodNam
3c10: 65 28 73 74 61 63 6b 54 72 61 63 65 2c 20 6c 65  e(stackTrace, le
3c20: 76 65 6c 29 2c 20 6d 65 73 73 61 67 65 29 3b 0d  vel), message);.
3c30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3c40: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3c50: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3c60: 49 66 20 74 68 65 20 64 65 62 75 67 20 63 61 6c  If the debug cal
3c70: 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64  lback is invalid
3c80: 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70 72   or the trace pr
3c90: 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
3ca0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
3cb0: 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67 65   of this message
3cc0: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68   is less than wh
3cd0: 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20  at we currently 
3ce0: 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20  want to..       
3cf0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3d00: 20 20 64 65 62 75 67 2c 20 73 6b 69 70 20 69 74    debug, skip it
3d10: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3d20: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3d30: 20 20 20 20 20 20 20 69 66 20 28 28 64 65 62 75         if ((debu
3d40: 67 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c  gCallback != nul
3d50: 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
3d60: 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61 63             (trac
3d70: 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 44 65 62  ePriority >= Deb
3d80: 75 67 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20  ugPriority))..  
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3db0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3dd0: 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65  NOTE: Invoke the
3de0: 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20   debug callback 
3df0: 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74  with the formatt
3e00: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
3e10: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
3e20: 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68 65   message and the
3e30: 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69 66   category specif
3e40: 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ied by the..    
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e60: 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e  //       caller.
3e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3e80: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
3ea0: 62 75 67 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d  bugCallback(form
3eb0: 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29  atted, category)
3ec0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3ed0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3ee0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3ef0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
3f00: 4f 54 45 3a 20 49 66 20 74 68 65 20 74 72 61 63  OTE: If the trac
3f10: 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e  e callback is in
3f20: 76 61 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61  valid or the tra
3f30: 63 65 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20  ce priority..   
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3f50: 20 20 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65        of this me
3f60: 73 73 61 67 65 20 69 73 20 6c 65 73 73 20 74 68  ssage is less th
3f70: 61 6e 20 77 68 61 74 20 77 65 20 63 75 72 72 65  an what we curre
3f80: 6e 74 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20  ntly want to..  
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3fa0: 20 20 20 20 20 20 20 74 72 61 63 65 2c 20 73 6b         trace, sk
3fb0: 69 70 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  ip it...        
3fc0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3fe0: 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21  (traceCallback !
3ff0: 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
4000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4010: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e  (tracePriority >
4020: 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 29  = TracePriority)
4030: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4040: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4050: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4070: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b    // NOTE: Invok
4080: 65 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c  e the trace call
4090: 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f  back with the fo
40a0: 72 6d 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20  rmatted..       
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
40c0: 20 20 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e        message an
40d0: 64 20 74 68 65 20 63 61 74 65 67 6f 72 79 20 73  d the category s
40e0: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0d  pecified by the.
40f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4100: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
4110: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  ller...         
4120: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4140: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
4150: 28 66 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65  (formatted, cate
4160: 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
4170: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4180: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4190: 75 72 6e 20 6d 65 73 73 61 67 65 3b 0d 0a 20 20  urn message;..  
41a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
41b0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
41c0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
41d0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
41e0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
41f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4230: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4240: 20 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67   #region MockReg
4250: 69 73 74 72 79 20 43 6c 61 73 73 0d 0a 20 20 20  istry Class..   
4260: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
4270: 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65  led class MockRe
4280: 67 69 73 74 72 79 20 3a 20 49 44 69 73 70 6f 73  gistry : IDispos
4290: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  able..        {.
42a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
42b0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
42c0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
42d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
42e0: 6b 52 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20  kRegistry()..   
42f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4300: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
4310: 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  If = true;..    
4320: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 61 64              read
4330: 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Only = true;..  
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
4350: 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  fe = true;..    
4360: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4370: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
4380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
43d0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28  ic MockRegistry(
43e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
43f0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
4410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4420: 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20    : this()..    
4430: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4440: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
4450: 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b  whatIf = whatIf;
4460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4470: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
4480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
44d0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
44e0: 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
44f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
4500: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
4510: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
4520: 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nly..           
4530: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4540: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 77          : this(w
4550: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
4560: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4570: 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 61 64         this.read
4580: 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b  Only = readOnly;
4590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
45a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
45b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
4600: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
4610: 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
4620: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
4630: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
4640: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
4650: 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nly,..          
4660: 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d        bool safe.
4670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4680: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4690: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
46a0: 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20  f, readOnly)..  
46b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
46d0: 73 2e 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a  s.safe = safe;..
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
46f0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
4700: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
4710: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4760: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
4770: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
4780: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
4790: 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74  rivate bool what
47a0: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
47b0: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61   public bool Wha
47c0: 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tIf..           
47d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
47e0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
47f0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
4800: 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20  n whatIf; }..   
4810: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
4820: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
4830: 28 29 3b 20 77 68 61 74 49 66 20 3d 20 76 61 6c  (); whatIf = val
4840: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
4850: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4860: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
48b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
48c0: 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  ool readOnly;.. 
48d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
48e0: 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d  c bool ReadOnly.
48f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
4920: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65  sed(); return re
4930: 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20  adOnly; }..     
4940: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
4950: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
4960: 3b 20 72 65 61 64 4f 6e 6c 79 20 3d 20 76 61 6c  ; readOnly = val
4970: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
4980: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4990: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
49a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
49e0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
49f0: 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20  ool safe;..     
4a00: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
4a10: 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20  ol Safe..       
4a20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4a30: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
4a40: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
4a50: 65 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20  eturn safe; }.. 
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4a70: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
4a80: 65 64 28 29 3b 20 73 61 66 65 20 3d 20 76 61 6c  ed(); safe = val
4a90: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
4aa0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4ab0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4af0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4b00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
4b10: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63  ockRegistryKey c
4b20: 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20  lassesRoot;..   
4b30: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4b40: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
4b50: 43 6c 61 73 73 65 73 52 6f 6f 74 0d 0a 20 20 20  ClassesRoot..   
4b60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
4b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4ba0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
4bb0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
4bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bd0: 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20  if (classesRoot 
4be0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
4bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c00: 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20    classesRoot = 
4c10: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
4c20: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
4c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c40: 20 20 52 65 67 69 73 74 72 79 2e 43 6c 61 73 73    Registry.Class
4c50: 65 73 52 6f 6f 74 2c 20 77 68 61 74 49 66 2c 20  esRoot, whatIf, 
4c60: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
4c70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4c80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
4c90: 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20  lassesRoot;..   
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4d20: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
4d30: 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74 43  stryKey currentC
4d40: 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20  onfig;..        
4d50: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
4d60: 65 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65  egistryKey Curre
4d70: 6e 74 43 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20  ntConfig..      
4d80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d90: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4dc0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
4dd0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
4de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4df0: 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d  (currentConfig =
4e00: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e20: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d   currentConfig =
4e30: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
4e40: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e60: 20 20 20 52 65 67 69 73 74 72 79 2e 43 75 72 72     Registry.Curr
4e70: 65 6e 74 43 6f 6e 66 69 67 2c 20 77 68 61 74 49  entConfig, whatI
4e80: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
4e90: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
4ea0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4eb0: 6e 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b  n currentConfig;
4ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ed0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
4ee0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4ef0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f30: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4f40: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
4f50: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63 75 72  kRegistryKey cur
4f60: 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20  rentUser;..     
4f70: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
4f80: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 75  ckRegistryKey Cu
4f90: 72 72 65 6e 74 55 73 65 72 0d 0a 20 20 20 20 20  rrentUser..     
4fa0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4fb0: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
4fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4fe0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
4ff0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5010: 20 28 63 75 72 72 65 6e 74 55 73 65 72 20 3d 3d   (currentUser ==
5020: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 65  currentUser = ne
5050: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
5060: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5080: 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74  Registry.Current
5090: 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20 72 65  User, whatIf, re
50a0: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
50b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
50c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75 72        return cur
50d0: 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20  rentUser;..     
50e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
50f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5100: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
5160: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
5170: 72 79 4b 65 79 20 64 79 6e 44 61 74 61 3b 0d 0a  ryKey dynData;..
5180: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5190: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
51a0: 65 79 20 44 79 6e 44 61 74 61 0d 0a 20 20 20 20  ey DynData..    
51b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
51c0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
51f0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
5200: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5220: 66 20 28 64 79 6e 44 61 74 61 20 3d 3d 20 6e 75  f (dynData == nu
5230: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e               dyn
5250: 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  Data = new MockR
5260: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
5270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5280: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
5290: 79 2e 44 79 6e 44 61 74 61 2c 20 77 68 61 74 49  y.DynData, whatI
52a0: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
52b0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
52c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
52d0: 6e 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  n dynData;..    
52e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
52f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5350: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
5360: 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
5370: 74 72 79 4b 65 79 20 6c 6f 63 61 6c 4d 61 63 68  tryKey localMach
5380: 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ine;..          
5390: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
53a0: 69 73 74 72 79 4b 65 79 20 4c 6f 63 61 6c 4d 61  istryKey LocalMa
53b0: 63 68 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20  chine..         
53c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
53d0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
53e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5400: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
5410: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5420: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f            if (lo
5430: 63 61 6c 4d 61 63 68 69 6e 65 20 3d 3d 20 6e 75  calMachine == nu
5440: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63               loc
5460: 61 6c 4d 61 63 68 69 6e 65 20 3d 20 6e 65 77 20  alMachine = new 
5470: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
5480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
54a0: 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
54b0: 69 6e 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ine, whatIf, rea
54c0: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d  dOnly, safe);...
54d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
54e0: 20 20 20 20 20 72 65 74 75 72 6e 20 6c 6f 63 61       return loca
54f0: 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20  lMachine;..     
5500: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5510: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5520: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
5580: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
5590: 72 79 4b 65 79 20 70 65 72 66 6f 72 6d 61 6e 63  ryKey performanc
55a0: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
55b0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
55c0: 65 67 69 73 74 72 79 4b 65 79 20 50 65 72 66 6f  egistryKey Perfo
55d0: 72 6d 61 6e 63 65 44 61 74 61 0d 0a 20 20 20 20  rmanceData..    
55e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
55f0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5610: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5620: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
5630: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5650: 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61  f (performanceDa
5660: 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ta == null)..   
5670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5680: 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65       performance
5690: 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  Data = new MockR
56a0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
56c0: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
56d0: 79 2e 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y.PerformanceDat
56e0: 61 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  a, whatIf, readO
56f0: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20  nly, safe);.... 
5700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5710: 20 20 20 72 65 74 75 72 6e 20 70 65 72 66 6f 72     return perfor
5720: 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20  manceData;..    
5730: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5740: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
57a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
57b0: 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
57c0: 74 72 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20  tryKey users;.. 
57d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
57e0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
57f0: 79 20 55 73 65 72 73 0d 0a 20 20 20 20 20 20 20  y Users..       
5800: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5810: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5840: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
5850: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
5860: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5870: 75 73 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  users == null)..
5880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5890: 20 20 20 20 20 20 20 20 75 73 65 72 73 20 3d 20          users = 
58a0: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
58b0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58d0: 20 20 52 65 67 69 73 74 72 79 2e 55 73 65 72 73    Registry.Users
58e0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
58f0: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
5900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5910: 20 20 72 65 74 75 72 6e 20 75 73 65 72 73 3b 0d    return users;.
5920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5930: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5940: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
5950: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
5960: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
5970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
59b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
59c0: 69 6f 6e 20 50 75 62 6c 69 63 20 22 52 65 67 69  ion Public "Regi
59d0: 73 74 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a 20  stry" Methods.. 
59e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
59f0: 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  c object GetValu
5a00: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
5a10: 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
5a20: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
5a30: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
5a40: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
5a50: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64          object d
5a60: 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20  efaultValue..   
5a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5a80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
5aa0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
5ab0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5ac0: 20 20 20 72 65 74 75 72 6e 20 52 65 67 69 73 74     return Regist
5ad0: 72 79 2e 47 65 74 56 61 6c 75 65 28 6b 65 79 4e  ry.GetValue(keyN
5ae0: 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20  ame, valueName, 
5af0: 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a  defaultValue);..
5b00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5b70: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56  public void SetV
5b80: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
5b90: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
5ba0: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
5bb0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
5bc0: 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  alueName,..     
5bd0: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
5be0: 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  t value..       
5bf0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
5c00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5c10: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5c20: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
5c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
5c40: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
5c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c60: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
5c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c80: 20 20 20 52 65 67 69 73 74 72 79 2e 53 65 74 56     Registry.SetV
5c90: 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61  alue(keyName, va
5ca0: 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65 29 3b  lueName, value);
5cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5cc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d10: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
5d20: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
5d30: 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
5d40: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
5d50: 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  keyName,..      
5d60: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
5d70: 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20   valueName,..   
5d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
5d90: 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20  ect value,..    
5da0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
5db0: 73 74 72 79 56 61 6c 75 65 4b 69 6e 64 20 76 61  stryValueKind va
5dc0: 6c 75 65 4b 69 6e 64 0d 0a 20 20 20 20 20 20 20  lueKind..       
5dd0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
5de0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5df0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5e00: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
5e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
5e20: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
5e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e40: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e60: 20 20 20 52 65 67 69 73 74 72 79 2e 53 65 74 56     Registry.SetV
5e70: 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61  alue(keyName, va
5e80: 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65 2c 20  lueName, value, 
5e90: 76 61 6c 75 65 4b 69 6e 64 29 3b 0d 0a 20 20 20  valueKind);..   
5ea0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5eb0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5ec0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
5ed0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5f20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
5f30: 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20  vate Methods..  
5f40: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
5f50: 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64  e void CheckRead
5f60: 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20  Only()..        
5f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5f80: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5f90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
5fa0: 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c  TE: In "read-onl
5fb0: 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61  y" mode, we disa
5fc0: 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61  llow all write a
5fd0: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
5fe0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6000: 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20  !readOnly)..    
6010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6020: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
6030: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
6040: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
6050: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29  ationException()
6060: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
6080: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
6090: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
60a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
60e0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
60f0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
6100: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
6110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6120: 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
6130: 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sed;..          
6140: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
6150: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
6160: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
6170: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6180: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
6190: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
61b0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
61c0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
61d0: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
61e0: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
61f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6200: 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67    typeof(MockReg
6210: 69 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20  istry).Name);.. 
6220: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6230: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6280: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
6290: 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63  rivate /* protec
62a0: 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76  ted virtual */ v
62b0: 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20  oid Dispose(..  
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
62d0: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20  ol disposing..  
62e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
62f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6310: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
6320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6330: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6340: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
6350: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
6360: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6380: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63c0: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
63d0: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
63e0: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6400: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6420: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6440: 20 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f    if (classesRoo
6450: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
6460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6470: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6490: 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43     classesRoot.C
64a0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64c0: 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74       classesRoot
64d0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
6500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6510: 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67  f (currentConfig
6520: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
6530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6560: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e    currentConfig.
6570: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6590: 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e        currentCon
65a0: 66 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  fig = null;..   
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
65d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65e0: 20 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65    if (currentUse
65f0: 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6610: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6630: 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43     currentUser.C
6640: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
6650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6660: 20 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72       currentUser
6670: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
6680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6690: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
66b0: 66 20 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75  f (dynData != nu
66c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
66d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44              dynD
6700: 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ata.Close();..  
6710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6720: 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74            dynDat
6730: 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  a = null;..     
6740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6750: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6770: 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65  if (localMachine
6780: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67c0: 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43    localMachine.C
67d0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
67e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67f0: 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e       localMachin
6800: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
6810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6820: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6840: 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44  if (performanceD
6850: 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ata != null)..  
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6870: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6890: 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65       performance
68a0: 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  Data.Close();.. 
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68c0: 20 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f             perfo
68d0: 72 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c  rmanceData = nul
68e0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
68f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6910: 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65           if (use
6920: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6940: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6960: 20 20 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28      users.Close(
6970: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6990: 75 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  users = null;.. 
69a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
69d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
69e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
69f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a20: 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
6a30: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
6a40: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a80: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
6aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ab0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
6ac0: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77  is object is now
6ad0: 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20   disposed...    
6ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6af0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
6b00: 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64          disposed
6b10: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
6b20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6b40: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
6b50: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
6b60: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ba0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6bb0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
6bc0: 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73  sposable Members
6bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6be0: 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73  blic void Dispos
6bf0: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
6c00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6c10: 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65      Dispose(true
6c20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6c30: 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46      GC.SuppressF
6c40: 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a  inalize(this);..
6c50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6c60: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
6c70: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6c80: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cc0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6cd0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6ce0: 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  Destructor..    
6cf0: 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67          ~MockReg
6d00: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
6d10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6d20: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
6d30: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
6d40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6d50: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
6d60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6d70: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
6d80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
6de0: 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ion MockRegistry
6df0: 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Key Class..     
6e00: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c     internal seal
6e10: 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67  ed class MockReg
6e20: 69 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70  istryKey : IDisp
6e30: 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  osable..        
6e40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
6e50: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
6e60: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
6e70: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6e80: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6e90: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
6ea0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6eb0: 20 20 20 77 68 61 74 49 66 20 3d 20 74 72 75 65     whatIf = true
6ec0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6ed0: 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72     readOnly = tr
6ee0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
6ef0: 20 20 20 20 20 73 61 66 65 20 3d 20 74 72 75 65       safe = true
6f00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
6f20: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
6f30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6f80: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
6f90: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
6fa0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
6fb0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
6fc0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
6fe0: 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20  istryKey key..  
6ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
7000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7010: 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20   : this()..     
7020: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7030: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b            this.k
7040: 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20  ey = key;..     
7050: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7060: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
70b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
70c0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
70d0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
70e0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
70f0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
7100: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
7110: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
7120: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
7130: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
7140: 69 73 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20  is(key)..       
7150: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7160: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 75 62          this.sub
7170: 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79  KeyName = subKey
7180: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
7190: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
71a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
71b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
71f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
7200: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
7210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7220: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
7230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7240: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
7250: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
7260: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
7270: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
7280: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
7290: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
72a0: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20  , subKeyName).. 
72b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
72d0: 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74  is.whatIf = what
72e0: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
72f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7300: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7340: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7350: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
7360: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
7370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
7380: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73a0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
73b0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
73c0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
73d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
73e0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
73f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7400: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
7410: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
7420: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
7430: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
7440: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7450: 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c      this.readOnl
7460: 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  y = readOnly;.. 
7470: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
74d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
74e0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
74f0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
7500: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
7510: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
7520: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
7530: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
7540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
7550: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
7560: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7570: 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20   readOnly,..    
7580: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7590: 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   safe..         
75a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
75b0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
75c0: 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65  (key, subKeyName
75d0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
75e0: 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly)..           
75f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7600: 20 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20      this.safe = 
7610: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
7620: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7630: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7670: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7680: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
7690: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76b0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
76c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
76d0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
76f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7700: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
7710: 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20  ll, whatIf)..   
7720: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
7740: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
7750: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7760: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
7770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
77c0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
77d0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
77e0: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
77f0: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
7800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
7810: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
7820: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
7830: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
7840: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
7850: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
7860: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  y, null, whatIf,
7870: 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20   readOnly)..    
7880: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7890: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
78a0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
78b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
78c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7910: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
7920: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
7930: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7940: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
7950: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
7960: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
7970: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
7980: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
7990: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
79a0: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
79c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
79d0: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
79e0: 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ll, whatIf, read
79f0: 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20  Only, safe)..   
7a00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
7a20: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
7a30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7a40: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7a50: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
7a60: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7aa0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7ab0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
7ac0: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
7ad0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
7ae0: 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20  oid Close()..   
7af0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b20: 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70  // NOTE: No disp
7b30: 6f 73 65 64 20 63 68 65 63 6b 20 68 65 72 65 20  osed check here 
7b40: 62 65 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20  because calling 
7b50: 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20  this method..   
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
7b70: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be 
7b80: 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e  just like callin
7b90: 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20  g Dispose...    
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bc0: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
7bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7c40: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
7c50: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
7c60: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
7c70: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
7c80: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
7c90: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
7ca0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7cb0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
7cc0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
7ce0: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
7cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7d00: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
7d10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7d20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
7d30: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
7d40: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
7d50: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
7d60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7d70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d90: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65     // HACK: Atte
7da0: 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  mpt to open the 
7db0: 73 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65  specified sub-ke
7dc0: 79 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20  y.  If this..   
7dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7de0: 20 2f 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c   //       fails,
7df0: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
7e00: 72 65 74 75 72 6e 20 74 68 65 20 77 72 61 70 70  return the wrapp
7e10: 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20  ed root key..   
7e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e30: 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66   //       itself
7e40: 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73   since no writes
7e50: 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20   are allowed in 
7e60: 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20  'what-if'..     
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7e80: 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79  /       mode any
7e90: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
7ea0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
7ed0: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
7ee0: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
7ef0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7f00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7f10: 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c   (subKey != null
7f20: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
7f40: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
7f50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 20 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49     subKey, whatI
7f80: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
7f90: 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  e) :..          
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
7fb0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
7fc0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
7ff0: 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ame, whatIf, rea
8000: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20  dOnly, safe);.. 
8010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8030: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
8040: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8060: 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65  eturn new MockRe
8070: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8090: 20 20 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75      key.CreateSu
80a0: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
80b0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
80c0: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20  ly, safe);..    
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
80e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
80f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8140: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
8150: 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74  ublic void Delet
8160: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
8170: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
8180: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
81a0: 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
81b0: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
81c0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
81d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
81e0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
81f0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
8200: 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64         CheckRead
8210: 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Only();....     
8220: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
8230: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8250: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
8260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8270: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
8290: 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73  y.DeleteSubKey(s
82a0: 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77  ubKeyName, throw
82b0: 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20  OnMissing);..   
82c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
82d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
82e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
8330: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53  lic void DeleteS
8340: 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
8350: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8360: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20  ng subKeyName.. 
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
8380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
83a0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
83b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
83c0: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
83d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
83e0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
83f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8400: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
8410: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
8420: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
8430: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
8440: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
8450: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73  leteSubKeyTree(s
8460: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20 20 20  ubKeyName);..   
8470: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8480: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
84d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
84e0: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56  lic void DeleteV
84f0: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
8500: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
8510: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
8520: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
8530: 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20  nMissing..      
8540: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8550: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8560: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8570: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
8590: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
85a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85b0: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
85c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
85d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
85e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
85f0: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
8600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8610: 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56       key.DeleteV
8620: 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77  alue(name, throw
8630: 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20  OnMissing);..   
8640: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8650: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
86a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
86b0: 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74  lic string[] Get
86c0: 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 0d 0a 20  SubKeyNames().. 
86d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
86e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
86f0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
8700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8710: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
8720: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8730: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
8740: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
8750: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b          return k
8760: 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65  ey.GetSubKeyName
8770: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
8780: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8790: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
87a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
87e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a        public obj
87f0: 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20  ect GetValue(.. 
8800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8810: 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
8820: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
8830: 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65  ect defaultValue
8840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8850: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8860: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8870: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8880: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
8890: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
88a0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
88c0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
88e0: 74 75 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75  turn key.GetValu
88f0: 65 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56  e(name, defaultV
8900: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
8910: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8920: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8960: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8970: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
8980: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
8990: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
89a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
89b0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20  ng subKeyName.. 
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
89d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
89e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
89f0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
8a00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8a10: 20 20 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e       return Open
8a20: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
8a30: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
8a40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8a50: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
8a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
8ab0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
8ac0: 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  ey OpenSubKey(..
8ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ae0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
8af0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8b00: 20 20 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c      bool writabl
8b10: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8b20: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8b30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8b40: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
8b50: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
8b60: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 72 69           if (wri
8b70: 74 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  table)..        
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8b90: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bb0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
8bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8bd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
8be0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
8bf0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
8c00: 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f  y subKey = key.O
8c10: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c30: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
8c40: 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69  If ? false : wri
8c50: 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  table);....     
8c60: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8c70: 6e 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c  n (subKey != nul
8c80: 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  l) ?..          
8c90: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f            new Mo
8ca0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 73 75  ckRegistryKey(su
8cb0: 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65  bKey, whatIf, re
8cc0: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 20  adOnly, safe) : 
8cd0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
8ce0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8cf0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d30: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8d40: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
8d50: 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  id SetValue(..  
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8d70: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
8d90: 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ct value..      
8da0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8db0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8dd0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
8df0: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
8e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e10: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
8e20: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8e30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
8e40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8e50: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
8e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8e70: 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75       key.SetValu
8e80: 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d  e(name, value);.
8e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
8eb0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
8ec0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8f10: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
8f20: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
8f30: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
8f40: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61  public string Na
8f50: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
8f60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8f70: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
8f80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
8fa0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
8fb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8fc0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
8fd0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ff0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
9000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9010: 20 20 20 20 20 72 65 74 75 72 6e 20 21 53 74 72       return !Str
9020: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
9030: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 20 3f 0d  y(subKeyName) ?.
9040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9050: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
9060: 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d  Format("{0}\\{1}
9070: 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20 73 75 62  ", key.Name, sub
9080: 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20  KeyName) :..    
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90a0: 20 20 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20      key.Name;.. 
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
90c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
90d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9120: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9130: 20 20 70 72 69 76 61 74 65 20 52 65 67 69 73 74    private Regist
9140: 72 79 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20  ryKey key;..    
9150: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 52          public R
9160: 65 67 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a  egistryKey Key..
9170: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
9190: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
91a0: 65 64 28 29 3b 20 43 68 65 63 6b 53 61 66 65 28  ed(); CheckSafe(
91b0: 29 3b 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d  ); return key; }
91c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
91d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
91e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9220: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9230: 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
9240: 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20   subKeyName;..  
9250: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9260: 20 73 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61   string SubKeyNa
9270: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
9280: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9290: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
92a0: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
92b0: 20 73 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a   subKeyName; }..
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
92d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
92e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9320: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9330: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61  private bool wha
9340: 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
9350: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68    public bool Wh
9360: 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20  atIf..          
9370: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9380: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
9390: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
93a0: 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20  rn whatIf; }..  
93b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
93c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
93d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
9420: 69 76 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f  ivate bool readO
9430: 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nly;..          
9440: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65    public bool Re
9450: 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  adOnly..        
9460: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9470: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
9480: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
9490: 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d  turn readOnly; }
94a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
94b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
94c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9510: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 73 61    public bool sa
9520: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe;..           
9530: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66   public bool Saf
9540: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
9550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9560: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
9570: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
9580: 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  safe; }..       
9590: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
95a0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
95b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
95c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9600: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9610: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
9620: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
9630: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
9640: 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79  id CheckReadOnly
9650: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
9660: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9670: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
9680: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
9690: 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d  In "read-only" m
96a0: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
96b0: 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73   all write acces
96c0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
96d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
96e0: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
96f0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
9700: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9710: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
9720: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
9730: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
9740: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
9750: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
9770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
97b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
97c0: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
97d0: 6b 53 61 66 65 28 29 0d 0a 20 20 20 20 20 20 20  kSafe()..       
97e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
97f0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
9810: 4f 54 45 3a 20 49 6e 20 22 73 61 66 65 22 20 6d  OTE: In "safe" m
9820: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
9830: 20 61 6c 6c 20 64 69 72 65 63 74 20 61 63 63 65   all direct acce
9840: 73 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ss to the..     
9850: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
9860: 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 72 65      contained re
9870: 67 69 73 74 72 79 20 6b 65 79 2e 0d 0a 20 20 20  gistry key...   
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
9890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
98a0: 20 69 66 20 28 21 73 61 66 65 29 0d 0a 20 20 20   if (!safe)..   
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98c0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
98e0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
98f0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
9900: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9910: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
9920: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
9930: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9980: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
9990: 69 6f 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65 63  ion System.Objec
99a0: 74 20 4f 76 65 72 72 69 64 65 73 0d 0a 20 20 20  t Overrides..   
99b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
99c0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
99d0: 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20  ToString()..    
99e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
99f0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
9a00: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9a20: 65 74 75 72 6e 20 74 68 69 73 2e 4e 61 6d 65 3b  eturn this.Name;
9a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
9a50: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
9a60: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9ab0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
9ac0: 6e 20 49 6d 70 6c 69 63 69 74 20 43 6f 6e 76 65  n Implicit Conve
9ad0: 72 73 69 6f 6e 20 4f 70 65 72 61 74 6f 72 73 0d  rsion Operators.
9ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
9af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
9b00: 42 55 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d  BUGBUG: Remove m
9b10: 65 3f 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20  e?  This should 
9b20: 62 65 20 73 61 66 65 20 62 65 63 61 75 73 65 20  be safe because 
9b30: 69 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20  in 'what-if'..  
9b40: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
9b50: 20 20 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65       mode all ke
9b60: 79 73 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65  ys are opened re
9b70: 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20  ad-only...      
9b80: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9b90: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
9ba0: 74 69 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65  tic implicit ope
9bb0: 72 61 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65  rator RegistryKe
9bc0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9bd0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
9be0: 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  Key key..       
9bf0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
9c00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9c10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9c20: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
9c30: 3f 20 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c  ? key.Key : null
9c40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
9c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
9c60: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
9c70: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9cc0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
9cd0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
9ce0: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
9cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
9d00: 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
9d10: 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sed;..          
9d20: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
9d30: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
9d40: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
9d50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9d60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
9d70: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9d90: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
9da0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
9db0: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
9dc0: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9de0: 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67    typeof(MockReg
9df0: 69 73 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b  istryKey).Name);
9e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9e10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e60: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9e70: 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f    private /* pro
9e80: 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a  tected virtual *
9e90: 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d  / void Dispose(.
9ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9eb0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d   bool disposing.
9ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ed0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9ee0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9ef0: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
9f00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9f10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9f20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
9f30: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
9f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f60: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fa0: 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73         // dispos
9fb0: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
9fc0: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fe0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a020: 20 20 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20       if (key != 
a030: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
a050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
a070: 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  y.Close();..    
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75          key = nu
a0a0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
a0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
a0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
a120: 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
a130: 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
a140: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
a150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a160: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
a1b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
a1c0: 54 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  TE: This object 
a1d0: 69 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e  is now disposed.
a1e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a1f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
a200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
a210: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
a220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a230: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
a240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
a250: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
a260: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a2b0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
a2c0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
a2d0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
a2e0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
a2f0: 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
a300: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a310: 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
a320: 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
a330: 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70            GC.Sup
a340: 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
a350: 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  is);..          
a360: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
a370: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
a380: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
a3e0: 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72  egion Destructor
a3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d  ..            ~M
a400: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29  ockRegistryKey()
a410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a430: 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b   Dispose(false);
a440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
a460: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
a470: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
a480: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
a490: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a4e0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67       #region Reg
a4f0: 69 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73  istryHelper Clas
a500: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
a510: 74 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  te static class 
a520: 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a  RegistryHelper..
a530: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a540: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
a550: 75 62 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f  ublic Static Pro
a560: 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
a570: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
a580: 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43  tic int subKeysC
a590: 72 65 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  reated;..       
a5a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
a5b0: 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72  ic int SubKeysCr
a5c0: 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  eated..         
a5d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a5e0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
a5f0: 72 6e 20 73 75 62 4b 65 79 73 43 72 65 61 74 65  rn subKeysCreate
a600: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
a610: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a620: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a660: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a670: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
a680: 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73  atic int subKeys
a690: 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20  Deleted;..      
a6a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
a6b0: 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44  tic int SubKeysD
a6c0: 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20  eleted..        
a6d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a6e0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
a6f0: 75 72 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74  urn subKeysDelet
a700: 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ed; }..         
a710: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a720: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a760: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a770: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
a780: 74 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c  tatic int keyVal
a790: 75 65 73 53 65 74 3b 0d 0a 20 20 20 20 20 20 20  uesSet;..       
a7a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
a7b0: 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73  ic int KeyValues
a7c0: 53 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Set..           
a7d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a7e0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
a7f0: 20 6b 65 79 56 61 6c 75 65 73 53 65 74 3b 20 7d   keyValuesSet; }
a800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a810: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a870: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
a880: 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 44 65   int keyValuesDe
a890: 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  leted;..        
a8a0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
a8b0: 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 44  c int KeyValuesD
a8c0: 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20  eleted..        
a8d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a8e0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
a8f0: 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 44 65 6c  urn keyValuesDel
a900: 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  eted; }..       
a910: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a920: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
a930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
a990: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
a9a0: 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Static Methods..
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
a9c0: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
a9d0: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
a9e0: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
a9f0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
aa00: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
aa10: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
aa30: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
aa40: 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
aa50: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
aa60: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
aa80: 6c 20 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20  l writable,..   
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
aaa0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
aab0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
aac0: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
aad0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
aae0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
aaf0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
ab00: 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
ab10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab20: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
ab30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ab40: 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
ab50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ab60: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
ab70: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 77 72  DebugAndTrace(wr
ab80: 69 74 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20  itable ?..      
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aba0: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
abb0: 48 69 67 68 65 73 74 20 3a 20 54 72 61 63 65 50  Highest : TraceP
abc0: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d  riority.Higher,.
abd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
abe0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
abf0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
ac00: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
ac10: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
ac30: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
ac40: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c  ubKeyName = {1},
ac50: 20 77 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22   writable = {2}"
ac60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ac70: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
ac80: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
ac90: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
aca0: 79 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  yName),..       
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acc0: 20 46 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74   ForDisplay(writ
acd0: 61 62 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74  able)), traceCat
ace0: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
acf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ad10: 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66  / HACK: Always f
ad20: 6f 72 62 69 64 20 77 72 69 74 61 62 6c 65 20 61  orbid writable a
ad30: 63 63 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61  ccess when opera
ad40: 74 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20  ting in..       
ad50: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
ad60: 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65    'what-if' mode
ad70: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ad80: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
ad90: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
ada0: 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f  tryKey key = roo
adb0: 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28  tKey.OpenSubKey(
adc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
add0: 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65        subKeyName
ade0: 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65  , whatIf ? false
adf0: 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d   : writable);...
ae00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ae10: 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20   return (key != 
ae20: 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
ae30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
ae40: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
ae50: 28 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61  (key, whatIf, fa
ae60: 6c 73 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75  lse, false) : nu
ae70: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
ae80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ae90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
aea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aed0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
aee0: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
aef0: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
af00: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
af10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
af20: 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52  lic static MockR
af30: 65 67 69 73 74 72 79 4b 65 79 20 43 72 65 61 74  egistryKey Creat
af40: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
af50: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
af60: 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
af70: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
af80: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
af90: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
afa0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
afb0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
afc0: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
afd0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
afe0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
aff0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b000: 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
b010: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b030: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
b040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b050: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b070: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
b080: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
b090: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
b0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b0b0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
b0c0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
b0d0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
b0e0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
b100: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
b110: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22  ubKeyName = {1}"
b120: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
b130: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
b140: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
b150: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
b160: 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  yName)),..      
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b180: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
b190: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b1a0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
b1b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1d0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
b1e0: 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b           // HACK
b1f0: 3a 20 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20  : Always open a 
b200: 6b 65 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e  key, rather than
b210: 20 63 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68   creating one wh
b220: 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  en..            
b230: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
b240: 20 6f 70 65 72 61 74 69 6e 67 20 69 6e 20 27 77   operating in 'w
b250: 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20  hat-if' mode... 
b260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b270: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
b280: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77             if (w
b290: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2c0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2e0: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65     // HACK: Atte
b2f0: 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  mpt to open the 
b300: 73 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65  specified sub-ke
b310: 79 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20  y.  If..        
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b330: 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20 66 61  //       this fa
b340: 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d  ils, we will sim
b350: 70 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 72  ply return the r
b360: 6f 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oot..           
b370: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
b380: 20 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66        key itself
b390: 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73   since no writes
b3a0: 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d   are allowed in.
b3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b3c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
b3d0: 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65    'what-if' mode
b3e0: 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20   anyhow...      
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b400: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
b420: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
b430: 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e  y = rootKey.Open
b440: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
b450: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
b460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b470: 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75  eturn (key != nu
b480: 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ll) ?..         
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 20 20 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63     key : new Moc
b4b0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b4e0: 6f 6f 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61  ootKey, subKeyNa
b4f0: 6d 65 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73  me, whatIf, fals
b500: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b520: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b530: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b560: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b570: 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73  rn new MockRegis
b580: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5a0: 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65       rootKey.Cre
b5b0: 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
b5c0: 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 66  Name), whatIf, f
b5d0: 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 20 20 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20     false);..    
b600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b610: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b620: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b630: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
b640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
b650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b660: 20 20 20 20 20 20 73 75 62 4b 65 79 73 43 72 65        subKeysCre
b670: 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ated++;..       
b680: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b690: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b6a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
b700: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
b710: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
b720: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
b730: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
b740: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
b750: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
b760: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
b770: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
b7a0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
b7b0: 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
b7c0: 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
b7d0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
b7e0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
b7f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
b800: 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
b810: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
b820: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b830: 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
b840: 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
b850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b860: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
b870: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b880: 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
b8a0: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
b8b0: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
b8c0: 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
b8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8e0: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
b8f0: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
b900: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
b910: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
b920: 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f              "roo
b930: 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b  tKey = {0}, subK
b940: 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a  eyName = {1}",..
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b960: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
b970: 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72  ay(rootKey), For
b980: 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61  Display(subKeyNa
b990: 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
b9b0: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
b9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b9d0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65      rootKey.Dele
ba00: 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  teSubKey(subKeyN
ba10: 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  ame, throwOnMiss
ba20: 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ing);....       
ba30: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73           subKeys
ba40: 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Deleted++;..    
ba50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ba60: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
ba70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
bac0: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
bad0: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
bae0: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
baf0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
bb00: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
bb10: 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
bb20: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
bb30: 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
bb40: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
bb50: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
bb60: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
bb70: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
bb80: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
bb90: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
bba0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
bbb0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
bbc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bbd0: 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
bbe0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc00: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
bc10: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
bc20: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
bc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
bc40: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
bc50: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
bc60: 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
bc90: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
bca0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
bcb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bcc0: 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b            "rootK
bcd0: 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79  ey = {0}, subKey
bce0: 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20  Name = {1}",..  
bcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd00: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
bd10: 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69  (rootKey), ForDi
bd20: 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65  splay(subKeyName
bd30: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
bd50: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd70: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd90: 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65    rootKey.Delete
bda0: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
bdb0: 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
bdc0: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
bdd0: 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20  ysDeleted++;..  
bde0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bdf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
be40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
be50: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
be60: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
be70: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
be80: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
be90: 74 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74  tic string[] Get
bea0: 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20  SubKeyNames(..  
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
bec0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
bed0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
bee0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
bef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf00: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
bf30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf40: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
bf50: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
bf60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
bf70: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
bf80: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
bf90: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
bfa0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
bfb0: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
bfc0: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
bfd0: 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
bff0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
c000: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
c010: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c030: 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c      "key = {0}",
c040: 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29   ForDisplay(key)
c050: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
c060: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
c080: 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28  .GetSubKeyNames(
c090: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c0a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
c0b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
c0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c100: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
c110: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
c120: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
c130: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
c140: 69 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74  ic static object
c150: 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   GetValue(..    
c160: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
c170: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
c180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c190: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1b0: 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61  object defaultVa
c1c0: 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lue,..          
c1d0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
c1e0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
c1f0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
c200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c210: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
c220: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c230: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
c240: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
c250: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c260: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
c270: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
c280: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
c290: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
c2a0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
c2b0: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
c2c0: 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  .High,..        
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2e0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
c2f0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
c300: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c320: 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d        "key = {0}
c330: 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65  , name = {1}, de
c340: 66 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d  faultValue = {2}
c350: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
c360: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
c370: 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72  isplay(key), For
c380: 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a  Display(name),..
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3a0: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
c3b0: 61 79 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29  ay(defaultValue)
c3c0: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
c3d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c3e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
c3f0: 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .GetValue(name, 
c400: 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a  defaultValue);..
c410: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
c420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
c430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c480: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
c490: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
c4a0: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
c4b0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
c4c0: 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 56 61  tatic void SetVa
c4d0: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
c4e0: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c4f0: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
c500: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
c510: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
c520: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
c530: 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20   value,..       
c540: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
c550: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
c560: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
c570: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
c580: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
c590: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c5a0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
c5b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c5d0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
c5e0: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
c5f0: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
c600: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
c610: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
c620: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
c630: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c650: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
c660: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
c670: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
c680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c690: 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30         "key = {0
c6a0: 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76  }, name = {1}, v
c6b0: 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20  alue = {2}",..  
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6d0: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
c6e0: 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  (key), ForDispla
c6f0: 79 28 6e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70  y(name), ForDisp
c700: 6c 61 79 28 76 61 6c 75 65 29 29 2c 0d 0a 20 20  lay(value)),..  
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c720: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
c730: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
c740: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
c750: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
c760: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53             key.S
c770: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61  etValue(name, va
c780: 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
c790: 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75           keyValu
c7a0: 65 73 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20 20  esSet++;..      
c7b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c7c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
c7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c810: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
c820: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
c830: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
c840: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
c850: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
c860: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
c870: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c880: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
c890: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
c8a0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
c8b0: 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
c8c0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
c8d0: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
c8f0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
c900: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
c910: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
c920: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
c930: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c940: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
c950: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
c980: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c990: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c9b0: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
c9c0: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
c9d0: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
ca00: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
ca10: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
ca20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ca30: 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20             "key 
ca40: 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31  = {0}, name = {1
ca50: 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b  }", ForDisplay(k
ca60: 65 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ey),..          
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
ca80: 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c  rDisplay(name)),
ca90: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
caa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cab0: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
cac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cad0: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
cae0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f  Value(name, thro
caf0: 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a  wOnMissing);....
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb10: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
cb20: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
cb30: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
cb40: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
cb50: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
cb60: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cb70: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cbc0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
cbd0: 53 74 72 69 6e 67 4c 69 73 74 20 43 6c 61 73 73  StringList Class
cbe0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
cbf0: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  e sealed class S
cc00: 74 72 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74  tringList : List
cc10: 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20  <string>..      
cc20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cc30: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69   public StringLi
cc40: 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
cc50: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cc80: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
cc90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ccb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ccf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
cd00: 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
cd10: 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72  (IEnumerable<str
cd20: 69 6e 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29  ing> collection)
cd30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd40: 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74    : base(collect
cd50: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
cd60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cd70: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
cd80: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
cd90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
cda0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
cdb0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
cdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce00: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ce10: 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 44 69  #region StringDi
ce20: 63 74 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a  ctionary Class..
ce30: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ce40: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72  sealed class Str
ce50: 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 3a 20  ingDictionary : 
ce60: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
ce70: 67 2c 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20  g, string>..    
ce80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ce90: 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67     public String
cea0: 44 69 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20  Dictionary()..  
ceb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ced0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
cee0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
cef0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
cf00: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cf10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cf60: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
cf70: 56 65 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73  VersionList Clas
cf80: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
cf90: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
cfa0: 56 65 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69  VersionList : Li
cfb0: 73 74 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20  st<Version>..   
cfc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cfd0: 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
cfe0: 6f 6e 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  onList()..      
cff0: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
d000: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
d010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d020: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
d030: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
d040: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d090: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
d0a0: 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
d0b0: 6e 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c  nList(IEnumerabl
d0c0: 65 3c 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65  e<Version> colle
d0d0: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
d0e0: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 63          : base(c
d0f0: 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  ollection)..    
d100: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d110: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
d120: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
d130: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d140: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
d150: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
d160: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d1b0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65        #region Ve
d1c0: 72 73 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a  rsionMap Class..
d1d0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
d1e0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72  sealed class Ver
d1f0: 73 69 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f  sionMap : Dictio
d200: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 56 65 72  nary<string, Ver
d210: 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20  sionList>..     
d220: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d230: 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
d240: 4d 61 70 28 29 0d 0a 20 20 20 20 20 20 20 20 20  Map()..         
d250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d260: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
d270: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
d280: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
d290: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
d2a0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
d2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d300: 20 23 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65   #region Package
d310: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
d320: 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20  internal sealed 
d330: 63 6c 61 73 73 20 50 61 63 6b 61 67 65 0d 0a 20  class Package.. 
d340: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d350: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
d360: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
d370: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
d380: 75 62 6c 69 63 20 50 61 63 6b 61 67 65 28 29 0d  ublic Package().
d390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3b0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d3d0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
d3e0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
d3f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
d400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d430: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d440: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
d450: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
d460: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
d470: 72 69 76 61 74 65 20 47 75 69 64 20 70 61 63 6b  rivate Guid pack
d480: 61 67 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  ageId;..        
d490: 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20      public Guid 
d4a0: 50 61 63 6b 61 67 65 49 64 0d 0a 20 20 20 20 20  PackageId..     
d4b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d4c0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
d4d0: 72 65 74 75 72 6e 20 70 61 63 6b 61 67 65 49 64  return packageId
d4e0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
d4f0: 20 20 20 20 20 73 65 74 20 7b 20 70 61 63 6b 61       set { packa
d500: 67 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  geId = value; }.
d510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d570: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
d580: 20 70 72 69 76 61 74 65 20 47 75 69 64 20 73 65   private Guid se
d590: 72 76 69 63 65 49 64 3b 0d 0a 20 20 20 20 20 20  rviceId;..      
d5a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69        public Gui
d5b0: 64 20 53 65 72 76 69 63 65 49 64 0d 0a 20 20 20  d ServiceId..   
d5c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
d5e0: 7b 20 72 65 74 75 72 6e 20 73 65 72 76 69 63 65  { return service
d5f0: 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  Id; }..         
d600: 20 20 20 20 20 20 20 73 65 74 20 7b 20 73 65 72         set { ser
d610: 76 69 63 65 49 64 20 3d 20 76 61 6c 75 65 3b 20  viceId = value; 
d620: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
d630: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d680: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
d690: 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20     private Guid 
d6a0: 64 61 74 61 53 6f 75 72 63 65 49 64 3b 0d 0a 20  dataSourceId;.. 
d6b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
d6c0: 63 20 47 75 69 64 20 44 61 74 61 53 6f 75 72 63  c Guid DataSourc
d6d0: 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  eId..           
d6e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d6f0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
d700: 20 64 61 74 61 53 6f 75 72 63 65 49 64 3b 20 7d   dataSourceId; }
d710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d720: 20 20 73 65 74 20 7b 20 64 61 74 61 53 6f 75 72    set { dataSour
d730: 63 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ceId = value; }.
d740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
d7b0: 20 70 72 69 76 61 74 65 20 47 75 69 64 20 64 61   private Guid da
d7c0: 74 61 50 72 6f 76 69 64 65 72 49 64 3b 0d 0a 20  taProviderId;.. 
d7d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
d7e0: 63 20 47 75 69 64 20 44 61 74 61 50 72 6f 76 69  c Guid DataProvi
d7f0: 64 65 72 49 64 0d 0a 20 20 20 20 20 20 20 20 20  derId..         
d800: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d810: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
d820: 72 6e 20 64 61 74 61 50 72 6f 76 69 64 65 72 49  rn dataProviderI
d830: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
d840: 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74 61        set { data
d850: 50 72 6f 76 69 64 65 72 49 64 20 3d 20 76 61 6c  ProviderId = val
d860: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
d870: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d880: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d8d0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
d8e0: 75 69 64 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f  uid adoNetTechno
d8f0: 6c 6f 67 79 49 64 3b 0d 0a 20 20 20 20 20 20 20  logyId;..       
d900: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
d910: 20 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67   AdoNetTechnolog
d920: 79 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  yId..           
d930: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d940: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
d950: 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67   adoNetTechnolog
d960: 79 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  yId; }..        
d970: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61 64          set { ad
d980: 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
d990: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
d9a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d9b0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
d9c0: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
d9d0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
d9e0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
d9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da30: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
da40: 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72  #region Configur
da50: 61 74 69 6f 6e 20 43 6c 61 73 73 0d 0a 20 20 20  ation Class..   
da60: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
da70: 6c 65 64 20 63 6c 61 73 73 20 43 6f 6e 66 69 67  led class Config
da80: 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  uration..       
da90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
daa0: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
dab0: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
dac0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
dad0: 6f 6e 73 74 20 63 68 61 72 20 53 77 69 74 63 68  onst char Switch
dae0: 20 3d 20 27 2d 27 3b 0d 0a 20 20 20 20 20 20 20   = '-';..       
daf0: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
db00: 73 74 20 63 68 61 72 20 41 6c 74 53 77 69 74 63  st char AltSwitc
db10: 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a 20 20 20 20  h = '/';....    
db20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
db30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
db70: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
db80: 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
db90: 6c 79 20 63 68 61 72 5b 5d 20 53 77 69 74 63 68  ly char[] Switch
dba0: 43 68 61 72 73 20 3d 20 7b 0d 0a 20 20 20 20 20  Chars = {..     
dbb0: 20 20 20 20 20 20 20 20 20 20 20 53 77 69 74 63             Switc
dbc0: 68 2c 20 41 6c 74 53 77 69 74 63 68 0d 0a 20 20  h, AltSwitch..  
dbd0: 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 20 20            };..  
dbe0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
dbf0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
dc00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
dc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
dc50: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
dc60: 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74  rivate Construct
dc70: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
dc80: 20 70 72 69 76 61 74 65 20 43 6f 6e 66 69 67 75   private Configu
dc90: 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ration(..       
dca0: 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
dcb0: 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20  y assembly,..   
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
dcd0: 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c  ing logFileName,
dce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dcf0: 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
dd00: 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
dd10: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
dd20: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
dd30: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
dd40: 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d  g linqFileName,.
dd50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dd60: 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
dd70: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
dd80: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
dd90: 67 20 64 65 62 75 67 46 6f 72 6d 61 74 2c 0d 0a  g debugFormat,..
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddb0: 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
ddc0: 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
ddd0: 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
dde0: 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d  s installFlags,.
ddf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de00: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64   TracePriority d
de10: 65 62 75 67 50 72 69 6f 72 69 74 79 2c 0d 0a 20  ebugPriority,.. 
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
de30: 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
de40: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
de60: 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20 20  l install,..    
de70: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
de80: 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
de90: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
dea0: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d  RuntimeVersion,.
deb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dec0: 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c   bool noDesktop,
ded0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dee0: 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74    bool noCompact
def0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
df00: 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32     bool noNetFx2
df10: 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
df20: 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
df30: 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40,..           
df40: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
df50: 30 38 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08,..           
df60: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
df70: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10,..           
df80: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63       bool noTrac
df90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
dfa0: 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f      bool noConso
dfb0: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
dfc0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c       bool noLog,
dfd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dfe0: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
dff0: 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
e000: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
e010: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
e020: 20 20 20 20 20 20 62 6f 6f 6c 20 64 65 62 75 67        bool debug
e030: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e040: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
e050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e060: 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a    bool confirm..
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e080: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0a0: 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79 20    this.assembly 
e0b0: 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20  = assembly;..   
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
e0d0: 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  s.logFileName = 
e0e0: 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  logFileName;..  
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e100: 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 64  is.directory = d
e110: 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20  irectory;..     
e120: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e130: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63  coreFileName = c
e140: 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  oreFileName;..  
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e160: 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  is.linqFileName 
e170: 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  = linqFileName;.
e180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e190: 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72 46 69   this.designerFi
e1a0: 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65  leName = designe
e1b0: 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  rFileName;..    
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
e1d0: 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 64  .debugFormat = d
e1e0: 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  ebugFormat;..   
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
e200: 73 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  s.traceFormat = 
e210: 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20  traceFormat;..  
e220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e230: 69 73 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20  is.installFlags 
e240: 3d 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d  = installFlags;.
e250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e260: 20 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f 72   this.debugPrior
e270: 69 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f 72  ity = debugPrior
e280: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
e290: 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65        this.trace
e2a0: 50 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63 65  Priority = trace
e2b0: 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
e2c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e2d0: 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c  install = instal
e2e0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
e2f0: 20 20 20 20 74 68 69 73 2e 77 6f 77 36 34 20 3d      this.wow64 =
e300: 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20   wow64;..       
e310: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
e320: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
e330: 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
e340: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
e350: 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74      this.noDeskt
e360: 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d  op = noDesktop;.
e370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e380: 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20   this.noCompact 
e390: 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20  = noCompact;..  
e3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e3b0: 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e  is.noNetFx20 = n
e3c0: 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20  oNetFx20;..     
e3d0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e3e0: 6e 6f 4e 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65  noNetFx40 = noNe
e3f0: 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20  tFx40;..        
e400: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
e410: 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30 30 38  s2008 = noVs2008
e420: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e430: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 30     this.noVs2010
e440: 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20   = noVs2010;..  
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e460: 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54  is.noTrace = noT
e470: 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  race;..         
e480: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f         this.noCo
e490: 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c  nsole = noConsol
e4a0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
e4b0: 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d      this.noLog =
e4c0: 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20   noLog;..       
e4d0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 68           this.th
e4e0: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74  rowOnMissing = t
e4f0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a  hrowOnMissing;..
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e510: 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68  this.whatIf = wh
e520: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
e530: 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75         this.debu
e540: 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20 20 20  g = debug;..    
e550: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
e560: 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72 62 6f  .verbose = verbo
e570: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
e580: 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 72       this.confir
e590: 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  m = confirm;..  
e5a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e5b0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
e5c0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
e5d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e610: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e620: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
e630: 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65 74  ivate Static Met
e640: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
e650: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
e660: 20 76 6f 69 64 20 47 65 74 44 65 66 61 75 6c 74   void GetDefault
e670: 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20  FileNames(..    
e680: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
e690: 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
e6a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e6b0: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f     ref string co
e6c0: 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  reFileName,..   
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
e6e0: 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
e6f0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
e700: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
e710: 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
e720: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
e730: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
e740: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e750: 20 20 20 20 20 20 69 66 20 28 74 68 69 73 41 73        if (thisAs
e760: 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d  sembly == null).
e770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e780: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7a0: 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68  directory = Path
e7b0: 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d  .GetDirectoryNam
e7c0: 65 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c  e(thisAssembly.L
e7d0: 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  ocation);....   
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e7f0: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
e800: 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
e810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e820: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
e830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e840: 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d    coreFileName =
e850: 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
e860: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
e880: 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65  staller.CoreFile
e890: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
e8a0: 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
e8b0: 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
e8c0: 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
e8d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e8e0: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
e8f0: 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  LinqFileName);..
e900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e910: 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
e920: 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
e930: 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  e(directory,..  
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69    Installer.Desi
e960: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
e970: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
e980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
e990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e9e0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
e9f0: 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28  ool CheckOption(
ea00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ea10: 20 20 72 65 66 20 73 74 72 69 6e 67 20 61 72 67    ref string arg
ea20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ea30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
ea40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ea50: 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
ea60: 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20  t = arg;....    
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ea80: 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
ea90: 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d 0a  Empty(result))..
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eab0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
eac0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
ead0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eae0: 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61  / NOTE: Remove a
eaf0: 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74 63  ll leading switc
eb00: 68 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20 20  h chars...      
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
eb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eb30: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 72        result = r
eb40: 65 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74 28  esult.TrimStart(
eb50: 53 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d  SwitchChars);...
eb60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eb70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
eb90: 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63  NOTE: How many c
eba0: 68 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76 65  hars were remove
ebb0: 64 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d?..            
ebc0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebe0: 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e  int count = arg.
ebf0: 4c 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74 2e  Length - result.
ec00: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ec20: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
ec30: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
ec40: 57 61 73 20 74 68 65 72 65 20 61 74 20 6c 65 61  Was there at lea
ec50: 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20  st one?..       
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
ec70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ec80: 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e       if (count >
ec90: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
eca0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ecb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecc0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ece0: 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70  // NOTE: Ok, rep
ecf0: 6c 61 63 65 20 74 68 65 69 72 20 6f 72 69 67 69  lace their origi
ed00: 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nal..           
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ed20: 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d        argument..
ed30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ed40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed60: 20 20 20 20 20 61 72 67 20 3d 20 72 65 73 75 6c       arg = resul
ed70: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ed90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eda0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
edb0: 45 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73 20  E: Yes, this is 
edc0: 61 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20 20  a switch...     
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ede0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
edf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
ee00: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ee30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ee40: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ee50: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
ee60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ee70: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ee80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
eec0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
eed0: 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63  static bool Matc
eee0: 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  hOption(..      
eef0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
ef00: 20 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20   arg,..         
ef10: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f 70         string op
ef20: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..          
ef30: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
ef40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ef50: 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67          if ((arg
ef60: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70   == null) || (op
ef70: 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  tion == null))..
ef80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef90: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
efa0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
efb0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
efc0: 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c 20  ng.Compare(arg, 
efd0: 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20  0, option, 0,.. 
efe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eff0: 20 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53     arg.Length, S
f000: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
f010: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
f020: 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20  e) == 0;..      
f030: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f040: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f090: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f0a0: 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50  e static bool? P
f0b0: 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20  arseBoolean(..  
f0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
f0d0: 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20  ring text..     
f0e0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
f0f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f110: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
f120: 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20  rEmpty(text)).. 
f130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
f140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f150: 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65        bool value
f160: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f170: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f           if (boo
f180: 6c 2e 54 72 79 50 61 72 73 65 28 74 65 78 74 2c  l.TryParse(text,
f190: 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20   out value))..  
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
f1c0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
f1d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f1e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
f1f0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
f200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f210: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
f220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f250: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f260: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
f270: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50 61  static object Pa
f280: 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
f290: 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 65            Type e
f2a0: 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20 20  numType,..      
f2b0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f2c0: 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20   text,..        
f2d0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43          bool noC
f2e0: 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ase..           
f2f0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
f300: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f310: 20 20 20 20 20 20 20 69 66 20 28 28 65 6e 75 6d         if ((enum
f320: 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  Type == null) ||
f330: 20 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75   !enumType.IsEnu
f340: 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
f350: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
f360: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
f370: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
f380: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
f390: 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  y(text))..      
f3a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3c0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
f3d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3f0: 20 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d       return Enum
f400: 2e 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65 2c  .Parse(enumType,
f410: 20 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d   text, noCase);.
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f430: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f440: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
f450: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
f460: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f480: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
f490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f4a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f4b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
f4d0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
f4e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f4f0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
f500: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
f510: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
f520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f550: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
f560: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
f570: 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  ic Static Method
f580: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
f590: 75 62 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e  ublic static Con
f5a0: 66 69 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74  figuration Creat
f5b0: 65 44 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20  eDefault()..    
f5c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f5d0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
f5e0: 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75  g directory = nu
f5f0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
f600: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
f610: 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  FileName = null;
f620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f630: 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c    string linqFil
f640: 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  eName = null;.. 
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f660: 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
f670: 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
f680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f690: 20 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65    GetDefaultFile
f6a0: 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
f6b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
f6c0: 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20 63  directory, ref c
f6d0: 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66  oreFileName, ref
f6e0: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a   linqFileName,..
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f700: 20 20 20 20 72 65 66 20 64 65 73 69 67 6e 65 72      ref designer
f710: 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
f730: 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67 75  turn new Configu
f740: 72 61 74 69 6f 6e 28 74 68 69 73 41 73 73 65 6d  ration(thisAssem
f750: 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63  bly, null, direc
f760: 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
f770: 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
f780: 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46 69 6c  ileName, linqFil
f790: 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65 72 46  eName, designerF
f7a0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
f7c0: 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d  aceOps.DebugForm
f7d0: 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 54 72 61  at, TraceOps.Tra
f7e0: 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ceFormat,..     
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
f800: 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61  nstallFlags.Defa
f810: 75 6c 74 2c 20 54 72 61 63 65 50 72 69 6f 72 69  ult, TracePriori
f820: 74 79 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20  ty.Default,..   
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f840: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44   TracePriority.D
f850: 65 66 61 75 6c 74 2c 20 74 72 75 65 2c 20 66 61  efault, true, fa
f860: 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
f870: 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20  e, false,..     
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
f890: 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
f8a0: 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
f8b0: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
f8c0: 74 72 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  true,..         
f8d0: 20 20 20 20 20 20 20 20 20 20 20 74 72 75 65 2c             true,
f8e0: 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
f8f0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
f900: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f910: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
f920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f950: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f960: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
f970: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
f980: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
f990: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
f9a0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f  public static bo
f9b0: 6f 6c 20 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20  ol FromArgs(..  
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
f9d0: 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20  ring[] args,..  
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f9f0: 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
fa00: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
fa10: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
fa20: 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
fa40: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
fa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
fa70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fa80: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
fa90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
faa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
fab0: 20 28 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d   (args == null).
fac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fad0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
fae0: 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
faf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
fb00: 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
fb10: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
fb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb30: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d   configuration =
fb40: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   Configuration.C
fb50: 72 65 61 74 65 44 65 66 61 75 6c 74 28 29 3b 0d  reateDefault();.
fb60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
fb70: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
fb80: 68 20 3d 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b  h = args.Length;
fb90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fba0: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
fbb0: 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
fbc0: 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65  x < length; inde
fbd0: 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
fbe0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc00: 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 20       string arg 
fc10: 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a  = args[index];..
fc20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fc30: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc50: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
fc60: 6b 69 70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74  kip any argument
fc70: 20 74 68 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f   that is null (?
fc80: 29 20 6f 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20  ) or an empty.. 
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fca0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
fcb0: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...       
fcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcd0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
fcf0: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
fd00: 45 6d 70 74 79 28 61 72 67 29 29 0d 0a 20 20 20  Empty(arg))..   
fd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd20: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
fd30: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
fd50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd60: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
fd70: 45 3a 20 57 65 20 61 72 65 20 67 6f 69 6e 67 20  E: We are going 
fd80: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 6f 72  to modify the or
fd90: 69 67 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d  iginal argument.
fda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fdb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
fdc0: 20 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e    by removing an
fdd0: 79 20 6c 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e  y leading option
fde0: 20 63 68 61 72 61 63 74 65 72 73 3b 0d 0a 20 20   characters;..  
fdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe00: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
fe10: 68 65 72 65 66 6f 72 65 2c 20 77 65 20 75 73 65  herefore, we use
fe20: 20 61 20 6e 65 77 20 73 74 72 69 6e 67 20 74 6f   a new string to
fe30: 20 68 6f 6c 64 20 74 68 65 0d 0a 20 20 20 20 20   hold the..     
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe50: 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69     //       modi
fe60: 66 69 65 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a  fied argument...
fe70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe80: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 41 72      string newAr
feb0: 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20  g = arg;....    
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fed0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fef0: 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65  // NOTE: All the
ff00: 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61   supported comma
ff10: 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20  nd line options 
ff20: 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ff40: 20 20 20 20 20 20 20 62 65 67 69 6e 20 77 69 74         begin wit
ff50: 68 20 61 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72  h an option char
ff60: 61 63 74 65 72 20 28 65 2e 67 2e 20 61 20 6d 69  acter (e.g. a mi
ff70: 6e 75 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nus..           
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ff90: 20 20 20 20 20 20 6f 72 20 66 6f 72 77 61 72 64        or forward
ffa0: 20 73 6c 61 73 68 29 3b 20 61 74 74 65 6d 70 74   slash); attempt
ffb0: 20 74 6f 20 76 61 6c 69 64 61 74 65 20 74 68 61   to validate tha
ffc0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
ffd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
ffe0: 20 20 20 20 6e 6f 77 2e 20 20 49 66 20 77 65 20      now.  If we 
fff0: 66 61 69 6c 20 69 6e 20 73 74 72 69 63 74 20 6d  fail in strict m
10000 6f 64 65 2c 20 77 65 20 61 72 65 20 64 6f 6e 65  ode, we are done
10010 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10020 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
10030 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6a      otherwise, j
10040 75 73 74 20 73 6b 69 70 20 74 68 69 73 20 61 72  ust skip this ar
10050 67 75 6d 65 6e 74 20 61 6e 64 20 61 64 76 61 6e  gument and advan
10060 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
10070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
10080 20 20 20 20 20 74 6f 20 74 68 65 20 6e 65 78 74       to the next
10090 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20   one...         
100a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
100b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
100c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
100d0 43 68 65 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20  CheckOption(ref 
100e0 6e 65 77 41 72 67 29 29 0d 0a 20 20 20 20 20 20  newArg))..      
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10100 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10120 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
10130 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
10140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10160 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
10170 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
10180 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
101b0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
101c0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72         "Unsuppor
101f0 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
10200 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c   argument: {0}",
10210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10230 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
10240 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
10250 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10270 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
10280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
102b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
102c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
102d0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
10310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10320 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
10330 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72  : All the suppor
10340 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
10350 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20   options must.. 
10360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10370 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
10380 68 61 76 65 20 61 20 76 61 6c 75 65 3b 20 74 68  have a value; th
10390 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74  erefore, attempt
103a0 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20 20   to advance..   
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
103d0 20 69 74 20 6e 6f 77 2e 20 20 49 66 20 77 65 20   it now.  If we 
103e0 66 61 69 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e  fail, we are don
103f0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
10400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10420 20 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b          index++;
10430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10440 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10450 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29  index >= length)
10460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10470 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10490 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
104a0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
104b0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
104e0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
104f0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10520 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
10530 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10560 4d 69 73 73 69 6e 67 20 76 61 6c 75 65 20 66 6f  Missing value fo
10570 72 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d  r option: {0}",.
10580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105a0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
105b0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
105c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105e0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
105f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10610 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
10640 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
10650 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
10660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10670 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
106a0 61 62 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  ab the textual v
106b0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d  alue of this com
106c0 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106e0 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69     //       opti
106f0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on...           
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
10710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10720 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10730 74 65 78 74 20 3d 20 61 72 67 73 5b 69 6e 64 65  text = args[inde
10740 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
10750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10760 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10770 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
10780 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77  TE: Figure out w
10790 68 69 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  hich command lin
107a0 65 20 6f 70 74 69 6f 6e 20 74 68 69 73 20 69 73  e option this is
107b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
107c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
107d0 20 20 20 28 62 61 73 65 64 20 6f 6e 20 61 20 70     (based on a p
107e0 61 72 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63  artial name matc
107f0 68 29 20 61 6e 64 20 74 68 65 6e 20 74 72 79 0d  h) and then try.
10800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10810 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
10820 20 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 74    to interpret t
10830 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65  he textual value
10840 20 61 73 20 74 68 65 20 63 6f 72 72 65 63 74 0d   as the correct.
10850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10860 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
10870 20 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20    type...       
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10890 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
108a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
108b0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
108c0 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29  Arg, "confirm"))
108d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
108e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
108f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10900 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
10910 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
10920 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
10930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10940 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
10950 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10970 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10990 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
109a0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
109b0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
109c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109e0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
109f0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
10a00 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
10a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
10a30 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
10a40 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
10a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10a70 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
10a80 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
10a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ab0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
10ac0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
10ad0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10b00 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
10b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b30 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
10b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b60 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
10b70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b90 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
10be0 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72  iguration.confir
10bf0 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  m = (bool)value;
10c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c30 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
10c40 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
10c50 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22  , "coreFileName"
10c60 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
10c70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c90 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
10ca0 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
10cb0 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cd0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cf0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
10d00 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
10d10 64 65 62 75 67 22 29 29 0d 0a 20 20 20 20 20 20  debug"))..      
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d50 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
10d60 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
10d70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d90 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
10da0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10de0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
10df0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
10e00 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
10e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
10e30 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
10e40 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
10e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e70 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
10e80 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
10e90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10eb0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
10ec0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
10ed0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
10ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
10f00 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
10f10 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
10f20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f40 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
10f50 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
10f80 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fa0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10fb0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
10fe0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11000 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11020 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
11030 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f 6c 29  n.debug = (bool)
11040 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
11070 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
11080 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
11090 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f  newArg, "debugFo
110a0 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rmat"))..       
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
110d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
110f0 62 75 67 46 6f 72 6d 61 74 20 3d 20 74 65 78 74  bugFormat = text
11100 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
11120 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
11130 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
11140 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b  ion.debugFormat;
11150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11160 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11180 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
11190 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
111a0 2c 20 22 64 65 62 75 67 50 72 69 6f 72 69 74 79  , "debugPriority
111b0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
111c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111e0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
111f0 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
11200 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
11210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11220 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72         typeof(Tr
11230 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65  acePriority), te
11240 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
11250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11260 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
11270 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11290 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
112c0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
112d0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11300 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
11310 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
11320 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11340 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
11350 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
11360 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
11390 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
113a0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
113d0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
113e0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
113f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11410 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
11420 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
11450 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11470 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11480 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
114b0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114f0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
11500 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  n.debugPriority 
11510 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  = (TracePriority
11520 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11540 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
11550 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 63 6f  bugPriority = co
11560 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
11570 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  gPriority;..    
11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11590 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
115a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
115b0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
115c0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 73  ion(newArg, "des
115d0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 29 29  ignerFileName"))
115e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
115f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11610 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
11620 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46  ration.designerF
11630 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
11640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11650 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11670 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
11680 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
11690 20 22 64 69 72 65 63 74 6f 72 79 22 29 29 0d 0a   "directory"))..
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116d0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
116e0 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 20 3d  tion.directory =
116f0 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20   text;....      
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11710 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a        // NOTE: *
11740 53 50 45 43 49 41 4c 2a 20 4d 75 73 74 20 72 65  SPECIAL* Must re
11750 66 72 65 73 68 20 74 68 65 20 66 69 6c 65 20 6e  fresh the file n
11760 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11780 20 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20    //       here 
11790 62 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65  because the unde
117a0 72 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79  rlying directory
117b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
117d0 20 20 20 20 20 20 20 68 61 73 20 63 68 61 6e 67         has chang
117e0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11800 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11820 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
11830 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61  Name = configura
11840 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
11850 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11870 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
11880 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
11890 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
118a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
118c0 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
118d0 47 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f 72 65  GetFileName(core
118e0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11900 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
11910 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
11920 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  ty(coreFileName)
11930 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11950 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20     coreFileName 
11960 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65  = Installer.Core
11970 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
11980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11990 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
119a0 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
119b0 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
119c0 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119e0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
119f0 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 63 6f  on.directory, co
11a00 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
11a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
11a30 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  ng linqFileName 
11a40 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
11a50 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  linqFileName;...
11a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11a80 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
11a90 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e  rEmpty(linqFileN
11aa0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ac0 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
11ad0 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
11ae0 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e  leName(linqFileN
11af0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b10 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
11b20 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69  IsNullOrEmpty(li
11b30 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  nqFileName))..  
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
11b60 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  nqFileName = Ins
11b70 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e  taller.LinqFileN
11b80 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ba0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
11bb0 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  n.linqFileName =
11bc0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
11bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bf0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
11c00 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c  rectory, linqFil
11c10 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
11c40 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
11c50 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
11c60 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
11c70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c90 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
11ca0 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
11cb0 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
11ce0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
11cf0 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
11d00 65 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  e(designerFileNa
11d10 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d30 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
11d40 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
11d50 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
11d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d80 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
11d90 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65  e = Installer.De
11da0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
11db0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11dd0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73  onfiguration.des
11de0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
11df0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11e20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
11e30 65 63 74 6f 72 79 2c 20 64 65 73 69 67 6e 65 72  ectory, designer
11e40 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
11e80 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
11e90 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73  ion(newArg, "ins
11ea0 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20 20  tall"))..       
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ec0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ee0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
11ef0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
11f00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
11f30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f70 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
11f80 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
11f90 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fb0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
11fc0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
11fd0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12010 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
12020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
12050 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
12060 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12090 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
120a0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
120b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120d0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
120e0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12100 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
12110 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
12120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12130 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12140 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12160 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
12170 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12190 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121b0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
121c0 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c  .install = (bool
121d0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
12200 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
12210 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
12220 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c  (newArg, "instal
12230 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20 20 20 20  lFlags"))..     
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12250 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12270 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
12280 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20   ParseEnum(..   
12290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
122b0 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73  eof(InstallFlags
122c0 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d  ), text, true);.
122d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
122f0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
12300 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12340 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
12350 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
12360 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12380 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
12390 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
123a0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
123b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
123e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
123f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 20 20 22 49 6e 76 61 6c 69 64 20 69 6e 73      "Invalid ins
12420 74 61 6c 6c 20 66 6c 61 67 73 20 76 61 6c 75 65  tall flags value
12430 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12460 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20  Display(text)), 
12470 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
12480 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
124b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
124e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12500 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
12510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12520 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
12530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12540 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
12550 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61  figuration.insta
12560 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73 74 61  llFlags = (Insta
12570 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a  llFlags)value;..
12580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12590 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
125a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125b0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
125c0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
125d0 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29  "linqFileName"))
125e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
125f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12610 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
12620 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e  ration.linqFileN
12630 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
12640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12650 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12670 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
12680 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f  tion(newArg, "lo
12690 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  gFileName"))..  
126a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
126e0 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d  on.logFileName =
126f0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
12700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12710 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
12720 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
12730 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12740 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61  newArg, "noCompa
12750 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ct"))..         
12760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
12790 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
127a0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
127b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
127d0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
127e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
127f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
12830 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
12840 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12860 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
12870 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
12880 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
128c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
128d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
12900 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
12910 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
12940 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
12950 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
12960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12980 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
12990 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129b0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
129c0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
129f0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a10 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
12a20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a60 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
12a70 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c  oCompact = (bool
12a80 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
12ac0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
12ad0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73  (newArg, "noCons
12ae0 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ole"))..        
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
12b20 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
12b30 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
12b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b60 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
12b70 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
12bc0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
12bd0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
12be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bf0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
12c00 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
12c10 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c40 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
12c50 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
12c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
12c90 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
12ca0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
12cd0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
12ce0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
12cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d10 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
12d20 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d40 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
12d50 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
12d80 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12da0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
12db0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12df0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
12e00 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f  noConsole = (boo
12e10 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
12e50 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
12e60 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 44 65 73  n(newArg, "noDes
12e70 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20 20 20 20  ktop"))..       
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
12ec0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
12ed0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
12f00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
12f50 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
12f60 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
12f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f80 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
12f90 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
12fa0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
12fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12fe0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
12ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13010 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
13020 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
13030 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
13060 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
13070 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
13080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
130b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130d0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
130e0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13100 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13110 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13130 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
13140 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13160 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13180 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13190 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f  .noDesktop = (bo
131a0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
131e0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
131f0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f  on(newArg, "noLo
13200 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  g"))..          
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
13240 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
13250 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
13260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13280 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
13290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
132b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
132e0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
132f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13310 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
13320 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
13330 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
13370 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
133b0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
133c0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
133f0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
13400 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
13440 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13460 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13470 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13490 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
134a0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134c0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
134d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
134f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13510 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
13520 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  Log = (bool)valu
13530 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
13540 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13570 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
13580 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29  rg, "noNetFx20")
13590 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
135a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
135d0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
135e0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
13610 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
13660 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
13670 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136a0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
136b0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
136c0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
136f0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
13700 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13730 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
13740 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
13750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
13780 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
13790 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
137d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
13830 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13870 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
138a0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
138b0 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  Fx20 = (bool)val
138c0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138f0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
13900 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
13910 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 30 22  Arg, "noNetFx40"
13920 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13930 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
13960 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
13970 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
139a0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
139f0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
13a00 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
13a40 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
13a50 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13a80 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
13a90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
13ad0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
13ae0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
13b10 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
13b20 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b80 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
13b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bb0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
13bc0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
13bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13c00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13c30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
13c40 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx40 = (bool)va
13c50 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13c80 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
13c90 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
13ca0 77 41 72 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65  wArg, "noRuntime
13cb0 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
13d00 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
13d10 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
13d40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
13d90 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13da0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
13dd0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
13de0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
13df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13e20 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13e30 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
13e60 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
13e70 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ea0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
13eb0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
13ec0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13ef0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13f20 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13f50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13f80 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13fd0 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72  ion.noRuntimeVer
13fe0 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  sion = (bool)val
13ff0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14020 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
14030 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
14040 41 72 67 2c 20 22 6e 6f 54 72 61 63 65 22 29 29  Arg, "noTrace"))
14050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14060 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14080 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
14090 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
140a0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
140d0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
14120 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
14130 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
14170 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
14180 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
141b0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
141c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
141d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
141f0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
14200 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
14210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14230 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
14240 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
14250 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14280 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
142f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14310 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14330 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14350 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14360 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63  iguration.noTrac
14370 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  e = (bool)value;
14380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14390 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143b0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
143c0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
143d0 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a  , "noVs2008"))..
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14410 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
14420 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
14430 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
14460 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14480 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
144b0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
144c0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
14500 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
14510 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14530 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14540 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
14550 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
14580 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
14590 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
145d0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
145e0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14610 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14640 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14670 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
14680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146a0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146e0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
146f0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
14700 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
14710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14720 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14740 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
14750 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
14760 20 22 6e 6f 56 73 32 30 31 30 22 29 29 0d 0a 20   "noVs2010")).. 
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
147b0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
147c0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
147f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14810 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14830 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
14840 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
14850 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
14880 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
14890 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
148a0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
148d0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
148e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14900 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
14910 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
14920 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
14960 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
14970 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
149a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
149d0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a00 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
14a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a30 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14a80 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20  ration.noVs2010 
14a90 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ad0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
14ae0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
14af0 22 73 74 72 69 63 74 22 29 29 0d 0a 20 20 20 20  "strict"))..    
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
14b40 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
14b50 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b70 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
14b80 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
14bd0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
14be0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
14c10 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
14c20 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
14c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c50 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
14c60 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
14c70 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
14ca0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
14cb0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ce0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
14cf0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
14d00 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14d30 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14d60 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
14d90 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14dc0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14de0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e00 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
14e30 6c 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e 64  llow the command
14e40 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20   line arguments 
14e50 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
14e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e70 2f 2f 20 20 20 20 20 20 20 6f 76 65 72 72 69 64  //       overrid
14e80 65 20 74 68 65 20 22 73 74 72 69 63 74 6e 65 73  e the "strictnes
14e90 73 22 20 73 65 74 74 69 6e 67 0d 0a 20 20 20 20  s" setting..    
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
14ec0 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
14ed0 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...      
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ef0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 20 20 73 74 72 69 63 74 20 3d 20 28        strict = (
14f20 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f60 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
14f70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 68  tion(newArg, "th
14f80 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 29 29 0d  rowOnMissing")).
14f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14fa0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
14fd0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
14fe0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15000 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
15010 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15030 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
15060 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
15070 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150a0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
150b0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
150c0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
150f0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
15100 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
15110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
15130 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
15140 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
15150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
15180 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
15190 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
151c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
151d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
151e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151f0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
15230 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15270 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15290 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
152a0 67 75 72 61 74 69 6f 6e 2e 74 68 72 6f 77 4f 6e  guration.throwOn
152b0 4d 69 73 73 69 6e 67 20 3d 20 28 62 6f 6f 6c 29  Missing = (bool)
152c0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
152f0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
15300 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
15310 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65 46 6f  newArg, "traceFo
15320 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rmat"))..       
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15360 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
15370 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 65 78 74  aceFormat = text
15380 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
153a0 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
153b0 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
153c0 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 3b  ion.traceFormat;
153d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
153e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
15410 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
15420 2c 20 22 74 72 61 63 65 50 72 69 6f 72 69 74 79  , "tracePriority
15430 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
15440 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15460 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
15470 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
15480 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154a0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72         typeof(Tr
154b0 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65  acePriority), te
154c0 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
154d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
154f0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
15500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15510 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
15540 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
15550 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
15560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15580 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
15590 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
155a0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
155d0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
155e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15610 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
15620 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
15650 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
15660 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
15670 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15690 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
156a0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
156b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
156d0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
156e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15700 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15720 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
15730 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
15740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15750 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15780 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  n.tracePriority 
15790 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  = (TracePriority
157a0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157c0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
157d0 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 63 6f  acePriority = co
157e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
157f0 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  ePriority;..    
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15830 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
15840 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 65 72  ion(newArg, "ver
15850 62 6f 73 65 22 29 29 0d 0a 20 20 20 20 20 20 20  bose"))..       
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15870 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
158a0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
158b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
158c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158d0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
158e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15920 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
15930 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
15940 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
15970 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
15980 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
15990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
159c0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
159d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
15a00 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
15a10 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
15a40 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
15a50 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
15a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a80 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
15a90 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ab0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
15ac0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ae0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15af0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b10 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
15b20 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b60 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
15b70 2e 76 65 72 62 6f 73 65 20 3d 20 28 62 6f 6f 6c  .verbose = (bool
15b80 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
15b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ba0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
15bc0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
15bd0 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49 66  (newArg, "whatIf
15be0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
15c20 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
15c30 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
15c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15c60 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
15c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15c80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cb0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
15cc0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
15cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cf0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
15d00 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
15d10 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
15d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15d40 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
15d50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
15d90 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
15da0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dc0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
15dd0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
15de0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e10 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
15e20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
15e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e70 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
15e80 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
15eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
15ed0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15ef0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61  onfiguration.wha
15f00 74 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  tIf = (bool)valu
15f10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
15f20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
15f50 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
15f60 72 67 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a 20  rg, "wow64")).. 
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fa0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
15fb0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
15fc0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fe0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
15ff0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16030 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16040 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
16050 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
16080 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
16090 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
160a0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
160d0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
160e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
16110 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
16120 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16150 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
16160 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
16170 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16190 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
161a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
161d0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16200 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
16210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16250 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16270 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
16280 72 61 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28  ration.wow64 = (
16290 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162d0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
162f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
16310 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
16320 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16350 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
16360 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16370 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16390 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
163a0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
163b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
163c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163d0 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20     "Unsupported 
163e0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
163f0 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ion: {0}",..    
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
16420 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72  isplay(arg)), tr
16430 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
16440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16460 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16480 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16490 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
164c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
164d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164e0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16510 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
16520 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
16530 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16550 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
16560 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
16570 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
16580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16590 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
165a0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
165b0 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67  k, e, traceCateg
165c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
165e0 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
165f0 6d 6f 64 69 66 79 20 63 6f 6e 66 69 67 75 72 61  modify configura
16600 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
16610 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16630 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
16640 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16650 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
16660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
166a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
166b0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
166c0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
166d0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
166e0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
166f0 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28  ic bool Process(
16700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16710 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c    string[] args,
16720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16730 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
16740 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16760 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20  bool strict,..  
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16780 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
167b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
167c0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
167d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
167f0 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   (configuration 
16800 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16830 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
16840 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67   "Invalid config
16850 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20  uration.";..    
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16870 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
16880 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16890 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c  Assembly assembl
168c0 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  y = configuratio
168d0 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20  n.assembly;.... 
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168f0 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
16900 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16930 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
16940 20 22 49 6e 76 61 6c 69 64 20 61 73 73 65 6d 62   "Invalid assemb
16950 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ly.";..         
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
16970 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
169a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
169b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
169c0 54 72 61 63 65 29 0d 0a 20 20 20 20 20 20 20 20  Trace)..        
169d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169f0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
16a00 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20  iguration.noLog 
16a10 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
16a40 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69  mpty(configurati
16a50 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  on.logFileName))
16a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16a70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a90 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ab0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
16ac0 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
16ad0 74 20 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e  t log file name.
16ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16b20 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46  nfiguration.logF
16b30 69 6c 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67  ileName = GetLog
16b40 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20  FileName(..     
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b60 20 20 20 20 20 20 20 20 20 20 20 22 74 72 61 63             "trac
16b70 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e");..          
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16b90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
16bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16be0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16c00 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
16c10 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20  .noConsole)..   
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20      // NOTE: In 
16c80 76 65 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65  verbose mode, de
16c90 62 75 67 20 6f 75 74 70 75 74 20 28 74 68 61 74  bug output (that
16ca0 20 6d 65 65 74 73 0d 0a 20 20 20 20 20 20 20 20   meets..        
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cc0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
16cd0 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f   configured prio
16ce0 72 69 74 79 20 63 72 69 74 65 72 69 61 29 20 77  rity criteria) w
16cf0 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 73      //       dis
16d20 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f  played to the co
16d30 6e 73 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73 65  nsole; otherwise
16d40 2c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  , trace..       
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 75       //       ou
16d70 74 70 75 74 20 28 74 68 61 74 20 6d 65 65 74 73  tput (that meets
16d80 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured 
16d90 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  priority..      
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16db0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
16dc0 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65  riteria) will be
16dd0 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68   displayed to th
16de0 65 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20  e console...    
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
16e30 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 29  iguration.debug)
16e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64       // NOTE: Ad
16eb0 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72  d the console tr
16ec0 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20  ace listener to 
16ed0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69       //       li
16f00 73 74 20 6f 66 20 74 72 61 63 65 20 6c 69 73 74  st of trace list
16f10 65 6e 65 72 73 20 6d 61 69 6e 74 61 69 6e 65 64  eners maintained
16f20 20 62 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20   by..           
16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
16f50 65 20 54 72 61 63 65 4f 70 73 20 63 6c 61 73 73  e TraceOps class
16f60 20 28 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73   (i.e. only mess
16f70 61 67 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ages..          
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
16fa0 68 61 74 20 6d 65 65 74 20 74 68 65 20 64 65 62  hat meet the deb
16fb0 75 67 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c  ug priority will
16fc0 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fe0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 65       //       se
16ff0 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c  en on the consol
17000 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e)...           
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17040 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
17050 73 2e 53 65 74 75 70 44 65 62 75 67 4c 69 73 74  s.SetupDebugList
17060 65 6e 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20  eners();..      
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17080 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
17110 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63   NOTE: Add the c
17120 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73  onsole trace lis
17130 74 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20  tener to the..  
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
17160 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20 62         list of b
17170 75 69 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c 69  uilt-in trace li
17180 73 74 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20  steners (i.e... 
17190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
171b0 2f 20 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73  /       only mes
171c0 73 61 67 65 73 20 74 68 61 74 20 6d 65 65 74 20  sages that meet 
171d0 74 68 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20  the trace..     
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17200 20 20 20 20 70 72 69 6f 72 69 74 79 20 77 69 6c      priority wil
17210 6c 20 62 65 20 73 65 65 6e 20 6f 6e 20 74 68 65  l be seen on the
17220 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20   console)...    
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17270 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e  Trace.Listeners.
17280 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54  Add(new ConsoleT
17290 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b  raceListener());
172a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
172b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
172c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
172d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
17330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17340 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
17350 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f  nfiguration.noLo
17360 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  g &&..          
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17380 20 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c    !String.IsNull
17390 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72  OrEmpty(configur
173a0 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
173b0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
173f0 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28  e.Listeners.Add(
17400 6e 65 77 20 54 65 78 74 57 72 69 74 65 72 54 72  new TextWriterTr
17410 61 63 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20  aceListener(..  
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17440 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46  nfiguration.logF
17450 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20  ileName));..    
17460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17470 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17480 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
174b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
174c0 4f 54 45 3a 20 44 75 6d 70 20 74 68 65 20 63 6f  OTE: Dump the co
174d0 6e 66 69 67 75 72 61 74 69 6f 6e 20 6e 6f 77 20  nfiguration now 
174e0 69 6e 20 63 61 73 65 20 77 65 20 6e 65 65 64 20  in case we need 
174f0 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
17500 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
17510 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 20 61 6e   troubleshoot an
17520 79 20 69 73 73 75 65 73 2e 0d 0a 20 20 20 20 20  y issues...     
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17540 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
17550 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
17560 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72  guration.debugPr
17570 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50  iority <= TraceP
17580 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d  riority.Medium).
17590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
175a0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
175b0 72 61 74 69 6f 6e 2e 44 75 6d 70 28 64 65 62 75  ration.Dump(debu
175c0 67 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20  gCallback);.... 
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
175f0 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69  tion.tracePriori
17600 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72  ty <= TracePrior
17610 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20  ity.Medium)..   
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17630 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
17640 6f 6e 2e 44 75 6d 70 28 74 72 61 63 65 43 61 6c  on.Dump(traceCal
17650 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20  lback);....     
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17670 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
17680 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
17690 53 68 6f 77 20 77 68 65 72 65 20 77 65 20 61 72  Show where we ar
176a0 65 20 72 75 6e 6e 69 6e 67 20 66 72 6f 6d 20 61  e running from a
176b0 6e 64 20 68 6f 77 20 77 65 20 77 65 72 65 0d 0a  nd how we were..
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 76      //       inv
176e0 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  oked...         
176f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 20 20 73 74 72 69 6e 67 20 6c 6f 63 61 74 69     string locati
17720 6f 6e 20 3d 20 61 73 73 65 6d 62 6c 79 2e 4c 6f  on = assembly.Lo
17730 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20  cation;....     
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
17750 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
17760 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
17770 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a  ity.MediumLow,..
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17790 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
177a0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
177b0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
177c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52                "R
177e0 75 6e 6e 69 6e 67 20 65 78 65 63 75 74 61 62 6c  unning executabl
177f0 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46 6f 72 44  e is: {0}", ForD
17800 69 73 70 6c 61 79 28 6c 6f 63 61 74 69 6f 6e 29  isplay(location)
17810 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
17820 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17830 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17850 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
17860 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
17870 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f  riority.MediumLo
17880 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
17890 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
178a0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
178b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
178c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d    "Original comm
178f0 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30 7d  and line is: {0}
17900 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
17910 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 76 69              Envi
17920 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c  ronment.CommandL
17930 69 6e 65 29 2c 20 74 72 61 63 65 43 61 74 65 67  ine), traceCateg
17940 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
17960 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
17970 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
17980 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20  y.MediumLow,..  
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
179b0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
179c0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
179d0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
179e0 20 20 20 20 20 20 20 20 20 20 20 20 22 52 75 6e              "Run
179f0 6e 69 6e 67 20 70 72 6f 63 65 73 73 20 69 73 20  ning process is 
17a00 7b 30 7d 2e 22 2c 20 49 73 36 34 42 69 74 50 72  {0}.", Is64BitPr
17a10 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20  ocess() ?..     
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a30 20 20 20 20 20 20 20 22 36 34 2d 62 69 74 22 20         "64-bit" 
17a40 3a 20 22 33 32 2d 62 69 74 22 29 2c 20 74 72 61  : "32-bit"), tra
17a50 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
17a80 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 29 0d 0a  ration.whatIf)..
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17aa0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17ac0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
17ad0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
17ae0 54 45 3a 20 49 66 20 74 68 65 20 64 65 62 75 67  TE: If the debug
17af0 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20  ger is attached 
17b00 61 6e 64 20 57 68 61 74 2d 49 66 20 6d 6f 64 65  and What-If mode
17b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17b20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
17b30 20 20 20 69 73 20 5b 6e 6f 77 5d 20 64 69 73 61     is [now] disa
17b40 62 6c 65 64 2c 20 69 73 73 75 65 20 61 20 77 61  bled, issue a wa
17b50 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  rning...        
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
17b80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17b90 44 65 62 75 67 67 65 72 2e 49 73 41 74 74 61 63  Debugger.IsAttac
17ba0 68 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  hed)..          
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bc0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
17bd0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
17be0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
17bf0 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
17c20 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
17c30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c50 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20 64 69     "Forced to di
17c60 73 61 62 6c 65 20 5c 22 77 68 61 74 2d 69 66 5c  sable \"what-if\
17c70 22 20 6d 6f 64 65 20 77 69 74 68 20 22 20 2b 0d  " mode with " +.
17c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ca0 20 22 64 65 62 75 67 67 65 72 20 61 74 74 61 63   "debugger attac
17cb0 68 65 64 2e 22 2c 20 74 72 61 63 65 43 61 74 65  hed.", traceCate
17cc0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cf0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
17d30 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
17d40 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
17d50 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d70 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
17d80 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
17d90 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 22 4e 6f 20 61 63 74 75 61 6c 20 63 68 61 6e   "No actual chan
17dc0 67 65 73 20 77 69 6c 6c 20 62 65 20 6d 61 64 65  ges will be made
17dd0 20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a 20 20   to this " +..  
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65            "syste
17e00 6d 20 62 65 63 61 75 73 65 20 5c 22 77 68 61 74  m because \"what
17e10 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e  -if\" mode is en
17e20 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  abled.",..      
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
17e50 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
17e60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e80 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
17e90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
17ea0 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d  OTE: If the comm
17eb0 61 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74  and line has not
17ec0 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a   been manually..
17ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ee0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e      //       con
17ef0 66 69 72 6d 65 64 20 28 69 2e 65 2e 20 76 69 61  firmed (i.e. via
17f00 20 74 68 65 20 65 78 70 6c 69 63 69 74 20 63 6f   the explicit co
17f10 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20  mmand line..    
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f30 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 29  //       option)
17f40 2c 20 74 68 65 6e 20 73 74 6f 70 20 70 72 6f 63  , then stop proc
17f50 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20  essing now.  We 
17f60 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20 20 20  enforce..       
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
17f80 20 20 20 20 20 20 74 68 69 73 20 72 75 6c 65 20        this rule 
17f90 73 6f 20 74 68 61 74 20 73 69 6d 70 6c 79 20 64  so that simply d
17fa0 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74  ouble-clicking t
17fb0 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
17fc0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
17fd0 20 65 78 65 63 75 74 61 62 6c 65 20 77 69 6c 6c   executable will
17fe0 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 61   not result in a
17ff0 6e 79 20 63 68 61 6e 67 65 73 20 62 65 69 6e 67  ny changes being
18000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18010 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
18020 61 64 65 20 74 6f 20 74 68 65 20 73 79 73 74 65  ade to the syste
18030 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m...            
18040 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
18070 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20  on.confirm)..   
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18090 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
180a0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
180b0 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74  r = "Cannot cont
180c0 69 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66  inue, the \"conf
180d0 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20  irm\" option is 
180e0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b   "not enabled.";
18110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18120 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18130 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18160 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
18170 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
18180 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18190 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
181a0 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
181c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181d0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
181e0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
181f0 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
18200 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
18210 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
18220 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
18230 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61  Callback, e, tra
18240 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69      error = "Fai
18270 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20 63  led to process c
18280 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d  onfiguration.";.
18290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
182a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
182b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
182c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
182d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
182e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
182f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18320 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18330 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
18340 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
18350 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
18360 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
18370 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
18380 43 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73  CheckRuntimeVers
18390 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
183a0 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74        Configurat
183b0 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ion configuratio
183c0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
183d0 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c      bool strict,
183e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
183f0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
18400 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
18410 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
18420 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18430 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
18440 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
18470 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18490 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
184b0 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f  or = "Invalid co
184c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a  nfiguration.";..
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
184f0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
18500 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18520 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
18540 4f 54 45 3a 20 57 68 61 74 20 76 65 72 73 69 6f  OTE: What versio
18550 6e 20 6f 66 20 74 68 65 20 72 75 6e 74 69 6d 65  n of the runtime
18560 20 77 61 73 20 74 68 65 20 63 6f 72 65 20 28 70   was the core (p
18570 72 69 6d 61 72 79 29 0d 0a 20 20 20 20 20 20 20  rimary)..       
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
18590 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63        assembly c
185a0 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20  ompiled against 
185b0 28 65 2e 67 2e 20 22 76 32 2e 30 2e 35 30 37 32  (e.g. "v2.0.5072
185c0 37 22 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  7" or..         
185d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
185e0 20 20 20 20 22 76 34 2e 30 2e 33 30 33 31 39 22      "v4.0.30319"
185f0 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
18600 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 73 74 72 69 6e 67 20 63 6f 72 65 49 6d 61 67 65  string coreImage
18630 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
18640 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65   GetImageRuntime
18650 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  Version(..      
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18670 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
18680 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  coreFileName);..
18690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
186a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
186c0 20 4e 4f 54 45 3a 20 57 65 20 61 6c 6c 6f 77 20   NOTE: We allow 
186d0 74 68 65 20 61 63 74 75 61 6c 20 69 6d 61 67 65  the actual image
186e0 20 72 75 6e 74 69 6d 65 20 63 68 65 63 6b 69 6e   runtime checkin
186f0 67 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20  g to be..       
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
18710 20 20 20 20 20 20 62 79 70 61 73 73 65 64 20 76        bypassed v
18720 69 61 20 74 68 65 20 22 2d 6e 6f 52 75 6e 74 69  ia the "-noRunti
18730 6d 65 56 65 72 73 69 6f 6e 22 20 63 6f 6d 6d 61  meVersion" comma
18740 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20  nd line..       
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
18760 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 20 20 54        option.  T
18770 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
18780 6f 70 74 69 6f 6e 20 69 73 20 69 6e 74 65 6e 64  option is intend
18790 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  ed for..        
187a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
187b0 20 20 20 20 20 65 78 70 65 72 74 20 75 73 65 20       expert use 
187c0 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  only...         
187d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
18800 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65  tion.noRuntimeVe
18810 72 73 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  rsion)..        
18820 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18840 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
18850 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
18860 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
18870 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um,..           
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18890 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
188a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
188b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188d0 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
188e0 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64  mbly is compiled
188f0 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72   for the .NET Fr
18900 61 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b  amework {0}; " +
18910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68                "h
18930 6f 77 65 76 65 72 2c 20 69 6e 73 74 61 6c 6c 61  owever, installa
18940 74 69 6f 6e 20 72 65 73 74 72 69 63 74 69 6f 6e  tion restriction
18950 73 20 62 61 73 65 64 20 6f 6e 20 74 68 69 73 20  s based on this 
18960 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 22 66 61 63 74 20 68 61 76 65 20 62 65 65 6e   "fact have been
18990 20 64 69 73 61 62 6c 65 64 20 76 69 61 20 74 68   disabled via th
189a0 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22  e command line."
189b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
189d0 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
189e0 65 72 73 69 6f 6e 29 2c 20 74 72 61 63 65 43 61  ersion), traceCa
189f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a10 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
18a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18a30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18a50 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
18a60 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20         // TODO: 
18a70 52 65 73 74 72 69 63 74 20 74 68 65 20 63 6f 6e  Restrict the con
18a80 66 69 67 75 72 61 74 69 6f 6e 20 62 61 73 65 64  figuration based
18a90 20 6f 6e 20 77 68 69 63 68 20 69 6d 61 67 65 0d   on which image.
18aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ab0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 75       //       ru
18ac0 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 73 20 28  ntime versions (
18ad0 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65  which more-or-le
18ae0 73 73 20 63 6f 72 72 65 73 70 6f 6e 64 0d 0a 20  ss correspond.. 
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b00 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 2e     //       to .
18b10 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76 65  NET Framework ve
18b20 72 73 69 6f 6e 73 29 20 61 72 65 20 73 75 70 70  rsions) are supp
18b30 6f 72 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20  orted by the..  
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 20 2f 2f 20 20 20 20 20 20 20 76 65 72 73 69    //       versi
18b60 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c 20 53 74  ons of Visual St
18b70 75 64 69 6f 20 74 68 61 74 20 61 72 65 20 69 6e  udio that are in
18b80 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20  stalled...      
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18bb0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
18bc0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
18bd0 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
18be0 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  ersion))..      
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c10 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
18c20 20 22 69 6e 76 61 6c 69 64 20 63 6f 72 65 20 66   "invalid core f
18c30 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ile image runtim
18c40 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  e version";..   
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
18c70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
18c80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
18c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
18ca0 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45  lse if (String.E
18cb0 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20  quals(..        
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cd0 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e      coreImageRun
18ce0 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52  timeVersion, CLR
18cf0 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
18d00 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
18d30 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75  ison.InvariantCu
18d40 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20  lture))..       
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
18da0 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75   the CLR v2.0 ru
18db0 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  ntime, make sure
18dc0 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20   we disable..   
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18de0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
18df0 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65  y attempt to use
18e00 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74   it for things t
18e10 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20  hat require..   
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e30 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
18e40 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
18e50 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  ed for the CLR v
18e60 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20  4.0.  It is..   
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e       //       un
18e90 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20  certain if this 
18ea0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72  is actually a pr
18eb0 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20  oblem in..      
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74    //       pract
18ee0 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76  ice as the CLR v
18ef0 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64  4.0 can load and
18f00 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20   use an..       
18f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62   //       assemb
18f30 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  ly compiled with
18f40 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68   the CLR v2.0; h
18f50 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20  owever,..       
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20   //       since 
18f80 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66  this project off
18f90 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75  ers both configu
18fa0 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20  rations,..      
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fc0 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75    //       we cu
18fd0 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77  rrently disallow
18fe0 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d   this mismatch..
18ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19000 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19020 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
19030 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74  on.noNetFx40 = t
19040 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
19060 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
19070 32 30 31 30 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  2010 = true;....
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
190a0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
190b0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
190c0 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ium,..          
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190e0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
190f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
19100 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19120 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
19130 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65  embly is compile
19140 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46  d for the .NET F
19150 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20  ramework {0}, " 
19160 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
19170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19180 73 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e 45 54  support for .NET
19190 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69   Framework {1} i
191a0 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22  s now disabled."
191b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
191d0 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
191e0 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d  Version, CLRv4Im
191f0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
19200 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
19230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19240 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
19260 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75  e if (String.Equ
19270 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  als(..          
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19290 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69    coreImageRunti
192a0 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34  meVersion, CLRv4
192b0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
192c0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192e0 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73    StringComparis
192f0 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  on.InvariantCult
19300 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ure))..         
19310 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19330 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74    // NOTE: For t
19360 68 65 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74  he CLR v4.0 runt
19370 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77  ime, make sure w
19380 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20  e disable..     
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20     //       any 
193b0 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69  attempt to use i
193c0 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61  t for things tha
193d0 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20  t require..     
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61     //       an a
19400 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64  ssembly compiled
19410 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e   for the CLR v2.
19420 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0...            
19430 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19450 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
19460 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20  ation.noNetFx20 
19470 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
19480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19490 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
194a0 6f 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d  oVs2008 = true;.
194b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
194c0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
194d0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
194e0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
194f0 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20  Medium,..       
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
19520 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
19530 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
19540 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19560 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70  Assembly is comp
19570 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45  iled for the .NE
19580 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c  T Framework {0},
19590 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 2e    "support for .
195c0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31  NET Framework {1
195d0 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65  } is now disable
195e0 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d.",..          
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
19610 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
19620 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19640 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
19650 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
19660 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  eVersion)),..   
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
19690 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
196b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
196c0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
196e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
196f0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
19700 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
19710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
19730 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 72 65 20  nsupported core 
19740 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69  file image runti
19750 6d 65 20 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a  me version " +..
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
19780 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d 20 6f 72  , must be {1} or
19790 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {2}",..        
197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197b0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
197c0 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
197d0 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
19800 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69  (CLRv2ImageRunti
19810 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
19840 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75  lay(CLRv4ImageRu
19850 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d  ntimeVersion));.
19860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19870 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
19880 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
198a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
198b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
198c0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
198d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
198e0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
198f0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19920 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
19930 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
19940 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
19950 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19960 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
19970 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
19980 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63  allback, e, trac
19990 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199b0 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c     error = "Fail
199c0 65 64 20 74 6f 20 63 68 65 63 6b 20 69 6d 61 67  ed to check imag
199d0 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
199e0 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
199f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19a00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
19a10 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
19a20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19a30 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
19a40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
19a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
19aa0 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
19ab0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
19ac0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
19ad0 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  l HasFlags(..   
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
19af0 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61  tallFlags hasFla
19b00 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
19b10 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20       bool all.. 
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
19b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19b50 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20   if (all)..     
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19b70 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46  eturn ((installF
19b80 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
19b90 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a   == hasFlags);..
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
19bc0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
19bd0 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   ((installFlags 
19be0 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49  & hasFlags) != I
19bf0 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65  nstallFlags.None
19c00 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
19c10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19c20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19c70 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
19c80 44 75 6d 70 28 0d 0a 20 20 20 20 20 20 20 20 20  Dump(..         
19c90 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
19ca0 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
19cb0 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
19cc0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
19cd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19ce0 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65 43        if (traceC
19cf0 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29  allback != null)
19d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19d20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
19d30 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
19d40 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
19d50 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46 6f    "Assembly", Fo
19d80 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62 6c  rDisplay(assembl
19d90 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  y)),..          
19da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19db0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
19dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19dd0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
19de0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
19df0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
19e00 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c                "L
19e20 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  ogFileName", For
19e30 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65 4e  Display(logFileN
19e40 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
19e70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19e80 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
19e90 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
19ea0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
19eb0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ed0 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f 72  "Directory", For
19ee0 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72  Display(director
19ef0 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  y)),..          
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19f10 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
19f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f30 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
19f40 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
19f50 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
19f60 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
19f80 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  oreFileName", Fo
19f90 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69 6c  rDisplay(coreFil
19fa0 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fc0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
19fd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19fe0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
19ff0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1a000 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1a010 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a030 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22    "LinqFileName"
1a040 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e  , ForDisplay(lin
1a050 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  qFileName)),..  
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1a080 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a0a0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1a0b0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1a0c0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0e0 20 20 20 20 20 20 22 44 65 73 69 67 6e 65 72 46        "DesignerF
1a0f0 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
1a100 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69 6c  play(designerFil
1a110 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1a140 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a150 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a160 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1a170 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1a180 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 22 44 65 62 75 67 46 6f 72 6d 61 74 22 2c    "DebugFormat",
1a1b0 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75   ForDisplay(debu
1a1c0 67 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20  gFormat)),..    
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1a1f0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1a200 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a210 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1a220 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1a230 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a250 20 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74      "TraceFormat
1a260 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72  ", ForDisplay(tr
1a270 61 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20  aceFormat)),..  
1a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a290 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1a2a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a2c0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1a2d0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1a2e0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a300 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c        "InstallFl
1a310 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ags", ForDisplay
1a320 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c  (installFlags)),
1a330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a340 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1a350 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a370 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1a380 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1a390 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1a3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a3b0 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67            "Debug
1a3c0 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69  Priority", ForDi
1a3d0 73 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f 72  splay(debugPrior
1a3e0 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ity)),..        
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a400 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1a410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a420 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1a430 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1a440 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1a450 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a470 22 54 72 61 63 65 50 72 69 6f 72 69 74 79 22 2c  "TracePriority",
1a480 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63   ForDisplay(trac
1a490 65 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20  ePriority)),..  
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1a4c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a4e0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1a4f0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1a500 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a520 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 22 2c        "Install",
1a530 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74   ForDisplay(inst
1a540 61 6c 6c 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  all)),..        
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a560 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1a570 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a580 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1a590 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1a5a0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1a5b0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5d0 22 57 6f 77 36 34 22 2c 20 46 6f 72 44 69 73 70  "Wow64", ForDisp
1a5e0 6c 61 79 28 77 6f 77 36 34 29 29 2c 0d 0a 20 20  lay(wow64)),..  
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1a610 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a630 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1a640 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1a650 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 20 20 20 20 20 22 4e 6f 52 75 6e 74 69 6d 65        "NoRuntime
1a680 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73  Version", ForDis
1a690 70 6c 61 79 28 6e 6f 52 75 6e 74 69 6d 65 56 65  play(noRuntimeVe
1a6a0 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1a6d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a6e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a6f0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1a700 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1a710 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a730 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c 20 46    "NoDesktop", F
1a740 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44 65 73 6b  orDisplay(noDesk
1a750 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  top)),..        
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a770 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1a780 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a790 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1a7a0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1a7b0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1a7c0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7e0 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46 6f 72  "NoCompact", For
1a7f0 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70 61 63  Display(noCompac
1a800 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a820 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1a830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a840 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1a850 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1a860 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1a870 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1a890 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f 72 44 69  oNetFx20", ForDi
1a8a0 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32 30 29  splay(noNetFx20)
1a8b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a8d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8f0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1a900 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1a910 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1a920 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1a930 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e              "NoN
1a940 65 74 46 78 34 30 22 2c 20 46 6f 72 44 69 73 70  etFx40", ForDisp
1a950 6c 61 79 28 6e 6f 4e 65 74 46 78 34 30 29 29 2c  lay(noNetFx40)),
1a960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a970 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1a980 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1a9b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1a9c0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1a9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a9e0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
1a9f0 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  008", ForDisplay
1aa00 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20 20  (noVs2008)),..  
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1aa30 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1aa50 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1aa60 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1aa70 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa90 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30 22        "NoVs2010"
1aaa0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1aab0 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20 20  s2010)),..      
1aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aad0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1aae0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1aaf0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ab00 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1ab10 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1ab20 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab40 20 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f 72    "NoTrace", For
1ab50 44 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65 29  Display(noTrace)
1ab60 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ab80 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1abb0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1abc0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1abd0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1abe0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43              "NoC
1abf0 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73 70  onsole", ForDisp
1ac00 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c  lay(noConsole)),
1ac10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ac20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1ac30 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac50 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1ac60 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1ac70 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1ac80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ac90 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f 67            "NoLog
1aca0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1acb0 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  Log)),..        
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acd0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ace0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1acf0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1ad00 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1ad10 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ad20 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad40 22 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22  "ThrowOnMissing"
1ad50 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 68 72  , ForDisplay(thr
1ad60 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 29 2c 0d 0a  owOnMissing)),..
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1ad90 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1adb0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1adc0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1add0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 20 20 20 20 20 20 22 57 68 61 74 49 66 22          "WhatIf"
1ae00 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61  , ForDisplay(wha
1ae10 74 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  tIf)),..        
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae30 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ae40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ae50 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1ae60 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1ae70 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ae80 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aea0 22 44 65 62 75 67 22 2c 20 46 6f 72 44 69 73 70  "Debug", ForDisp
1aeb0 6c 61 79 28 64 65 62 75 67 29 29 2c 0d 0a 20 20  lay(debug)),..  
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aed0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1aee0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1af00 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1af10 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1af20 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af40 20 20 20 20 20 20 22 56 65 72 62 6f 73 65 22 2c        "Verbose",
1af50 20 46 6f 72 44 69 73 70 6c 61 79 28 76 65 72 62   ForDisplay(verb
1af60 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ose)),..        
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1af90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1afa0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1afb0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1afc0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1afd0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aff0 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44 69  "Confirm", ForDi
1b000 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29 2c  splay(confirm)),
1b010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b020 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1b030 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1b060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0a0 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
1b0b0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1b0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b0e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1b0f0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1b100 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1b110 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1b140 54 69 74 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20  Title",..       
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b160 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1b170 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  GetAssemblyTitle
1b180 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20  (assembly))),.. 
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1b1b0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1b1e0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1b1f0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1b200 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 20 20 20 22 41 73 73 65 6d 62 6c 79 43 6f 6e 66     "AssemblyConf
1b230 69 67 75 72 61 74 69 6f 6e 22 2c 0d 0a 20 20 20  iguration",..   
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b250 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1b260 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79 43  lay(GetAssemblyC
1b270 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 61 73 73  onfiguration(ass
1b280 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20  embly))),..     
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1b2b0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1b2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1b300 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1b310 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1b320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1b360 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1b370 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
1b380 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
1b390 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
1b3a0 79 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20  y assembly;..   
1b3b0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1b3c0 41 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c  Assembly Assembl
1b3d0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1b3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b3f0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61    get { return a
1b400 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20  ssembly; }..    
1b410 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1b420 7b 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c  { assembly = val
1b430 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1b440 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1b450 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1b460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b490 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1b4a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1b4b0 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d  tring logFileNam
1b4c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b4d0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f  public string Lo
1b4e0 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  gFileName..     
1b4f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b500 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1b510 72 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61  return logFileNa
1b520 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1b530 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 67         set { log
1b540 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
1b550 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1b560 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1b570 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1b580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b5b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1b5c0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1b5d0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a  ing directory;..
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1b5f0 69 63 20 73 74 72 69 6e 67 20 44 69 72 65 63 74  ic string Direct
1b600 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
1b610 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b620 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1b630 20 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20   directory; }.. 
1b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1b650 65 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20 3d  et { directory =
1b660 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1b670 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1b680 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1b690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1b6d0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1b6e0 74 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69  te string coreFi
1b6f0 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
1b700 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1b710 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d  ng CoreFileName.
1b720 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b740 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 72  get { return cor
1b750 65 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  eFileName; }..  
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1b770 74 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  t { coreFileName
1b780 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1b790 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1b7a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1b7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1b7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1b800 76 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e 71  vate string linq
1b810 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
1b820 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1b830 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d  ring LinqFileNam
1b840 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
1b850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b860 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c    get { return l
1b870 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  inqFileName; }..
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 73 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61  set { linqFileNa
1b8a0 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
1b8b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1b8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1b910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1b920 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65  rivate string de
1b930 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
1b940 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1b950 6c 69 63 20 73 74 72 69 6e 67 20 44 65 73 69 67  lic string Desig
1b960 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  nerFileName..   
1b970 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b980 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1b990 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65  { return designe
1b9a0 72 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  rFileName; }..  
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1b9c0 74 20 7b 20 64 65 73 69 67 6e 65 72 46 69 6c 65  t { designerFile
1b9d0 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
1b9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1b9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1ba00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba40 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1ba50 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1ba60 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  debugFormat;..  
1ba70 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1ba80 20 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72   string DebugFor
1ba90 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mat..           
1baa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bab0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1bac0 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d   debugFormat; }.
1bad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bae0 20 73 65 74 20 7b 20 64 65 62 75 67 46 6f 72 6d   set { debugForm
1baf0 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  at = value; }.. 
1bb00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1bb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1bb60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1bb70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 74 72  rivate string tr
1bb80 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  aceFormat;..    
1bb90 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1bba0 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61  tring TraceForma
1bbb0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
1bbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bbd0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
1bbe0 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20  raceFormat; }.. 
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1bc00 65 74 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74  et { traceFormat
1bc10 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1bc20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1bc30 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
1bc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1bc80 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1bc90 76 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67  vate InstallFlag
1bca0 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d  s installFlags;.
1bcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1bcc0 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  lic InstallFlags
1bcd0 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20   InstallFlags.. 
1bce0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1bd00 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61  t { return insta
1bd10 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20  llFlags; }..    
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1bd30 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d  { installFlags =
1bd40 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1bd50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1bd60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1bd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1bdb0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1bdc0 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  te TracePriority
1bdd0 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d   debugPriority;.
1bde0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1bdf0 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74  lic TracePriorit
1be00 79 20 44 65 62 75 67 50 72 69 6f 72 69 74 79 0d  y DebugPriority.
1be10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be30 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62  get { return deb
1be40 75 67 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20  ugPriority; }.. 
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1be60 65 74 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69  et { debugPriori
1be70 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ty = value; }.. 
1be80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1be90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1bea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1beb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1bee0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1bef0 72 69 76 61 74 65 20 54 72 61 63 65 50 72 69 6f  rivate TracePrio
1bf00 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
1bf10 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
1bf20 20 70 75 62 6c 69 63 20 54 72 61 63 65 50 72 69   public TracePri
1bf30 6f 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72  ority TracePrior
1bf40 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
1bf50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bf60 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1bf70 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20   tracePriority; 
1bf80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1bf90 20 20 20 73 65 74 20 7b 20 74 72 61 63 65 50 72     set { tracePr
1bfa0 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20  iority = value; 
1bfb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1bfc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c010 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1c020 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1c030 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20  install;..      
1c040 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1c050 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20 20 20 20  l Install..     
1c060 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c070 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1c080 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 3b 20  return install; 
1c090 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1c0a0 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c     set { install
1c0b0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1c0c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1c0d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1c0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1c120 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1c130 76 61 74 65 20 62 6f 6f 6c 20 77 6f 77 36 34 3b  vate bool wow64;
1c140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1c150 62 6c 69 63 20 62 6f 6f 6c 20 57 6f 77 36 34 0d  blic bool Wow64.
1c160 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c180 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 6f 77  get { return wow
1c190 36 34 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  64; }..         
1c1a0 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 6f 77         set { wow
1c1b0 36 34 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  64 = value; }.. 
1c1c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1c1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1c220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1c230 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 52 75  rivate bool noRu
1c240 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  ntimeVersion;.. 
1c250 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1c260 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74 69 6d 65  c bool NoRuntime
1c270 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  Version..       
1c280 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c290 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1c2a0 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d 65 56 65  turn noRuntimeVe
1c2b0 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20  rsion; }..      
1c2c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1c2d0 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
1c2e0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1c2f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1c300 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1c310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1c350 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1c360 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b  vate bool noDesk
1c370 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  top;..          
1c380 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
1c390 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20 20 20 20  Desktop..       
1c3a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c3b0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1c3c0 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b 20  turn noDesktop; 
1c3d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1c3e0 20 20 20 73 65 74 20 7b 20 6e 6f 44 65 73 6b 74     set { noDeskt
1c3f0 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  op = value; }.. 
1c400 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1c410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1c420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1c460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1c470 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f  rivate bool noCo
1c480 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20  mpact;..        
1c490 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1c4a0 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20 20 20 20  NoCompact..     
1c4b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c4c0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1c4d0 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70 61 63 74  return noCompact
1c4e0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1c4f0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6d       set { noCom
1c500 70 61 63 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  pact = value; }.
1c510 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1c520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1c530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c570 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1c580 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
1c590 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20 20  NetFx20;..      
1c5a0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1c5b0 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a 20 20 20  l NoNetFx20..   
1c5c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1c5e0 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78  { return noNetFx
1c5f0 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  20; }..         
1c600 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e         set { noN
1c610 65 74 46 78 32 30 20 3d 20 76 61 6c 75 65 3b 20  etFx20 = value; 
1c620 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1c630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c680 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1c690 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1c6a0 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20  noNetFx40;..    
1c6b0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1c6c0 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20  ool NoNetFx40.. 
1c6d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1c6f0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
1c700 46 78 34 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Fx40; }..       
1c710 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
1c720 6f 4e 65 74 46 78 34 30 20 3d 20 76 61 6c 75 65  oNetFx40 = value
1c730 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1c740 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1c750 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1c760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c790 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1c7a0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
1c7b0 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20  l noVs2008;..   
1c7c0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1c7d0 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38 0d 0a 20  bool NoVs2008.. 
1c7e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1c800 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32  t { return noVs2
1c810 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  008; }..        
1c820 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
1c830 56 73 32 30 30 38 20 3d 20 76 61 6c 75 65 3b 20  Vs2008 = value; 
1c840 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1c850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1c8b0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1c8c0 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20  noVs2010;..     
1c8d0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1c8e0 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a 20 20 20  ol NoVs2010..   
1c8f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c900 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1c910 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31  { return noVs201
1c920 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  0; }..          
1c930 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
1c940 32 30 31 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2010 = value; }.
1c950 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1c960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1c970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c9b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1c9c0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
1c9d0 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20  Trace;..        
1c9e0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1c9f0 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20 20 20 20  NoTrace..       
1ca00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ca10 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1ca20 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d  turn noTrace; }.
1ca30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ca40 20 73 65 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d   set { noTrace =
1ca50 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1ca60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ca70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1ca80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1caa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1cac0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1cad0 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c  te bool noConsol
1cae0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1caf0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f  public bool NoCo
1cb00 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  nsole..         
1cb10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1cb20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1cb30 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d  rn noConsole; }.
1cb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb50 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65   set { noConsole
1cb60 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1cb70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1cb80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1cbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1cbe0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b  vate bool noLog;
1cbf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1cc00 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d  blic bool NoLog.
1cc10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc30 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c  get { return noL
1cc40 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  og; }..         
1cc50 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c         set { noL
1cc60 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  og = value; }.. 
1cc70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1cc80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1cc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1ccd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1cce0 72 69 76 61 74 65 20 62 6f 6f 6c 20 74 68 72 6f  rivate bool thro
1ccf0 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20  wOnMissing;..   
1cd00 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1cd10 62 6f 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73 73  bool ThrowOnMiss
1cd20 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
1cd30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1cd40 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1cd50 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b   throwOnMissing;
1cd60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1cd70 20 20 20 20 73 65 74 20 7b 20 74 68 72 6f 77 4f      set { throwO
1cd80 6e 4d 69 73 73 69 6e 67 20 3d 20 76 61 6c 75 65  nMissing = value
1cd90 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1cda0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1cdb0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1cdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdf0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ce00 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
1ce10 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  l whatIf;..     
1ce20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1ce30 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20  ol WhatIf..     
1ce40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ce50 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1ce60 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d  return whatIf; }
1ce70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ce80 20 20 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d    set { whatIf =
1ce90 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1cea0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ceb0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1cec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ced0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1cf00 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1cf10 74 65 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a  te bool debug;..
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1cf30 69 63 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a 20  ic bool Debug.. 
1cf40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1cf60 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  t { return debug
1cf70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1cf80 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67       set { debug
1cf90 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1cfa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1cfb0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1cfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d000 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1d010 76 61 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73  vate bool verbos
1d020 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1d030 70 75 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62  public bool Verb
1d040 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
1d050 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d060 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1d070 20 76 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20   verbose; }..   
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1d090 20 7b 20 76 65 72 62 6f 73 65 20 3d 20 76 61 6c   { verbose = val
1d0a0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1d0b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1d0c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1d0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d0e0 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1d110 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
1d120 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  ool confirm;..  
1d130 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1d140 20 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20   bool Confirm.. 
1d150 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1d170 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69  t { return confi
1d180 72 6d 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  rm; }..         
1d190 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e         set { con
1d1a0 66 69 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  firm = value; }.
1d1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d1c0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1d1d0 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
1d1e0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
1d1f0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1d200 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d240 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1d250 20 20 20 20 23 72 65 67 69 6f 6e 20 46 72 61 6d      #region Fram
1d260 65 77 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d  eworkList Class.
1d270 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1d280 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 46 72   sealed class Fr
1d290 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20  ameworkList..   
1d2a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d2b0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
1d2c0 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
1d2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1d2e0 6c 69 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  lic FrameworkLis
1d2f0 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
1d300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d310 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
1d320 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
1d330 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
1d340 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1d350 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1d360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
1d3b0 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
1d3c0 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
1d3d0 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
1d3e0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b  stryKey rootKey;
1d3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1d400 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
1d410 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20  yKey RootKey..  
1d420 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1d440 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65   { return rootKe
1d450 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
1d460 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74        set { root
1d470 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  Key = value; }..
1d480 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d490 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1d4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d4f0 70 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69  private StringLi
1d500 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20  st names;..     
1d510 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74         public St
1d520 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a  ringList Names..
1d530 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1d550 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65  et { return name
1d560 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
1d570 20 20 20 20 20 20 73 65 74 20 7b 20 6e 61 6d 65        set { name
1d580 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
1d590 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1d5a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1d5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1d5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1d600 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4d 61 70  ivate VersionMap
1d610 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20   versions;..    
1d620 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56          public V
1d630 65 72 73 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f  ersionMap Versio
1d640 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
1d650 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d660 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1d670 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20  versions; }..   
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1d690 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61   { versions = va
1d6a0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1d6b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1d6c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1d6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d700 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1d710 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1d720 53 74 72 69 6e 67 4c 69 73 74 20 70 6c 61 74 66  StringList platf
1d730 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20  ormNames;..     
1d740 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74         public St
1d750 72 69 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f 72  ringList Platfor
1d760 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20  mNames..        
1d770 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d780 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1d790 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  urn platformName
1d7a0 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
1d7b0 20 20 20 20 20 20 73 65 74 20 7b 20 70 6c 61 74        set { plat
1d7c0 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75  formNames = valu
1d7d0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1d7e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d7f0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
1d800 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d810 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1d820 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1d830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d870 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1d880 20 56 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20   VsList Class.. 
1d890 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1d8a0 65 61 6c 65 64 20 63 6c 61 73 73 20 56 73 4c 69  ealed class VsLi
1d8b0 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  st..        {.. 
1d8c0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1d8d0 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
1d8e0 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
1d8f0 20 20 20 20 70 75 62 6c 69 63 20 56 73 4c 69 73      public VsLis
1d900 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
1d910 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d920 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
1d930 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
1d940 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
1d950 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1d960 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1d970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
1d9c0 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
1d9d0 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
1d9e0 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
1d9f0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
1da00 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey;..           
1da10 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
1da20 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d  stryKey RootKey.
1da30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da50 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f  get { return roo
1da60 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tKey; }..       
1da70 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
1da80 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20  ootKey = value; 
1da90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1daa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1dab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1daf0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1db00 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73 69     private Versi
1db10 6f 6e 4c 69 73 74 20 76 65 72 73 69 6f 6e 73 3b  onList versions;
1db20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1db30 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  blic VersionList
1db40 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20   Versions..     
1db50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1db60 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1db70 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b  return versions;
1db80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1db90 20 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f      set { versio
1dba0 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ns = value; }.. 
1dbb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1dbc0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
1dbd0 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
1dbe0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1dbf0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ion..        #en
1dc00 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1dc10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1dc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1dc60 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
1dc70 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20 44  ivate Constant D
1dc80 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ata..        pri
1dc90 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1dca0 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  g CoreFileName =
1dcb0 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
1dcc0 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20  Lite.dll";..    
1dcd0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1dce0 74 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c  t string LinqFil
1dcf0 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  eName = "System.
1dd00 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
1dd10 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20  .dll";..        
1dd20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1dd30 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c  ring DesignerFil
1dd40 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 2e  eName = "SQLite.
1dd50 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a  Designer.dll";..
1dd60 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1dd70 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
1dd80 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51 4c  viderName = "SQL
1dd90 69 74 65 20 44 61 74 61 20 50 72 6f 76 69 64 65  ite Data Provide
1dda0 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  r";..        pri
1ddb0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1ddc0 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20  g ProjectName = 
1ddd0 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
1dde0 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  ite";..        p
1ddf0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
1de00 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65 63  ing LegacyProjec
1de10 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 22  tName = "SQLite"
1de20 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
1de30 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
1de40 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20  InvariantName = 
1de50 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
1de60 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  ite";..        p
1de70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
1de80 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65 4e  ing FactoryTypeN
1de90 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
1dea0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
1deb0 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20  Factory";..     
1dec0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1ded0 20 73 74 72 69 6e 67 20 44 65 73 63 72 69 70 74   string Descript
1dee0 69 6f 6e 20 3d 20 22 2e 4e 45 54 20 46 72 61 6d  ion = ".NET Fram
1def0 65 77 6f 72 6b 20 44 61 74 61 20 50 72 6f 76 69  ework Data Provi
1df00 64 65 72 20 66 6f 72 20 53 51 4c 69 74 65 22 3b  der for SQLite";
1df10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1df20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1df70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
1df80 69 6e 67 20 43 4c 52 76 32 49 6d 61 67 65 52 75  ing CLRv2ImageRu
1df90 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
1dfa0 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20  v2.0.50727";..  
1dfb0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1dfc0 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76 34  nst string CLRv4
1dfd0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1dfe0 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33 30 33 31  ion = "v4.0.3031
1dff0 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  9";....        /
1e000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e040 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1e050 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
1e060 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61  string NameAndVa
1e070 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d  lueFormat = "{0}
1e080 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20  : {1}";..       
1e090 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
1e0a0 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66  tring LogFileSuf
1e0b0 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d  fix = ".log";...
1e0c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1e0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
1e120 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
1e130 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d 20 22   RootKeyName = "
1e140 53 6f 66 74 77 61 72 65 22 3b 0d 0a 20 20 20 20  Software";..    
1e150 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1e160 74 20 73 74 72 69 6e 67 20 57 6f 77 36 34 53 75  t string Wow64Su
1e170 62 4b 65 79 4e 61 6d 65 20 3d 20 22 57 6f 77 36  bKeyName = "Wow6
1e180 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20 20  432Node";....   
1e190 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1e1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e1e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1e1f0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65      // NOTE: The
1e200 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1e210 68 61 73 20 62 6f 74 68 20 33 32 2d 62 69 74 20  has both 32-bit 
1e220 61 6e 64 20 36 34 2d 62 69 74 20 65 64 69 74 69  and 64-bit editi
1e230 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ons...        //
1e240 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1e250 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
1e260 79 20 62 6f 6f 6c 20 4e 65 74 46 78 49 73 33 32  y bool NetFxIs32
1e270 42 69 74 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b  BitOnly = false;
1e280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1e290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e2d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1e2e0 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
1e2f0 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69 73  TE: For now, Vis
1e300 75 61 6c 20 53 74 75 64 69 6f 20 69 73 20 61 6c  ual Studio is al
1e310 77 61 79 73 20 61 20 33 32 2d 62 69 74 20 61 70  ways a 32-bit ap
1e320 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  plication...    
1e330 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1e340 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
1e350 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73 49  eadonly bool VsI
1e360 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72 75  s32BitOnly = tru
1e370 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e;....        //
1e380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e3c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e3d0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1e3e0 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
1e3f0 56 73 49 64 46 6f 72 6d 61 74 20 3d 20 22 42 22  VsIdFormat = "B"
1e400 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e450 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1e460 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
1e470 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58  eadonly string X
1e480 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e  PathForAddElemen
1e490 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t =..           
1e4a0 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f   "configuration/
1e4b0 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72  system.data/DbPr
1e4c0 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f  oviderFactories/
1e4d0 61 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c  add[@invariant=\
1e4e0 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20  "{0}\"]";....   
1e4f0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1e500 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
1e510 69 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d 6f  ing XPathForRemo
1e520 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20  veElement =..   
1e530 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67           "config
1e540 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64  uration/system.d
1e550 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61  ata/DbProviderFa
1e560 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b 40  ctories/remove[@
1e570 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c  invariant=\"{0}\
1e580 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  "]";..        #e
1e590 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1e5a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1e5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e5f0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
1e600 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44 61  rivate Static Da
1e610 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ta..        priv
1e620 61 74 65 20 73 74 61 74 69 63 20 41 73 73 65 6d  ate static Assem
1e630 62 6c 79 20 74 68 69 73 41 73 73 65 6d 62 6c 79  bly thisAssembly
1e640 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47 65 74 45   = Assembly.GetE
1e650 78 65 63 75 74 69 6e 67 41 73 73 65 6d 62 6c 79  xecutingAssembly
1e660 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ();....        p
1e670 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
1e680 72 69 6e 67 20 74 72 61 63 65 43 61 74 65 67 6f  ring traceCatego
1e690 72 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  ry = Path.GetFil
1e6a0 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
1e6b0 20 20 20 20 74 68 69 73 41 73 73 65 6d 62 6c 79      thisAssembly
1e6c0 2e 4c 6f 63 61 74 69 6f 6e 29 3b 20 2f 2a 20 4e  .Location); /* N
1e6d0 4f 54 45 3a 20 53 61 6d 65 20 66 6f 72 20 64 65  OTE: Same for de
1e6e0 62 75 67 20 61 6e 64 20 74 72 61 63 65 2e 20 2a  bug and trace. *
1e6f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1e700 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
1e710 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
1e720 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 44 65 62  allback = AppDeb
1e730 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ug;..        pri
1e740 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
1e750 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
1e760 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54 72 61  allback = AppTra
1e770 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ce;..        #en
1e780 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1e790 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e7e0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72        #region Tr
1e7f0 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ace Handling..  
1e800 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1e810 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 4c  atic string GetL
1e820 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20  ogFileName(..   
1e830 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1e840 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  typeName..      
1e850 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f 77        ) /* throw
1e860 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
1e870 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1e880 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61  ng fileName = Pa
1e890 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65 4e 61  th.GetTempFileNa
1e8a0 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  me();..         
1e8b0 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
1e8c0 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69  ory = Path.GetDi
1e8d0 72 65 63 74 6f 72 79 4e 61 6d 65 28 66 69 6c 65  rectoryName(file
1e8e0 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
1e8f0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
1e900 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68 2e 47  ameOnly = Path.G
1e910 65 74 46 69 6c 65 4e 61 6d 65 57 69 74 68 6f 75  etFileNameWithou
1e920 74 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e  tExtension(fileN
1e930 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
1e940 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 46       string newF
1e950 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
1e960 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
1e970 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1e980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e990 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74    "{0}{1}{2}", t
1e9a0 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 21 53  raceCategory, !S
1e9b0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
1e9c0 70 74 79 28 74 79 70 65 4e 61 6d 65 29 20 3f 0d  pty(typeName) ?.
1e9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e9e0 20 20 20 20 20 22 2e 22 20 2b 20 74 79 70 65 4e       "." + typeN
1e9f0 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70  ame : String.Emp
1ea00 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65 4e 61  ty, "." + fileNa
1ea10 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20 20 20  meOnly +..      
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
1ea30 67 46 69 6c 65 53 75 66 66 69 78 29 29 3b 0d 0a  gFileSuffix));..
1ea40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 69  ..            Fi
1ea50 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61 6d 65  le.Move(fileName
1ea60 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29 3b 0d  , newFileName);.
1ea70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1ea80 65 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e 61 6d  eturn newFileNam
1ea90 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
1eaa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1eab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ead0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eaf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
1eb00 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
1eb10 41 70 70 44 65 62 75 67 28 0d 0a 20 20 20 20 20  AppDebug(..     
1eb20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
1eb30 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
1eb40 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
1eb50 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
1eb60 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
1eb70 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1eb80 4f 70 73 2e 44 65 62 75 67 43 6f 72 65 28 53 74  Ops.DebugCore(St
1eb90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1ebb0 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d  aceOps.DebugForm
1ebc0 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78  at, TraceOps.Nex
1ebd0 74 44 65 62 75 67 49 64 28 29 2c 0d 0a 20 20 20  tDebugId(),..   
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1ebf0 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28  ceOps.TimeStamp(
1ec00 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29  DateTime.UtcNow)
1ec10 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65  , message), cate
1ec20 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
1ec30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1ec40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ec90 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
1eca0 6f 69 64 20 41 70 70 54 72 61 63 65 28 0d 0a 20  oid AppTrace(.. 
1ecb0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1ecc0 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20  g message,..    
1ecd0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
1ece0 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
1ecf0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1ed00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  {..            T
1ed10 72 61 63 65 4f 70 73 2e 54 72 61 63 65 43 6f 72  raceOps.TraceCor
1ed20 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
1ed30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ed40 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
1ed50 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73  Format, TraceOps
1ed60 2e 4e 65 78 74 54 72 61 63 65 49 64 28 29 2c 0d  .NextTraceId(),.
1ed70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ed80 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74   TraceOps.TimeSt
1ed90 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63  amp(DateTime.Utc
1eda0 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20  Now), message), 
1edb0 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  category);..    
1edc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
1edd0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1ede0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1edf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ee30 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1ee40 47 65 6e 65 72 69 63 20 50 6c 61 74 66 6f 72 6d  Generic Platform
1ee50 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
1ee60 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1ee70 63 20 62 6f 6f 6c 20 49 73 36 34 42 69 74 50 72  c bool Is64BitPr
1ee80 6f 63 65 73 73 28 29 0d 0a 20 20 20 20 20 20 20  ocess()..       
1ee90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1eea0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1eeb0 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73  // NOTE: Returns
1eec0 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
1eed0 72 65 6e 74 20 70 72 6f 63 65 73 73 20 69 73 20  rent process is 
1eee0 36 34 2d 62 69 74 2e 20 20 49 66 20 74 68 69 73  64-bit.  If this
1eef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1ef00 20 20 20 20 20 20 20 69 73 20 74 72 75 65 2c 20         is true, 
1ef10 77 65 20 2a 6b 6e 6f 77 2a 20 74 68 61 74 20 77  we *know* that w
1ef20 65 20 6d 75 73 74 20 62 65 20 72 75 6e 6e 69 6e  e must be runnin
1ef30 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 0d 0a 20  g on a 64-bit.. 
1ef40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1ef50 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79      operating sy
1ef60 73 74 65 6d 20 61 73 20 77 65 6c 6c 2e 20 20 48  stem as well.  H
1ef70 6f 77 65 76 65 72 2c 20 69 66 20 74 68 69 73 20  owever, if this 
1ef80 69 73 20 66 61 6c 73 65 2c 20 77 65 0d 0a 20 20  is false, we..  
1ef90 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1efa0 20 20 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73     do not necess
1efb0 61 72 69 6c 79 20 6b 6e 6f 77 20 74 68 61 74 20  arily know that 
1efc0 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f  we are running o
1efd0 6e 20 61 20 33 32 2d 62 69 74 0d 0a 20 20 20 20  n a 32-bit..    
1efe0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1eff0 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65   operating syste
1f000 6d 2c 20 64 75 65 20 74 6f 20 57 6f 57 36 34 20  m, due to WoW64 
1f010 28 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36 34 29  (Win32-on-Win64)
1f020 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20  , etc...        
1f030 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1f040 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 50      return (IntP
1f050 74 72 2e 53 69 7a 65 20 3d 3d 20 73 69 7a 65 6f  tr.Size == sizeo
1f060 66 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e 4f 54  f(long)); // NOT
1f070 45 3a 20 50 6f 69 6e 74 65 72 20 69 73 20 36 34  E: Pointer is 64
1f080 2d 62 69 74 73 3f 0d 0a 20 20 20 20 20 20 20 20  -bits?..        
1f090 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1f0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f0f0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
1f100 74 72 69 6e 67 20 47 65 74 52 6f 6f 74 4b 65 79  tring GetRootKey
1f110 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
1f120 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
1f130 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1f140 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f150 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
1f160 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 7b 31  ng.Format("{0}{1
1f170 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 2c  }", RootKeyName,
1f180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f190 20 20 77 6f 77 36 34 20 26 26 20 49 73 36 34 42    wow64 && Is64B
1f1a0 69 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20  itProcess() ?.. 
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1c0 20 20 20 22 5c 5c 22 20 2b 20 57 6f 77 36 34 53     "\\" + Wow64S
1f1d0 75 62 4b 65 79 4e 61 6d 65 20 3a 20 53 74 72 69  ubKeyName : Stri
1f1e0 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20  ng.Empty);..    
1f1f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
1f200 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1f210 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1f220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f260 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1f270 47 65 6e 65 72 69 63 20 53 74 72 69 6e 67 20 48  Generic String H
1f280 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
1f290 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1f2a0 73 74 72 69 6e 67 20 46 6f 72 44 69 73 70 6c 61  string ForDispla
1f2b0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
1f2c0 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20  object value..  
1f2d0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1f2e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f2f0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1f300 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1f310 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
1f320 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20  <null>";....    
1f330 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
1f340 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
1f350 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20      Type type = 
1f360 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b  value.GetType();
1f370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f380 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
1f390 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d  of(XmlElement)).
1f3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3c0 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65  XmlElement eleme
1f3d0 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e 74  nt = (XmlElement
1f3e0 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
1f3f0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1f400 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65  t = element.Oute
1f410 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  rXml;..         
1f420 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1f430 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20    else if (type 
1f440 3d 3d 20 74 79 70 65 6f 66 28 56 65 72 73 69 6f  == typeof(Versio
1f450 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n))..           
1f460 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f470 20 20 20 20 56 65 72 73 69 6f 6e 20 76 65 72 73      Version vers
1f480 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e 29 76  ion = (Version)v
1f490 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
1f4a0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
1f4b0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
1f4c0 22 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f 6e 29  "v{0}", version)
1f4d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1f4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
1f4f0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
1f500 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f510 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75     result = valu
1f520 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 0d  e.ToString();...
1f530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f540 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67   if (result.Leng
1f550 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  th == 0)..      
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f570 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b 0d  turn "<empty>";.
1f580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f590 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69     result = Stri
1f5a0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5c0 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73 73 4f  type.IsSubclassO
1f5d0 66 28 74 79 70 65 6f 66 28 56 61 6c 75 65 54 79  f(typeof(ValueTy
1f5e0 70 65 29 29 20 3f 20 22 7b 30 7d 22 20 3a 20 22  pe)) ? "{0}" : "
1f5f0 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20 20 20  \"{0}\"",..     
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f610 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20  esult);..       
1f620 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1f630 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
1f640 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
1f650 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1f660 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
1f670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1f6c0 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62    #region Assemb
1f6d0 6c 79 20 41 74 74 72 69 62 75 74 65 20 48 61 6e  ly Attribute Han
1f6e0 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
1f6f0 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
1f700 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 43  ing GetAssemblyC
1f710 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20  onfiguration(.. 
1f720 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
1f730 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  bly assembly..  
1f740 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1f750 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f760 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
1f770 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1f780 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f790 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1f7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f7c0 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
1f7d0 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20  ly.IsDefined(.. 
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7f0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
1f800 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67  f(AssemblyConfig
1f810 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65  urationAttribute
1f820 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  ), false))..    
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f840 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f850 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
1f860 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
1f870 41 74 74 72 69 62 75 74 65 20 63 6f 6e 66 69 67  Attribute config
1f880 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20  uration =..     
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8a0 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79         (Assembly
1f8b0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74  ConfigurationAtt
1f8c0 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20  ribute)..       
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8e0 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65       assembly.Ge
1f8f0 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65  tCustomAttribute
1f900 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f920 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
1f930 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
1f940 41 74 74 72 69 62 75 74 65 29 2c 0d 0a 20 20 20  Attribute),..   
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
1f970 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20  se)[0];....     
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f990 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67     return config
1f9a0 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72  uration.Configur
1f9b0 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  ation;..        
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1f9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f9f0 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
1fa00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1fa50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fa60 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
1fa70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fa80 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1fad0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
1fae0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
1faf0 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20  semblyTitle(..  
1fb00 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
1fb10 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ly assembly..   
1fb20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1fb30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fb40 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
1fb50 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1fb60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fb70 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1fb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fba0 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
1fbb0 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20  y.IsDefined(..  
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbd0 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
1fbe0 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74  (AssemblyTitleAt
1fbf0 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29  tribute), false)
1fc00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1fc10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc30 20 20 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41    AssemblyTitleA
1fc40 74 74 72 69 62 75 74 65 20 74 69 74 6c 65 20 3d  ttribute title =
1fc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 41                (A
1fc70 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72  ssemblyTitleAttr
1fc80 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20  ibute)..        
1fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fca0 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74      assembly.Get
1fcb0 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73  CustomAttributes
1fcc0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fce0 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
1fcf0 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
1fd00 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d  ), false)[0];...
1fd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fd20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1fd30 74 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20  title.Title;..  
1fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1fd60 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1fd70 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
1fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1fd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fda0 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
1fdb0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
1fdc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1fdd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1fde0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
1fdf0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  l;..        }.. 
1fe00 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1fe10 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
1fe20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1fe70 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61  #region .NET Fra
1fe80 6d 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d  mework Handling.
1fe90 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1fea0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
1feb0 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b  etFrameworkRootK
1fec0 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
1fed0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
1fee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1fef0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ff00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
1ff10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
1ff20 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45  \\Microsoft\\.NE
1ff30 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20  TFramework",..  
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
1ff50 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77  tRootKeyName(wow
1ff60 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  64));..        }
1ff70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffc0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1ffd0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
1ffe0 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72  ring GetFramewor
1fff0 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  kKeyName(..     
20000 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
20010 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
20020 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
20030 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
20040 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
20050 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
20060 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
20070 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
20080 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
20090 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
200a0 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d       string form
200b0 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e  at = !String.IsN
200c0 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66  ullOrEmpty(platf
200d0 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20  ormName) ?..    
200e0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
200f0 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
20100 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a  \\v{2}\\{3}" :..
20110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20120 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
20130 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a  \{1}\\v{2}";....
20140 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20150 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
20160 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74  (format, GetRoot
20170 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 0d  KeyName(wow64),.
20180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20190 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
201a0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
201b0 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b  , platformName);
201c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
201d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
201e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20220 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20230 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
20240 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  GetImageRuntimeV
20250 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
20260 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
20270 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
20280 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
20290 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
202a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
202b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202c0 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c  Assembly assembl
202d0 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
202e0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
202f0 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79  y.ReflectionOnly
20300 4c 6f 61 64 46 72 6f 6d 28 66 69 6c 65 4e 61 6d  LoadFrom(fileNam
20310 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  e); /* throw */.
20320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20330 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
20340 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
20350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
20360 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49 6d  turn assembly.Im
20370 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
20380 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
20390 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
203a0 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
203b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
203c0 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
203d0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
203e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
203f0 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
20400 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
20410 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20460 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20470 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
20480 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74  tFrameworkDirect
20490 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
204a0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
204b0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
204c0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
204d0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
204e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
204f0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
20500 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
20510 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
20520 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
20530 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
20540 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20550 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
20560 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
20570 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
20580 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
20590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205a0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74 46     rootKey, GetF
205b0 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e  rameworkRootKeyN
205c0 61 6d 65 28 77 6f 77 36 34 29 2c 20 66 61 6c 73  ame(wow64), fals
205d0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
205e0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
205f0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
20600 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20610 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
20620 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
20630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20640 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
20650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20660 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52  object value = R
20670 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65  egistryHelper.Ge
20680 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
20690 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
206a0 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c  , "InstallRoot",
206b0 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76   null, whatIf, v
206c0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
206d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
206e0 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
206f0 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
20700 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
20710 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
20720 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
20730 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
20740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20750 20 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65     (string)value
20760 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
20770 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72  "v{0}", framewor
20780 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20  kVersion));..   
20790 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
207a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
207b0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
207c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
207d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20810 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
20820 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c  Per-Framework/Pl
20830 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d  atform Handling.
20840 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
20850 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69   static void Ini
20860 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b  tializeFramework
20870 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20  List(..         
20880 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
20890 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
208a0 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
208b0 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
208c0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
208d0 20 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b     ref Framework
208e0 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69  List frameworkLi
208f0 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..            
20900 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
20910 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
20920 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e  ameworkList == n
20930 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
20940 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
20950 69 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77  ist = new Framew
20960 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  orkList();....  
20970 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
20980 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74  ameworkList.Root
20990 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
209a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
209b0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74  ameworkList.Root
209c0 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a  Key = rootKey;..
209d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
209e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a20 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20a30 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
20a40 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  st.Names == null
20a50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
20a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20a70 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
20a80 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69  Names = new Stri
20a90 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
20ab0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
20ac0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
20ad0 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
20ae0 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
20af0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
20b00 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41  workList.Names.A
20b10 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  dd(".NETFramewor
20b20 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  k");....        
20b30 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
20b40 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
20b50 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
20b60 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
20b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20b80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20b90 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
20ba0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64  rkList.Names.Add
20bb0 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61  (".NETCompactFra
20bc0 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20  mework");..     
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
20be0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
20bf0 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70  es.Add(".NETComp
20c00 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d  actFramework");.
20c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
20c30 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e  st.Names.Add(".N
20c40 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
20c50 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rk");..         
20c60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
20c70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20c80 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20cd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
20ce0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
20cf0 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
20d00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
20d20 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
20d30 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69  ions = new Versi
20d40 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20  onMap();....    
20d50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20d60 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
20d70 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
20d80 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b  iguration.NoDesk
20d90 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20  top)..          
20da0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20db0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
20dc0 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f 70  sionList desktop
20dd0 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65  VersionList = ne
20de0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
20df0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20e00 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
20e10 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
20e20 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
20e30 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29  ation.NoNetFx20)
20e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20e50 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
20e60 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  pVersionList.Add
20e70 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20  (new Version(2, 
20e80 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20  0, 50727));.... 
20e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ea0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
20eb0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
20ec0 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
20ed0 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20 20  .NoNetFx40)..   
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ef0 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
20f00 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
20f10 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33 30  Version(4, 0, 30
20f20 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  319));....      
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
20f40 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
20f50 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46 72  ions.Add(".NETFr
20f60 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20  amework",..     
20f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f80 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
20f90 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20  nList);..       
20fa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20fc0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
20fd0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
20fe0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f  nfiguration.NoCo
20ff0 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
21000 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
21020 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
21030 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 43  sions.Add(".NETC
21040 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
21050 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21060 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
21070 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56  ersionList(new V
21080 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20  ersion[] {..    
21090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210a0 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28      new Version(
210b0 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65 77  2, 0, 0, 0), new
210c0 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 30   Version(3, 5, 0
210d0 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  , 0)..          
210e0 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b 0d 0a            }));..
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21100 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21160 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
21170 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
21180 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
21190 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
211a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
211b0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
211c0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
211d0 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74  rmNames = new St
211e0 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21200 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
21210 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
21220 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
21230 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
21250 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
21260 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75 6c  ormNames.Add(nul
21270 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
21280 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
21290 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
212a0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
212b0 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
212c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
212d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
212e0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
212f0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
21300 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65 74 50  mes.Add("PocketP
21310 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  C");..          
21320 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
21330 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
21340 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61 72 74  Names.Add("Smart
21350 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20 20  phone");..      
21360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
21370 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
21380 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 57  formNames.Add("W
21390 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20  indowsCE");..   
213a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
213b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
213c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
213d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
213e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21420 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
21430 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46  tatic bool HaveF
21440 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20 20  ramework(..     
21450 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
21460 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
21470 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
21480 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
21490 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
214a0 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
214b0 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
214c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
214d0 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
214e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
214f0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
21500 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
21510 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
21520 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
21530 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
21540 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21550 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
21560 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79   GetFrameworkKey
21570 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
21580 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
21590 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
215a0 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
215b0 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  Name, wow64);...
215c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
215d0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
215e0 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
215f0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
21600 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
21610 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
21620 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
21630 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
21640 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
21650 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21660 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
21670 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
21680 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21690 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
216a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
216b0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20  platformName != 
216c0 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53  null) // NOTE: S
216d0 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e  kip non-desktop.
216e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
216f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
21700 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
21710 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
21720 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d  ectory = GetFram
21730 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
21740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21750 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
21760 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
21770 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76  wow64, whatIf, v
21780 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
21790 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
217a0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
217b0 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
217c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
217d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
217e0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
217f0 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65         if (!Dire
21800 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72  ctory.Exists(dir
21810 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
21820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21830 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
21840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
21850 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
21860 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
21870 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21890 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
218a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
218b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
218c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218d0 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
218e0 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 69 6e 20 64  k {0} found in d
218f0 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d  irectory {1}.",.
21900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21910 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
21920 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
21930 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69  ), ForDisplay(di
21940 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20  rectory)),..    
21950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21960 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
21970 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21980 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
21990 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
219a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
219b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
219c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21a00 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
21a10 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
21a20 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
21a30 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
21a40 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
21a50 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b  ForEachFramework
21a60 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20  Config(..       
21a70 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
21a80 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y registry,..   
21a90 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
21aa0 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  rkList framework
21ab0 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
21ac0 20 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66     FrameworkConf
21ad0 69 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62  igCallback callb
21ae0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
21af0 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61    string invaria
21b00 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
21b10 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
21b20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
21b30 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
21b40 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
21b50 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
21b60 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
21b70 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
21b80 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
21b90 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
21ba0 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
21bb0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
21bc0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
21bd0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
21be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
21bf0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
21c00 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
21c10 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
21c20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64    ref bool saved
21c30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
21c40 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
21c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
21c60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21c70 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73         if (regis
21c80 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  try == null)..  
21c90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
21cb0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65  or = "invalid re
21cc0 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20  gistry";..      
21cd0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21ce0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
21cf0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21d00 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
21d10 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  orkList == null)
21d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21d40 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
21d50 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74  d framework list
21d60 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
21d70 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
21d80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
21d90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21da0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
21db0 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77  rootKey = framew
21dc0 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b  orkList.RootKey;
21dd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21de0 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
21df0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
21e00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21e10 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
21e20 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b  valid root key";
21e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21e40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
21e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
21e70 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65   (!Object.Refere
21e80 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
21e90 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75 72 72  y, registry.Curr
21ea0 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20  entUser) &&..   
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 21 4f 62               !Ob
21ec0 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
21ed0 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65  uals(rootKey, re
21ee0 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
21ef0 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ine))..         
21f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21f10 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72        error = "r
21f20 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20  oot key must be 
21f30 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d  per-user or per-
21f40 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20  machine";..     
21f50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21f60 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
21f70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21f80 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
21f90 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
21fa0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
21fb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21fc0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
21fd0 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61  "no framework na
21fe0 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  mes found";..   
21ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
22000 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
22010 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22020 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
22030 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
22040 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
22050 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22060 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
22070 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
22080 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e  rk versions foun
22090 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
220a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
220b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
220c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
220d0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
220e0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
220f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
22100 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22110 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
22120 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e  = "no platform n
22130 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ames found";..  
22140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
22150 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
22160 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
22170 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
22180 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
22190 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65  s.Count != frame
221a0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
221b0 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20  mNames.Count).. 
221c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
221d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
221e0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
221f0 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e  mat("framework n
22200 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f  ame count {0} do
22210 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20  es not " +..    
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22230 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20  "match platform 
22240 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c  name count {1}",
22250 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
22260 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20  ames.Count,..   
22270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22280 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
22290 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75  latformNames.Cou
222a0 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
222b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
222c0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
222d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
222e0 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
222f0 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
22300 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
22310 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78  mes.Count; index
22320 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
22330 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22340 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
22350 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
22360 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f   Grab the name o
22370 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20  f the framework 
22380 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65  (e.g. ".NETFrame
22390 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20  work")..        
223a0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
223b0 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   and the name of
223c0 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65   the platform (e
223d0 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29  .g. "WindowsCE")
223e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
223f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
22400 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
22410 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72  ameworkName = fr
22420 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
22430 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  s[index];..     
22440 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
22450 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d  g platformName =
22460 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
22470 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64  latformNames[ind
22480 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex];....        
22490 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
224a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
224b0 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e 6f  OTE: Skip all no
224c0 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d 65 77  n-desktop framew
224d0 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66 20 74 68  orks (i.e. if th
224e0 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20  e platform..    
224f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
22500 20 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f 74       name is not
22510 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20   null)...       
22520 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
22540 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d  (platformName !=
22550 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
22560 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
22570 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
22580 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
22590 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
225a0 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 73  NOTE: Grab the s
225b0 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  upported version
225c0 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69 63  s of this partic
225d0 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20  ular..          
225e0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
225f0 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20  ramework...     
22600 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
22620 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65  ersionList frame
22630 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b  workVersionList;
22640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22650 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f      if (!framewo
22660 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  rkList.Versions.
22670 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  TryGetValue(..  
22680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22690 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
226a0 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f  ame, out framewo
226b0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c  rkVersionList) |
226c0 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
226d0 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72         (framewor
226e0 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20  kVersionList == 
226f0 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
22700 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
22720 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
22730 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
22750 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20  oreach (Version 
22760 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
22770 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72   in frameworkVer
22780 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20  sionList)..     
22790 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227b0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
227c0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
227d0 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227f0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
22800 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
22810 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
22820 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72               "fr
22840 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30  ameworkName = {0
22850 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  }, frameworkVers
22860 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a  ion = {1}, " +..
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22880 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72          "platfor
22890 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f  mName = {2}", Fo
228a0 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
228b0 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  rkName),..      
228c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228d0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61    ForDisplay(fra
228e0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
228f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22900 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
22910 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  lay(platformName
22920 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
22930 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
22940 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
22950 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a  HaveFramework(..
22960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22970 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
22980 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
22990 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
229a0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
229b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229c0 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
229d0 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
229e0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
22a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22a10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
22a20 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
22a30 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
22a40 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a60 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
22a70 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
22a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a90 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
22aa0 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e 6f 74 20  T Framework not 
22ab0 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e  found, skipping.
22ac0 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
22ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ae0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
22af0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22b00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
22b10 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
22b20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22b40 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
22b50 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b70 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
22b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22b90 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
22ba0 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65  ctory = GetFrame
22bb0 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
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 20 72 6f 6f 74 4b 65 79 2c          rootKey,
22be0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
22bf0 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  n, wow64, whatIf
22c00 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
22c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
22c30 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
22c40 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
22c50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c70 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
22c80 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
22c90 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
22ca0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
22cc0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
22cd0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
22ce0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
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 20 22 2e 4e 45 54 20 46           ".NET F
22d10 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72  ramework {0} dir
22d20 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61 6c 69  ectory is invali
22d30 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  d, " +..        
22d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d50 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e      "skipping...
22d60 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
22d70 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29  ameworkVersion))
22d80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22da0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
22db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22dc0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
22dd0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
22de0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
22df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e00 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61    directory = Pa
22e10 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
22e20 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22 29 3b  tory, "Config");
22e30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22e40 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
22e50 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69  ectory.Exists(di
22e60 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
22e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
22e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22e90 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
22ea0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
22eb0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
22ec0 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ee0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
22ef0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
22f00 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
22f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
22f30 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64   Framework {0} d
22f40 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f 65  irectory {1} doe
22f50 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20  s not " +..     
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f70 20 20 20 20 20 20 20 22 65 78 69 73 74 2c 20 73         "exist, s
22f80 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
22f90 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
22fa0 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  kVersion),..    
22fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fc0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
22fd0 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 20  ay(directory)), 
22fe0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
22ff0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23000 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
23010 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
23020 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23040 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
23050 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
23060 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d 61  e(directory, "ma
23070 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b 0d  chine.config");.
23080 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23090 20 20 20 20 20 20 20 69 66 20 28 21 46 69 6c 65         if (!File
230a0 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61 6d 65  .Exists(fileName
230b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
230c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
230d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230e0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
230f0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
23100 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
23110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23120 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
23130 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
23140 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
23150 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
23160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23170 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
23180 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31 7d  ork {0} file {1}
23190 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
231a0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
231b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231c0 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
231d0 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
231e0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
231f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23200 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
23210 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65 29  isplay(fileName)
23220 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
23230 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
23250 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
23260 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
23270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23280 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c        bool local
23290 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a  Saved = false;..
232a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
232b0 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62        if (!callb
232c0 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
232d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232e0 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
232f0 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73  riant, name, des
23300 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61  cription, typeNa
23310 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
23320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23330 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 63   assemblyName, c
23340 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36 34  lientData, wow64
23350 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
23360 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
23380 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
23390 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c 20  ref localSaved, 
233a0 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
233b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
233d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
233e0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
233f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23410 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23440 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c             if (l
23450 6f 63 61 6c 53 61 76 65 64 20 26 26 20 21 73 61  ocalSaved && !sa
23460 76 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ved)..          
23470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23480 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d    saved = true;.
23490 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
234a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
234b0 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234d0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
234e0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
234f0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
23500 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23520 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
23530 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
23540 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
23550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23570 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b   "localSaved = {
23580 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d 22  0}, saved = {1}"
23590 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
235a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235b0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f     ForDisplay(lo
235c0 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44 69  calSaved), ForDi
235d0 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d 0a  splay(saved)),..
235e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
23610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23620 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23630 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23640 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23650 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
23660 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
23670 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
23680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d  //....        [M
236d0 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
236e0 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
236f0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
23700 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
23710 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61   bool ForEachFra
23720 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d  meworkRegistry(.
23730 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
23740 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74  kRegistry regist
23750 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
23760 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
23770 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20  rameworkList,.. 
23780 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
23790 77 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c  workRegistryCall
237a0 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a  back callback,..
237b0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
237c0 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
237d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
237e0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
237f0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
23800 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
23810 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
23820 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
23830 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
23840 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
23850 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
23860 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
23870 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23880 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79      if (registry
23890 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
238a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
238b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
238c0 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73  = "invalid regis
238d0 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  try";..         
238e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
238f0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
23900 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23910 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
23920 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
23930 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
23950 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
23960 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d  ramework list";.
23970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23980 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
23990 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
239a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
239b0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
239c0 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b  tKey = framework
239d0 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d  List.RootKey;...
239e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
239f0 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  (rootKey == null
23a00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
23a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
23a30 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20  id root key";.. 
23a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23a50 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
23a60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23a70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
23a80 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
23a90 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20  Equals(rootKey, 
23aa0 72 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74  registry.Current
23ab0 55 73 65 72 29 20 26 26 0d 0a 20 20 20 20 20 20  User) &&..      
23ac0 20 20 20 20 20 20 20 20 20 20 21 4f 62 6a 65 63            !Objec
23ad0 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c  t.ReferenceEqual
23ae0 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73  s(rootKey, regis
23af0 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65  try.LocalMachine
23b00 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23b10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23b20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74     error = "root
23b30 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72   key must be per
23b40 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63  -user or per-mac
23b50 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  hine";..        
23b60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
23b70 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
23b80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23b90 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
23ba0 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e  kList.Names == n
23bb0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
23bc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23bd0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
23be0 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73   framework names
23bf0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
23c00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
23c10 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
23c20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23c30 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
23c40 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
23c50 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
23c60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23c70 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
23c80 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
23c90 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b  versions found";
23ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23cb0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
23cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
23cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
23ce0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
23cf0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d  PlatformNames ==
23d00 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23d10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23d20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
23d30 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  no platform name
23d40 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
23d50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23d60 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
23d70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23d80 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
23d90 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
23da0 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72  ount != framewor
23db0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
23dc0 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20  mes.Count)..    
23dd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23de0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
23df0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
23e00 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  ("framework name
23e10 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20   count {0} does 
23e20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  not " +..       
23e30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 61               "ma
23e40 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  tch platform nam
23e50 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72  e count {1}", fr
23e60 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
23e70 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  s.Count,..      
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
23e90 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
23ea0 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
23eb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23ec0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
23ed0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
23ee0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23ef0 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
23f00 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61  = 0; index < fra
23f10 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
23f20 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29  .Count; index++)
23f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23f50 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
23f60 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
23f70 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ab the name of t
23f80 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e  he framework (e.
23f90 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  g. ".NETFramewor
23fa0 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k")..           
23fb0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
23fc0 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
23fd0 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e  e platform (e.g.
23fe0 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a   "WindowsCE")...
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24000 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
24010 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
24020 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65  workName = frame
24030 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69  workList.Names[i
24040 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
24050 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
24060 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72  latformName = fr
24070 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
24080 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d  formNames[index]
24090 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
240a0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
240b0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
240c0 3a 20 47 72 61 62 20 74 68 65 20 73 75 70 70 6f  : Grab the suppo
240d0 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66  rted versions of
240e0 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61 72   this particular
240f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24100 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65    //       frame
24110 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20  work...         
24120 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
24130 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
24140 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  onList framework
24150 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a  VersionList;....
24160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24170 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69  if (!frameworkLi
24180 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47  st.Versions.TryG
24190 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
241a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241b0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
241c0 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65   out frameworkVe
241d0 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20  rsionList) ||.. 
241e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241f0 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72     (frameworkVer
24200 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  sionList == null
24210 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
24220 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24230 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
24240 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
24250 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24260 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
24270 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d  ch (Version fram
24280 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20  eworkVersion in 
24290 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
242a0 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20  List)..         
242b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
242c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
242d0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
242e0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
242f0 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20  ty.Lower,..     
24300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24310 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
24320 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
24330 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
24340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24350 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65 77           "framew
24360 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66  orkName = {0}, f
24370 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
24380 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  = {1}, " +..    
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243a0 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d      "platformNam
243b0 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73  e = {2}", ForDis
243c0 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61  play(frameworkNa
243d0 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
243f0 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
24400 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  rkVersion),..   
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24420 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
24430 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20  platformName)), 
24440 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
24450 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24460 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65         if (!Have
24470 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20  Framework(..    
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24490 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
244a0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
244b0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
244c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
244d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
244e0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77  latformName, wow
244f0 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  64, whatIf, verb
24500 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
24510 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24530 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
24540 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
24550 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
24560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24570 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
24580 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
24590 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
245a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245b0 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
245c0 61 6d 65 77 6f 72 6b 20 6e 6f 74 20 66 6f 75 6e  amework not foun
245d0 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c  d, skipping...",
245e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24600 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
24610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24620 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
24630 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
24640 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24660 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d   if (callback ==
24670 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24690 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246b0 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d   if (!callback(.
246c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
246e0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
246f0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
24700 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
24710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24720 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
24730 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f  , clientData, wo
24740 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  w64, throwOnMiss
24750 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
24780 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  e, ref error))..
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
247b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
247c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
247d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
247f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24800 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24810 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
24820 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
24830 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
24840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
24850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24890 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
248a0 72 65 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61  region Per-Visua
248b0 6c 20 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e  l Studio Version
248c0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
248d0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
248e0 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a  c void Initializ
248f0 65 56 73 4c 69 73 74 28 0d 0a 20 20 20 20 20 20  eVsList(..      
24900 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
24910 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
24920 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
24930 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
24940 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
24950 20 20 20 20 20 20 72 65 66 20 56 73 4c 69 73 74        ref VsList
24960 20 76 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20   vsList..       
24970 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
24980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
24990 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c  f (vsList == nul
249a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
249b0 20 20 20 20 76 73 4c 69 73 74 20 3d 20 6e 65 77      vsList = new
249c0 20 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20   VsList();....  
249d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
249e0 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20  List.RootKey == 
249f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
24a00 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 52 6f         vsList.Ro
24a10 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b  otKey = rootKey;
24a20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24a30 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69  if (vsList.Versi
24a40 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
24a50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
24a70 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e  ist.Versions = n
24a80 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29  ew VersionList()
24a90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24aa0 20 20 20 20 20 2f 2f 20 76 73 4c 69 73 74 2e 56       // vsList.V
24ab0 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20  ersions.Add(new 
24ac0 56 65 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20  Version(8, 0)); 
24ad0 2f 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  // Visual Studio
24ae0 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20   2005....       
24af0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
24b00 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
24b10 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
24b20 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29  ration.NoVs2008)
24b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24b40 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
24b50 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
24b60 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f  rsion(9, 0)); //
24b70 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32   Visual Studio 2
24b80 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  008....         
24b90 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
24ba0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
24bb0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
24bc0 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a  tion.NoVs2010)..
24bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24be0 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69      vsList.Versi
24bf0 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
24c00 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f 20 56  ion(10, 0));// V
24c10 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 31  isual Studio 201
24c20 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  0..            }
24c30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
24c40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24c90 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
24ca0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61  e static bool Ha
24cb0 76 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20  veVsVersion(..  
24cc0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
24cd0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
24ce0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
24cf0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
24d00 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
24d10 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
24d20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
24d30 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
24d40 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
24d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
24d60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24d70 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
24d80 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
24d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24da0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
24db0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
24dc0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
24dd0 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
24de0 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ion, wow64);....
24df0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
24e00 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
24e10 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
24e20 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
24e30 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
24e40 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
24e50 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
24e60 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
24e70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
24e80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24e90 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
24ea0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
24eb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24ec0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
24ed0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
24ee0 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74  t value = Regist
24ef0 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75  ryHelper.GetValu
24f00 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
24f10 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e          key, "In
24f20 73 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c  stallDir", null,
24f30 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
24f40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24f50 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75        if (!(valu
24f60 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20  e is string)).. 
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
24f90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24fa0 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
24fb0 74 6f 72 79 20 3d 20 28 73 74 72 69 6e 67 29 76  tory = (string)v
24fc0 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
24fd0 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
24fe0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
24ff0 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  y(directory)).. 
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
25020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25030 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
25040 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74  ry.Exists(direct
25050 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
25060 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25070 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
25080 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
25090 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
250a0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
250b0 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
250d0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
250e0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
250f0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25110 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b 30  Visual Studio {0
25120 7d 20 66 6f 75 6e 64 20 69 6e 20 64 69 72 65 63  } found in direc
25130 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20  tory {1}.",..   
25140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25150 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
25160 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c  rsion), ForDispl
25170 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d  ay(directory)),.
25180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25190 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
251a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
251b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
251c0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
251d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
251e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
251f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25230 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
25240 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
25250 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
25260 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
25270 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
25280 62 6f 6f 6c 20 46 6f 72 45 61 63 68 56 73 56 65  bool ForEachVsVe
25290 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a  rsionRegistry(..
252a0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
252b0 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72  Registry registr
252c0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
252d0 56 73 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a  VsList vsList,..
252e0 20 20 20 20 20 20 20 20 20 20 20 20 56 69 73 75              Visu
252f0 61 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72 79  alStudioRegistry
25300 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63  Callback callbac
25310 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
25320 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
25330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
25340 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
25350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
25360 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
25370 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
25380 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
25390 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
253a0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
253b0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
253c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
253d0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
253e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
253f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25400 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73 74        if (regist
25410 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
25420 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25430 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
25440 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67  r = "invalid reg
25450 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20  istry";..       
25460 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25470 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
25480 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25490 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20       if (vsList 
254a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
254b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
254c0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
254d0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73   "invalid VS lis
254e0 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
254f0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
25500 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
25510 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25520 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
25530 20 72 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73   rootKey = vsLis
25540 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20  t.RootKey;....  
25550 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
25560 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
25570 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
25590 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
255a0 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20  root key";..    
255b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
255c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
255d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
255e0 20 20 20 20 20 20 20 20 69 66 20 28 21 4f 62 6a          if (!Obj
255f0 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75  ect.ReferenceEqu
25600 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67  als(rootKey, reg
25610 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65  istry.CurrentUse
25620 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
25630 20 20 20 20 20 20 20 21 4f 62 6a 65 63 74 2e 52         !Object.R
25640 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
25650 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79  ootKey, registry
25660 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d  .LocalMachine)).
25670 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25690 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65  error = "root ke
256a0 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73  y must be per-us
256b0 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e  er or per-machin
256c0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
256d0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
256e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
256f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25700 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73   if (vsList.Vers
25710 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
25720 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
25740 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 65 72  ror = "no VS ver
25750 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  sions found";.. 
25760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25770 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
25780 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25790 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
257a0 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73 56 65  ch (Version vsVe
257b0 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74 2e  rsion in vsList.
257c0 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20 20  Versions)..     
257d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
257e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
257f0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
25800 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
25810 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
25820 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
25830 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
25840 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
25850 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76 73               "vs
25870 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20  Version = {0}", 
25880 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72  ForDisplay(vsVer
25890 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
258a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
258b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
258c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258d0 69 66 20 28 21 48 61 76 65 56 73 56 65 72 73 69  if (!HaveVsVersi
258e0 6f 6e 28 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65  on(rootKey, vsVe
258f0 72 73 69 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68  rsion, wow64, wh
25900 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
25910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25920 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25930 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
25940 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
25950 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
25960 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25970 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
25980 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
25990 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
259a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259b0 20 20 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f    "Visual Studio
259c0 20 76 65 72 73 69 6f 6e 20 6e 6f 74 20 66 6f 75   version not fou
259d0 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22  nd, skipping..."
259e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
259f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
25a00 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
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 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d    if (callback =
25a60 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
25a70 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
25a80 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
25a90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
25aa0 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
25ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ac0 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
25ad0 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 63  sion, package, c
25ae0 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36 34  lientData, wow64
25af0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25b00 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
25b10 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49  OnMissing, whatI
25b20 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
25b30 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
25b40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
25b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25b90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
25ba0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
25bb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25bc0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
25bd0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25c20 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
25c30 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 46   Configuration F
25c40 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ile Handling..  
25c50 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
25c60 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
25c70 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
25c80 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
25c90 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
25ca0 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  dDbProviderFacto
25cb0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
25cc0 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
25cd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
25ce0 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
25cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
25d00 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
25d10 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
25d20 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
25d30 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
25d40 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
25d50 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
25d60 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
25d70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
25d80 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
25d90 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
25da0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
25db0 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
25dc0 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
25dd0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
25de0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
25df0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
25e00 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69           bool di
25e10 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  rty = false;..  
25e20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63            XmlDoc
25e30 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d  ument document =
25e40 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74   new XmlDocument
25e50 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
25e60 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73     document.Pres
25e70 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d  erveWhitespace =
25e80 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
25e90 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61      document.Loa
25ea0 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  d(fileName);....
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
25ec0 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e  lement addElemen
25ed0 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
25ee0 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
25ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f00 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50  String.Format(XP
25f10 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74  athForAddElement
25f20 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73  , invariant)) as
25f30 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
25f40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25f50 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75  addElement == nu
25f60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
25f70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25f80 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65      string[] ele
25f90 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20  mentNames = {.. 
25fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fb0 20 20 20 20 20 20 20 22 73 79 73 74 65 6d 2e 64         "system.d
25fc0 61 74 61 22 2c 20 22 44 62 50 72 6f 76 69 64 65  ata", "DbProvide
25fd0 72 46 61 63 74 6f 72 69 65 73 22 0d 0a 20 20 20  rFactories"..   
25fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ff0 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   };....         
26000 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
26010 74 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e  t previousElemen
26020 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t =..           
26030 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
26040 74 2e 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e  t.DocumentElemen
26050 74 3b 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74  t; /* configurat
26060 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  ion */....      
26070 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
26080 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e  h (string elemen
26090 74 4e 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74  tName in element
260a0 4e 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20  Names)..        
260b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
260c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
260d0 64 64 45 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76  ddElement = prev
260e0 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65  iousElement.Sele
260f0 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20  ctSingleNode(.. 
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26110 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61         elementNa
26120 6d 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  me) as XmlElemen
26130 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
26140 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64            if (ad
26150 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  dElement == null
26160 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26170 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26190 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64    addElement = d
261a0 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c  ocument.CreateEl
261b0 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  ement(..        
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261d0 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c      elementName,
261e0 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
261f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26200 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69             previ
26210 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e  ousElement.Appen
26220 64 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e  dChild(addElemen
26230 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
26240 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26260 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e    previousElemen
26270 74 20 3d 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d  t = addElement;.
26280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26290 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
262a0 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
262b0 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61   = document.Crea
262c0 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20  teElement(..    
262d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262e0 22 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d  "add", String.Em
262f0 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  pty);....       
26300 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75           previou
26310 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43  sElement.AppendC
26320 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29  hild(addElement)
26330 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26340 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75       dirty = tru
26350 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26360 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26370 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
26380 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47  als(addElement.G
26390 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d  etAttribute("nam
263a0 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e"),..          
263b0 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20            name, 
263c0 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
263d0 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
263e0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
263f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26400 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53      addElement.S
26410 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d  etAttribute("nam
26420 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20  e", name);..    
26430 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
26440 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
26450 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26460 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
26470 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c  ing.Equals(addEl
26480 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
26490 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29 2c  te("invariant"),
264a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
264b0 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74 2c        invariant,
264c0 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
264d0 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  n.InvariantCultu
264e0 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  re))..          
264f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26500 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e       addElement.
26510 53 65 74 41 74 74 72 69 62 75 74 65 28 22 69 6e  SetAttribute("in
26520 76 61 72 69 61 6e 74 22 2c 20 69 6e 76 61 72 69  variant", invari
26530 61 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ant);..         
26540 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
26550 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
26560 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26570 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
26580 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74  quals(addElement
26590 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22 64  .GetAttribute("d
265a0 65 73 63 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20  escription"),.. 
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265c0 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20     description, 
265d0 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
265e0 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
265f0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
26600 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26610 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53      addElement.S
26620 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73  etAttribute("des
26630 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72  cription", descr
26640 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  iption);..      
26650 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
26660 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
26670 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26680 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c        string ful
26690 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69  lTypeName = Stri
266a0 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20  ng.Format("{0}, 
266b0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
266c0 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c         typeName,
266d0 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d   assemblyName);.
266e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
266f0 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
26700 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74  s(addElement.Get
26710 41 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22  Attribute("type"
26720 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
26730 20 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65          fullType
26740 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70  Name, StringComp
26750 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74  arison.Invariant
26760 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20  Culture))..     
26770 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26780 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
26790 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74  ment.SetAttribut
267a0 65 28 22 74 79 70 65 22 2c 20 66 75 6c 6c 54 79  e("type", fullTy
267b0 70 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  peName);..      
267c0 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
267d0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
267e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
267f0 20 20 20 20 20 20 69 66 20 28 64 69 72 74 79 20        if (dirty 
26800 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20  || whatIf)..    
26810 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26820 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
26830 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
26840 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
26850 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
26860 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
26870 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
26880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26890 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
268a0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
268b0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
268c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
268d0 20 20 20 20 20 20 20 20 20 20 22 61 64 64 45 6c            "addEl
268e0 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c 20 46 6f  ement = {0}", Fo
268f0 72 44 69 73 70 6c 61 79 28 61 64 64 45 6c 65 6d  rDisplay(addElem
26900 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ent)),..        
26910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26920 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
26930 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26940 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
26950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26960 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61       document.Sa
26970 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ve(fileName);...
26980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26990 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
269a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
269b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
269c0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
269d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
269e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
269f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
26a30 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
26a40 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
26a50 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
26a60 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
26a70 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
26a80 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
26a90 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
26aa0 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
26ab0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
26ac0 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
26ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
26ae0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
26af0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
26b00 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
26b10 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
26b20 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
26b30 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
26b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
26b50 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
26b60 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72          bool dir
26b70 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ty = false;..   
26b80 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75           XmlDocu
26b90 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20  ment document = 
26ba0 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28  new XmlDocument(
26bb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26bc0 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65    document.Prese
26bd0 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d 20  rveWhitespace = 
26be0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
26bf0 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64     document.Load
26c00 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
26c10 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c             XmlEl
26c20 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74  ement addElement
26c30 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65   = document.Sele
26c40 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20  ctSingleNode(.. 
26c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
26c60 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61  tring.Format(XPa
26c70 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c  thForAddElement,
26c80 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20   invariant)) as 
26c90 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20  XmlElement;.... 
26ca0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
26cb0 64 64 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c  ddElement != nul
26cc0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
26cd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26ce0 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61     addElement.Pa
26cf0 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43  rentNode.RemoveC
26d00 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29  hild(addElement)
26d10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26d20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
26d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26d40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58  ...            X
26d50 6d 6c 45 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65  mlElement remove
26d60 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  Element = docume
26d70 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e  nt.SelectSingleN
26d80 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ode(..          
26d90 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
26da0 6d 61 74 28 58 50 61 74 68 46 6f 72 52 65 6d 6f  mat(XPathForRemo
26db0 76 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  veElement, invar
26dc0 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65  iant)) as XmlEle
26dd0 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ment;....       
26de0 20 20 20 20 20 69 66 20 28 72 65 6d 6f 76 65 45       if (removeE
26df0 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d  lement != null).
26e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
26e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2e 50 61  removeElement.Pa
26e30 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43  rentNode.RemoveC
26e40 68 69 6c 64 28 72 65 6d 6f 76 65 45 6c 65 6d 65  hild(removeEleme
26e50 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
26e60 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
26e70 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
26e80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
26e90 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77    if (dirty || w
26ea0 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
26eb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26ec0 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
26ed0 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
26ee0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
26ef0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
26f00 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
26f10 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f30 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
26f40 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
26f50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
26f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f70 20 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e        "addElemen
26f80 74 20 3d 20 7b 30 7d 2c 20 72 65 6d 6f 76 65 45  t = {0}, removeE
26f90 6c 65 6d 65 6e 74 20 3d 20 7b 31 7d 22 2c 0d 0a  lement = {1}",..
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fb0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
26fc0 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 2c 20  ay(addElement), 
26fd0 46 6f 72 44 69 73 70 6c 61 79 28 72 65 6d 6f 76  ForDisplay(remov
26fe0 65 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20  eElement)),..   
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27000 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
27010 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
27020 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
27030 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
27040 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
27050 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65  nt.Save(fileName
27060 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
27070 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72        saved = tr
27080 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
27090 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
270a0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
270b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
270c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
270d0 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
27110 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
27120 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
27130 65 73 73 44 62 50 72 6f 76 69 64 65 72 46 61 63  essDbProviderFac
27140 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
27150 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
27160 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
27170 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
27180 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
27190 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
271a0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
271b0 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
271c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
271d0 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
271e0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
271f0 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
27200 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
27210 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
27220 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
27230 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
27240 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
27250 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
27260 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
27270 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
27280 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
27290 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
272a0 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c   ref bool saved,
272b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
272c0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
272d0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
272e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
272f0 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
27300 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
27310 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
27320 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
27330 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
27340 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
27350 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
27360 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27370 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
27380 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77   "invalid framew
27390 6f 72 6b 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62  ork config callb
273a0 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
273b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
273c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
273d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
273e0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
273f0 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
27400 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27410 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
27420 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
27430 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
27440 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
27450 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68  e, invariant, wh
27460 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
27470 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ef saved,..     
27480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27490 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20  ef error) &&..  
274a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64                Ad
274b0 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  dDbProviderFacto
274c0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
274d0 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
274e0 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61  e, invariant, na
274f0 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  me, description,
27500 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
27510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27520 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68  assemblyName, wh
27530 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
27540 65 66 20 73 61 76 65 64 2c 20 72 65 66 20 65 72  ef saved, ref er
27550 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
27560 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
27570 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
27580 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27590 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
275a0 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46 61  moveDbProviderFa
275b0 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
275c0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
275d0 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c  Name, invariant,
275e0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
275f0 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20  , ref saved,..  
27600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27610 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20    ref error);.. 
27620 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
27630 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27640 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
27650 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
276a0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
276b0 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65  n Assembly Folde
276c0 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rs Handling..   
276d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
276e0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
276f0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79  semblyFoldersKey
27700 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
27710 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
27720 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
27730 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
27740 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
27750 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
27760 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
27770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
27780 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
27790 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
277a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
277b0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
277c0 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 72   // NOTE: This r
277d0 65 67 69 73 74 72 79 20 6b 65 79 20 61 70 70 65  egistry key appe
277e0 61 72 73 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ars to always be
277f0 20 33 32 2d 62 69 74 20 6f 6e 6c 79 0d 0a 20 20   32-bit only..  
27800 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
27810 20 20 20 28 69 2e 65 2e 20 70 72 6f 62 61 62 6c     (i.e. probabl
27820 79 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20  y because it is 
27830 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 56 69 73  only used by Vis
27840 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ual..           
27850 20 2f 2f 20 20 20 20 20 20 20 53 74 75 64 69 6f   //       Studio
27860 2c 20 77 68 69 63 68 20 69 73 20 63 75 72 72 65  , which is curre
27870 6e 74 6c 79 20 61 6c 77 61 79 73 20 33 32 2d 62  ntly always 32-b
27880 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20 20 20 20 20  it only)...     
27890 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
278a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f         string fo
278b0 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49  rmat = !String.I
278c0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61  sNullOrEmpty(pla
278d0 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20  tformName) ?..  
278e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
278f0 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b  0}\\Microsoft\\{
27900 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41  1}\\v{2}\\{3}\\A
27910 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78  ssemblyFoldersEx
27920 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " :..           
27930 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f       "{0}\\Micro
27940 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c  soft\\{1}\\v{2}\
27950 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  \AssemblyFolders
27960 45 78 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Ex";....        
27970 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
27980 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c  g.Format(format,
27990 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
279a0 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20  wow64),..       
279b0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
279c0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
279d0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
279e0 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  rmName);..      
279f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
27a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
27a50 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
27a60 20 62 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d   bool AddToAssem
27a70 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20  blyFolders(..   
27a80 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
27a90 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
27aa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
27ab0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
27ac0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
27ad0 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
27ae0 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
27af0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
27b00 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
27b10 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
27b20 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
27b30 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
27b40 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
27b50 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
27b60 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
27b70 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
27b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
27b90 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
27ba0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
27bb0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
27bc0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
27bd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27be0 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
27bf0 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64   GetAssemblyFold
27c00 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ersKeyName(..   
27c10 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
27c20 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
27c30 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
27c40 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36  atformName, wow6
27c50 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
27c60 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
27c70 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
27c80 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
27c90 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cb0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
27cc0 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
27cd0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
27ce0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27cf0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
27d00 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
27d10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d30 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
27d40 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
27d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d60 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
27d70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
27d80 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
27d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27da0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
27db0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27dd0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
27de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
27df0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27e00 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
27e10 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
27e20 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
27e30 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d  r.CreateSubKey(.
27e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e50 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
27e60 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
27e70 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
27e80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
27e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ea0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
27eb0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
27ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ee0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
27ef0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
27f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f10 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
27f20 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
27f30 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
27f40 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
27f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f60 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
27f70 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
27f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
27fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
27fd0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
27fe0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
27ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
28000 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72  ubKey, null, dir
28010 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66 2c 20  ectory, whatIf, 
28020 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
28030 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
28040 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
28050 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28060 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
28070 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
28080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
280d0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
280e0 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41  bool RemoveFromA
280f0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
28100 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
28110 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
28120 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
28130 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
28140 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
28150 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
28160 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
28170 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
28180 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
28190 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
281a0 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
281b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
281c0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
281d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
281e0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
281f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
28200 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
28210 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
28220 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
28230 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
28240 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
28250 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28260 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
28270 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d  yName = GetAssem
28280 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
28290 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
282a0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
282b0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
282c0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
282d0 65 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  e, wow64);....  
282e0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
282f0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
28300 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
28310 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
28320 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28330 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
28340 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77  keyName, true, w
28350 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
28360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28380 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
28390 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
283a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
283b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
283c0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
283d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
283e0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
283f0 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
28400 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
28410 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
28420 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
28430 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
28440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28450 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
28460 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
28470 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28480 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
28490 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53  ryHelper.DeleteS
284a0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
284b0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
284c0 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72   subKeyName, thr
284d0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61  owOnMissing, wha
284e0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
284f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28500 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
28510 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
28520 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28570 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28580 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28590 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73  c bool ProcessAs
285a0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
285b0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
285c0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
285d0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
285e0 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
285f0 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
28600 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
28610 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
28620 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
28630 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
28640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
28650 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
28660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28670 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
28680 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
28690 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
286a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
286b0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
286c0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
286d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
286e0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
286f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
28700 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28710 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
28720 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
28730 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
28740 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
28750 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
28760 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
28770 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
28780 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28790 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
287a0 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77   "invalid framew
287b0 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74  ork callback dat
287c0 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
287d0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
287e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
287f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
28800 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
28810 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28820 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28830 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73  urn RemoveFromAs
28840 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28860 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
28870 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
28880 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
28890 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
288a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288b0 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61   LegacyProjectNa
288c0 6d 65 2c 20 77 6f 77 36 34 2c 20 66 61 6c 73 65  me, wow64, false
288d0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
288e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
288f0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
28900 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
28910 20 20 20 20 20 20 20 41 64 64 54 6f 41 73 73 65         AddToAsse
28920 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28940 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
28950 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
28960 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
28970 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
28980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
28990 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69 72  rojectName, pair
289a0 2e 58 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  .X, wow64, whatI
289b0 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
289c0 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
289d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
289e0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
289f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28a00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28a10 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62  RemoveFromAssemb
28a20 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a40 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
28a50 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
28a60 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
28a70 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
28a80 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
28a90 6a 65 63 74 4e 61 6d 65 2c 20 77 6f 77 36 34 2c  jectName, wow64,
28aa0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
28ab0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
28ac0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28ad0 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72         ref error
28ae0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
28af0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
28b00 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
28b10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
28b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b60 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
28b70 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
28b80 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  udio Handling.. 
28b90 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
28ba0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
28bb0 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a  VsRootKeyName(..
28bc0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
28bd0 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
28be0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
28bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
28c00 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
28c10 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f  at("{0}\\Microso
28c20 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f  ft\\VisualStudio
28c30 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
28c40 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61      GetRootKeyNa
28c50 6d 65 28 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20  me(wow64));..   
28c60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28c70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28cc0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
28cd0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 56 73  tic string GetVs
28ce0 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
28cf0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
28d00 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
28d10 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
28d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
28d30 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
28d40 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
28d50 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
28d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d70 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
28d80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28d90 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
28da0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28db0 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 47     "{0}\\{1}", G
28dc0 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  etVsRootKeyName(
28dd0 77 6f 77 36 34 29 2c 20 76 73 56 65 72 73 69 6f  wow64), vsVersio
28de0 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n);..        }..
28df0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
28e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e40 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
28e50 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
28e60 69 6f 20 44 61 74 61 20 53 6f 75 72 63 65 20 48  io Data Source H
28e70 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
28e80 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
28e90 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f  bool AddVsDataSo
28ea0 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
28eb0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
28ec0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
28ed0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
28ee0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
28ef0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
28f00 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
28f10 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
28f20 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
28f30 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
28f40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
28f50 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
28f60 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
28f70 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
28f80 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
28f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28fa0 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
28fb0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28fc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28fd0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
28fe0 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
28ff0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29000 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
29010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
29030 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
29040 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29050 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29060 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
29070 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
29080 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29090 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
290a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
290b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
290c0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
290d0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
290e0 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d  ersion, wow64);.
290f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
29100 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
29110 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
29120 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
29130 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
29140 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
29150 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
29160 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
29170 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
29180 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29190 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
291a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
291b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
291c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291d0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
291e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
291f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29200 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
29210 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
29220 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
29230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29240 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
29250 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
29260 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
29270 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
29280 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292a0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
292b0 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
292c0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
292d0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
292e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292f0 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f      key, "DataSo
29300 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68  urces", true, wh
29310 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
29320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29330 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29340 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
29350 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
29360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29370 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29380 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
29390 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
293a0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
293b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293c0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
293d0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
293e0 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c  }\\DataSources",
293f0 0d 0a 20 20 20 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 20 6b 65                ke
29410 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
29420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29430 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
29440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29450 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20  y dataSourceKey 
29490 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
294a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
294b0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
294c0 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
294d0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
294e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294f0 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
29500 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
29510 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
29520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29530 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
29540 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
29550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
29560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29570 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61            if (da
29580 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e  taSourceKey == n
29590 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
295a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
295b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
295c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
295d0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
295e0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29600 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
29610 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
29620 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20  key: {0}\\{1}", 
29630 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
29640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29650 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
29660 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72  taSourceId.ToStr
29670 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
29680 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
296b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296e0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
296f0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
29700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29710 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 53             dataS
29720 6f 75 72 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20  ourceKey, null, 
29730 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
29740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29750 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
29760 20 44 61 74 61 62 61 73 65 20 46 69 6c 65 22 2c   Database File",
29770 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77   ProjectName), w
29780 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
29790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297a0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
297b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
297c0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
297d0 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
297e0 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63 65 4b  bKey(dataSourceK
297f0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
29800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29810 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
29820 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76 69 64  SupportingProvid
29830 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20  ers\\{0}",..    
29840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29850 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
29860 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
29870 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
29880 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  at)),..         
29890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298a0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
298b0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
298c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
298d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
298e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
298f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
29900 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
29910 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29960 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29970 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
29980 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44  c bool RemoveVsD
29990 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
299a0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
299b0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
299c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
299d0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
299e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
299f0 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
29a00 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
29a10 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
29a20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
29a30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
29a40 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
29a50 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
29a60 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
29a70 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
29a80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29a90 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
29aa0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
29ab0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29ac0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
29ad0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72   "invalid VS ver
29ae0 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
29af0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
29b00 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
29b10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29b20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
29b30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
29b40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b50 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
29b60 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
29b70 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
29b80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
29b90 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
29ba0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29bb0 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
29bc0 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d  me = GetVsKeyNam
29bd0 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77  e(vsVersion, wow
29be0 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
29bf0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
29c00 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
29c10 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
29c20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
29c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c40 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
29c50 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
29c60 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
29c70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29c80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29c90 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
29ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
29cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29cc0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
29cd0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
29ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cf0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
29d00 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
29d10 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d30 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
29d40 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
29d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d60 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
29d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29d90 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
29da0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
29db0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
29dc0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
29dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29de0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44           key, "D
29df0 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75  ataSources", tru
29e00 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
29e10 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
29e20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29e30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
29e40 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
29e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29e60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e80 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
29e90 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
29ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29eb0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
29ec0 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
29ed0 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72  y: {0}\\DataSour
29ee0 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
29ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f00 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
29f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
29f30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29f40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f60 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
29f70 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
29f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29f90 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
29fa0 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f  , package.DataSo
29fb0 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  urceId.ToString(
29fc0 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
29fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fe0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
29ff0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
2a000 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2a010 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a020 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a030 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
2a040 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2a050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a090 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2a0a0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2a0b0 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61  ol ProcessVsData
2a0c0 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
2a0d0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2a0e0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2a0f0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2a100 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
2a110 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
2a120 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
2a130 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
2a140 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
2a150 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2a160 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2a170 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
2a180 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
2a190 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2a1a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2a1b0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2a1c0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2a1d0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
2a1e0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2a1f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a200 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
2a210 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2a220 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a230 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2a240 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
2a250 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
2a260 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2a270 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2a280 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a290 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
2a2a0 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
2a2b0 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
2a2c0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
2a2d0 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
2a2e0 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
2a2f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a310 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2a320 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b  alid VS callback
2a330 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
2a340 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a350 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2a360 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a370 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
2a380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a3a0 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61 74   return AddVsDat
2a3b0 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20  aSource(..      
2a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2a3d0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
2a3e0 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34  , package, wow64
2a3f0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2a400 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2a410 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
2a420 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2a430 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2a440 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2a450 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a460 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
2a470 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  veVsDataSource(.
2a480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a490 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
2a4a0 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65  Version, package
2a4b0 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
2a4c0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a4e0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
2a4f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2a500 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2a510 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2a520 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2a570 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
2a580 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74  isual Studio Dat
2a590 61 20 50 72 6f 76 69 64 65 72 20 48 61 6e 64 6c  a Provider Handl
2a5a0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
2a5b0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2a5c0 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69 64   AddVsDataProvid
2a5d0 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
2a5e0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2a5f0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2a600 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
2a610 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
2a620 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
2a630 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
2a640 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
2a650 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2a660 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2a670 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2a680 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2a690 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2a6a0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2a6b0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2a6c0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2a6d0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2a6e0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
2a6f0 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
2a700 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a720 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2a730 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
2a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a750 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2a760 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a770 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2a780 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
2a790 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7b0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2a7c0 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
2a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a7e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2a7f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a800 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2a810 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
2a820 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
2a830 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  on, wow64);.... 
2a840 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2a850 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2a860 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
2a870 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2a880 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2a890 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2a8a0 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
2a8b0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2a8c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2a8d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a8e0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
2a8f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a900 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a910 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2a920 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2a930 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2a940 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
2a950 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
2a960 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
2a970 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
2a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2a990 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
2a9a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a9b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2a9c0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2a9d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a9e0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2a9f0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
2aa00 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
2aa10 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2aa20 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa40 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64  key, "DataProvid
2aa50 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ers", true, what
2aa60 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2aa80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aa90 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
2aaa0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2aac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aad0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2aae0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2aaf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2ab10 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2ab20 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2ab30 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c  \DataProviders",
2ab40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2ab60 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ab80 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aba0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2abb0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2abc0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2abd0 79 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y dataProviderKe
2abe0 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
2abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac00 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2ac10 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
2ac20 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac40 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72    package.DataPr
2ac50 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
2ac60 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac80 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
2ac90 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2acd0 20 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65   (dataProviderKe
2ace0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2acf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2ad30 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad50 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2ad60 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
2ad70 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2ad80 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20  {1}", key,..    
2ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ada0 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
2adb0 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72  age.DataProvider
2adc0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
2add0 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20  Format));....   
2ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adf0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ae00 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2ae40 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2ae50 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
2ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae70 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
2ae80 65 79 2c 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69  ey, null, Descri
2ae90 70 74 69 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a  ption, whatIf,..
2aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aeb0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
2aec0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aee0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2aef0 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af10 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
2af20 64 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61  derKey, "Invaria
2af30 6e 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61  ntName", Invaria
2af40 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ntName,..       
2af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af60 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2af70 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af90 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2afa0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
2afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2afc0 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
2afd0 69 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f  iderKey, "Techno
2afe0 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20  logy",..        
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b000 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e      package.AdoN
2b010 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54  etTechnologyId.T
2b020 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2b030 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
2b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b050 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2b060 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2b080 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2b090 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0b0 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
2b0c0 72 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22  rKey, "CodeBase"
2b0d0 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74  , fileName, what
2b0e0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b100 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2b110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b120 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2b130 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
2b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b150 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
2b160 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61  ProviderKey, "Fa
2b170 63 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a  ctoryService",..
2b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b190 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
2b1a0 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f  age.ServiceId.To
2b1b0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2b1c0 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1e0 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2b1f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2b210 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2b220 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
2b230 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
2b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b250 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
2b260 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43  edObjects\\DataC
2b270 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72  onnectionUIContr
2b280 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ol",..          
2b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2a0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2b2b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2b2d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
2b2e0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
2b2f0 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
2b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b310 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
2b320 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
2b330 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72  ConnectionProper
2b340 74 69 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ties",..        
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b360 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2b370 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b390 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2b3a0 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
2b3b0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
2b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3d0 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
2b3e0 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
2b3f0 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70  taConnectionSupp
2b400 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ort", whatIf,.. 
2b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b420 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
2b430 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b450 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
2b460 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
2b470 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
2b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b490 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
2b4a0 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
2b4b0 61 4f 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c  aObjectSupport",
2b4c0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4e0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
2b4f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b500 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2b510 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
2b520 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
2b530 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
2b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b550 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
2b560 62 6a 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77  bjects\\DataView
2b570 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66  Support", whatIf
2b580 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2b5a0 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
2b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2b5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b5d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2b5e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2b5f0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2b600 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b610 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2b620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2b660 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2b670 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
2b680 65 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28  eVsDataProvider(
2b690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2b6a0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2b6b0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
2b6c0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
2b6d0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2b6e0 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
2b6f0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
2b700 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2b710 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2b720 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2b730 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2b740 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b750 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2b760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2b770 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2b780 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
2b790 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2b7c0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2b7d0 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
2b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b7f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2b800 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b810 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2b820 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
2b830 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
2b840 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  n, wow64);....  
2b850 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2b860 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2b870 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
2b880 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2b890 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2b8a0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2b8b0 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
2b8c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2b8d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2b8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b8f0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
2b900 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2b910 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b920 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2b930 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2b940 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2b950 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2b960 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2b970 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2b980 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2b990 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2b9a0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
2b9b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b9c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2b9d0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2b9e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b9f0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2ba00 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2ba10 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
2ba20 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2ba30 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2ba50 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65  ey, "DataProvide
2ba60 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  rs", true, whatI
2ba70 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2ba90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2baa0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
2bab0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2bad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bae0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2baf0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2bb00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2bb20 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2bb30 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2bb40 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d  DataProviders",.
2bb50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2bb70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2bb90 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2bbc0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2bbd0 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53  ryHelper.DeleteS
2bbe0 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc00 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
2bc10 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72  age.DataProvider
2bc20 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
2bc30 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
2bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc50 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2bc60 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2bc70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2bc80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2bc90 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2bca0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2bcb0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2bcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2bd00 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2bd10 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
2bd20 72 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f 76  rocessVsDataProv
2bd30 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ider(..         
2bd40 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2bd50 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2bd60 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
2bd70 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
2bd80 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
2bd90 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
2bda0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
2bdb0 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
2bdc0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2bdd0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2bde0 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
2bdf0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
2be00 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2be10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2be20 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2be30 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2be40 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2be50 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2be60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
2be70 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2be80 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
2be90 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
2bea0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
2beb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2bec0 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
2bed0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2bee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bef0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2bf00 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64  id VS callback d
2bf10 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
2bf20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2bf30 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2bf40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2bf50 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2bf80 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 50  eturn AddVsDataP
2bf90 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
2bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2bfb0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
2bfc0 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72 2e  , package, pair.
2bfd0 58 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  X, wow64, whatIf
2bfe0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2bff0 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20         verbose, 
2c000 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
2c010 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2c020 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
2c030 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c040 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c050 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61  urn RemoveVsData
2c060 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
2c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c080 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
2c090 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f 77 36  n, package, wow6
2c0a0 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  4, whatIf, verbo
2c0b0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2c0c0 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
2c0d0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
2c0e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2c0f0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2c100 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2c110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c150 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2c160 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20   #region Visual 
2c170 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48  Studio Package H
2c180 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
2c190 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2c1a0 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56  void InitializeV
2c1b0 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
2c1c0 20 20 20 20 20 20 20 72 65 66 20 50 61 63 6b 61         ref Packa
2c1d0 67 65 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20  ge package..    
2c1e0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2c1f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c200 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
2c210 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2c220 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c230 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d         package =
2c240 20 6e 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d   new Package();.
2c250 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c260 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65     package.AdoNe
2c270 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20  tTechnologyId = 
2c280 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20  new Guid(..     
2c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2c2a0 37 37 41 42 39 41 39 44 2d 37 38 42 39 2d 34 42  77AB9A9D-78B9-4B
2c2b0 41 37 2d 39 31 41 43 2d 38 37 33 46 35 33 33 38  A7-91AC-873F5338
2c2c0 46 31 44 32 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  F1D2");....     
2c2d0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2c2e0 67 65 2e 50 61 63 6b 61 67 65 49 64 20 3d 20 6e  ge.PackageId = n
2c2f0 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20  ew Guid(..      
2c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
2c310 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39  CBE6C8D-0E57-409
2c320 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36 34  9-A183-98FF74C64
2c330 44 39 43 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  D9C");....      
2c340 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
2c350 65 2e 53 65 72 76 69 63 65 49 64 20 3d 20 6e 65  e.ServiceId = ne
2c360 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
2c370 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 43               "DC
2c380 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39  BE6C8D-0E57-4099
2c390 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36 34 44  -A183-98FF74C64D
2c3a0 39 44 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  9D");....       
2c3b0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2c3c0 2e 44 61 74 61 53 6f 75 72 63 65 49 64 20 3d 20  .DataSourceId = 
2c3d0 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20  new Guid(..     
2c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2c3f0 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42  0EBAAB6E-CA80-4B
2c400 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35  4A-8DDF-CBE6BF05
2c410 38 43 37 31 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  8C71");....     
2c420 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2c430 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
2c440 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
2c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c460 20 20 20 22 30 45 42 41 41 42 36 45 2d 43 41 38     "0EBAAB6E-CA8
2c470 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36  0-4B4A-8DDF-CBE6
2c480 42 46 30 35 38 43 37 30 22 29 3b 0d 0a 20 20 20  BF058C70");..   
2c490 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2c4a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c4b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2c4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2c500 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2c510 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 50 61 63  ic bool AddVsPac
2c520 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
2c530 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2c540 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2c550 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
2c560 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
2c570 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
2c580 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
2c590 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
2c5a0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
2c5b0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2c5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2c5d0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2c5e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2c5f0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2c600 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2c610 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2c620 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2c630 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
2c640 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
2c650 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c670 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2c680 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
2c690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c6a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2c6b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2c6d0 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
2c6e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c700 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2c710 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
2c720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c730 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2c740 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c750 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2c760 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
2c770 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
2c780 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  sion, wow64);...
2c790 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
2c7a0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2c7b0 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
2c7c0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2c7d0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2c7e0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2c7f0 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
2c800 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2c810 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2c820 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c830 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
2c840 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2c850 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2c870 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2c880 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2c8a0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2c8b0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2c8c0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
2c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8e0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2c8f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2c900 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c910 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2c920 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2c940 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2c950 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
2c960 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2c970 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c990 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73    key, "Packages
2c9a0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
2c9b0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2c9c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9e0 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
2c9f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ca00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2ca30 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca50 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2ca60 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2ca70 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61  try key: {0}\\Pa
2ca80 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20  ckages",..      
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2caa0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
2cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cac0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2cad0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2cae0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb00 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2cb10 67 69 73 74 72 79 4b 65 79 20 70 61 63 6b 61 67  gistryKey packag
2cb20 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20  eKey =..        
2cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb40 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2cb50 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
2cb60 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  subKey,..       
2cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb80 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63       package.Pac
2cb90 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
2cba0 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
2cbb0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbd0 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20    verbose))..   
2cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2cc00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2cc10 70 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75  packageKey == nu
2cc20 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc50 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2cc60 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2cc70 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc90 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63      "could not c
2cca0 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b  reate registry k
2ccb0 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cce0 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  key, package.Pac
2ccf0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
2cd00 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d  VsIdFormat));...
2cd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2cd30 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd70 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2cd80 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
2cd90 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20  Key, null,..    
2cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdb0 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
2cdc0 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67  ormat("{0} Desig
2cdd0 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72  ner Package", Pr
2cde0 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20  ojectName),..   
2cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce00 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
2ce10 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce30 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2ce40 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
2ce50 63 6b 61 67 65 4b 65 79 2c 20 22 43 6c 61 73 73  ckageKey, "Class
2ce60 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce80 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72  "SQLite.Designer
2ce90 2e 53 51 4c 69 74 65 50 61 63 6b 61 67 65 22 2c  .SQLitePackage",
2cea0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2ceb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2ced0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2cee0 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
2cef0 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20  , "CodeBase",.. 
2cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf10 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
2cf20 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
2cf30 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf50 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2cf60 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
2cf70 65 4b 65 79 2c 20 22 49 44 22 2c 20 34 30 30 2c  eKey, "ID", 400,
2cf80 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfa0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
2cfb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2cfc0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2cfd0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
2cfe0 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
2cff0 49 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c  InprocServer32",
2d000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61                Pa
2d020 74 68 2e 43 6f 6d 62 69 6e 65 28 45 6e 76 69 72  th.Combine(Envir
2d030 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44 69 72  onment.SystemDir
2d040 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
2d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d060 20 20 20 20 20 20 20 20 20 22 6d 73 63 6f 72 65           "mscore
2d070 65 2e 64 6c 6c 22 29 2c 20 77 68 61 74 49 66 2c  e.dll"), whatIf,
2d080 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0a0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2d0b0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
2d0c0 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 6d 70 61  ckageKey, "Compa
2d0d0 6e 79 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20  nyName",..      
2d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0f0 20 20 20 20 20 20 22 68 74 74 70 3a 2f 2f 73 79        "http://sy
2d100 73 74 65 6d 2e 64 61 74 61 2e 73 71 6c 69 74 65  stem.data.sqlite
2d110 2e 6f 72 67 2f 22 2c 20 77 68 61 74 49 66 2c 20  .org/", whatIf, 
2d120 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d140 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2d150 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
2d160 6b 61 67 65 4b 65 79 2c 20 22 4d 69 6e 45 64 69  kageKey, "MinEdi
2d170 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20  tion",..        
2d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d190 20 20 20 20 22 73 74 61 6e 64 61 72 64 22 2c 20      "standard", 
2d1a0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2d1b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2d1d0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2d1e0 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
2d1f0 20 22 50 72 6f 64 75 63 74 4e 61 6d 65 22 2c 0d   "ProductName",.
2d200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d210 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
2d220 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20  ing.Format("{0} 
2d230 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65  Designer Package
2d240 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c  ", ProjectName),
2d250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
2d270 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2d280 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d290 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2d2a0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
2d2b0 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
2d2c0 50 72 6f 64 75 63 74 56 65 72 73 69 6f 6e 22 2c  ProductVersion",
2d2d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 31                "1
2d2f0 2e 30 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  .0", whatIf, ver
2d300 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d320 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2d330 69 73 74 72 79 4b 65 79 20 74 6f 6f 6c 62 6f 78  istryKey toolbox
2d340 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  Key =..         
2d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d360 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2d370 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
2d380 65 79 28 70 61 63 6b 61 67 65 4b 65 79 2c 0d 0a  ey(packageKey,..
2d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3b0 22 54 6f 6f 6c 62 6f 78 22 2c 20 77 68 61 74 49  "Toolbox", whatI
2d3c0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d400 20 20 20 20 20 69 66 20 28 74 6f 6f 6c 62 6f 78       if (toolbox
2d410 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d430 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d450 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2d460 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2d470 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d490 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2d4a0 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
2d4b0 74 72 79 20 6b 65 79 3a 20 22 20 2b 0d 0a 20 20  try key: " +..  
2d4c0 20 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 20 20 20                  
2d4e0 20 20 22 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f 78 22    "{0}\\Toolbox"
2d4f0 2c 20 70 61 63 6b 61 67 65 4b 65 79 29 3b 0d 0a  , packageKey);..
2d500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d520 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2d530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d540 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2d570 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2d580 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5a0 20 20 20 20 20 20 20 20 74 6f 6f 6c 62 6f 78 4b          toolboxK
2d5b0 65 79 2c 20 22 44 65 66 61 75 6c 74 20 49 74 65  ey, "Default Ite
2d5c0 6d 73 22 2c 20 33 2c 20 77 68 61 74 49 66 2c 0d  ms", 3, whatIf,.
2d5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5f0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
2d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d610 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2d620 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2d640 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d650 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2d660 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
2d670 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
2d680 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
2d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6a0 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e         key, "Men
2d6b0 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  us", true, whatI
2d6c0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2d6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d6f0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
2d700 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2d720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d730 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2d740 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2d750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d760 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2d770 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2d780 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2d790 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20  Menus",..       
2d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7b0 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
2d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2d7e0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2d7f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d810 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2d820 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
2d830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d840 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
2d850 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
2d860 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2d870 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
2d880 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20               ", 
2d890 31 30 30 30 2c 20 33 22 2c 20 77 68 61 74 49 66  1000, 3", whatIf
2d8a0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
2d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d8d0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2d8e0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
2d8f0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2d900 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d920 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76        key, "Serv
2d930 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ices", true, wha
2d940 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d970 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
2d980 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d9b0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2d9c0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2d9d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2d9f0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
2da00 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
2da10 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20  \\Services",..  
2da20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da30 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
2da40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2da50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2da60 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2da80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2da90 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2daa0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 65  ckRegistryKey se
2dab0 72 76 69 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20  rviceKey =..    
2dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dad0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2dae0 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
2daf0 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20  Key(subKey,..   
2db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db10 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2db20 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72  .ServiceId.ToStr
2db30 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
2db40 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db60 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d        verbose)).
2db70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2db80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dba0 69 66 20 28 73 65 72 76 69 63 65 4b 65 79 20 3d  if (serviceKey =
2dbb0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbf0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2dc00 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2dc30 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
2dc40 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
2dc50 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc70 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65      key, package
2dc80 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72  .ServiceId.ToStr
2dc90 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
2dca0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dce0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd00 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2dd10 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72  per.SetValue(ser
2dd20 76 69 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a  viceKey, null,..
2dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
2dd50 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
2dd60 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2dd70 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
2dd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd90 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2dda0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2ddc0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2ddd0 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79  Value(serviceKey
2dde0 2c 20 22 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20  , "Name",..     
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de00 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
2de10 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e  rmat("{0} Design
2de20 65 72 20 53 65 72 76 69 63 65 22 2c 20 50 72 6f  er Service", Pro
2de30 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  jectName),..    
2de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de50 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2de60 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2de80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2dea0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2deb0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2dec0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ded0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2dee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2def0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2df20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2df30 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
2df40 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  veVsPackage(..  
2df50 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2df60 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2df70 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2df80 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
2df90 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2dfa0 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
2dfb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2dfc0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
2dfd0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
2dfe0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
2dff0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2e000 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2e010 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2e020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2e030 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2e040 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2e050 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e060 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
2e070 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
2e080 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e090 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2e0a0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2e0b0 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
2e0c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e0d0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2e0e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e0f0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
2e100 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
2e110 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e120 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2e130 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2e140 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
2e150 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e160 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2e170 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e180 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2e190 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
2e1a0 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
2e1b0 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2e1c0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2e1d0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2e1e0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2e1f0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2e200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e210 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2e220 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
2e230 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2e240 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e260 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
2e270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e280 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e290 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2e2a0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2e2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e2c0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2e2d0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2e2e0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
2e2f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e300 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2e310 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
2e320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e330 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2e340 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e350 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e360 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2e370 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2e380 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2e390 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2e3a0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2e3c0 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72  , "Packages", tr
2e3d0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
2e3e0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2e3f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2e410 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
2e420 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2e430 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e450 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2e460 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e480 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
2e490 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
2e4a0 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65  ey: {0}\\Package
2e4b0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
2e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4d0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
2e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2e500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e510 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2e530 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
2e540 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
2e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e560 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
2e570 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
2e580 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2e590 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
2e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5b0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2e5c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2e5d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e5e0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2e5f0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2e600 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2e610 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2e620 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2e630 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2e640 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c  , "Menus", true,
2e650 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2e660 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2e670 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e680 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
2e690 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
2e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2e6d0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2e6e0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e700 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
2e710 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
2e720 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20   {0}\\Menus",.. 
2e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e740 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
2e750 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e760 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e770 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2e790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e7a0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2e7b0 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61 6c  Helper.DeleteVal
2e7c0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
2e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
2e7e0 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  Key, package.Pac
2e7f0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
2e800 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
2e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e820 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73        throwOnMis
2e830 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
2e840 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
2e850 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2e870 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2e880 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
2e890 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2e8a0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8c0 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73    key, "Services
2e8d0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
2e8e0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2e8f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e910 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
2e920 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2e930 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e950 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2e960 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e980 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2e990 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2e9a0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65  try key: {0}\\Se
2e9b0 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20  rvices",..      
2e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9d0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
2e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ea00 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2ea10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea30 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2ea40 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  r.DeleteSubKeyTr
2ea50 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
2ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
2ea70 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72  Key, package.Ser
2ea80 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  viceId.ToString(
2ea90 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
2eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eab0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
2eac0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
2ead0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2eae0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2eaf0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2eb00 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
2eb10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2eb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb60 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2eb70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2eb80 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b  ol ProcessVsPack
2eb90 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
2eba0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2ebb0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
2ebc0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2ebd0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
2ebe0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
2ebf0 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
2ec00 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
2ec10 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
2ec20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2ec30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2ec40 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
2ec50 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
2ec60 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2ec70 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2ec80 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2ec90 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2eca0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2ecb0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2ecc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
2ecd0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
2ece0 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
2ecf0 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
2ed00 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
2ed10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2ed20 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
2ed30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2ed40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed50 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2ed60 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61  d VS callback da
2ed70 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
2ed80 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2ed90 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2eda0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2edb0 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
2edc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ede0 74 75 72 6e 20 41 64 64 56 73 50 61 63 6b 61 67  turn AddVsPackag
2edf0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2ee00 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2ee10 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b   vsVersion, pack
2ee20 61 67 65 2c 20 70 61 69 72 2e 58 2c 20 77 6f 77  age, pair.X, wow
2ee30 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  64, whatIf,..   
2ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee50 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
2ee60 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
2ee70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2ee80 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
2ee90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2eea0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
2eeb0 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a  moveVsPackage(..
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eed0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
2eee0 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c  ersion, package,
2eef0 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d   wow64, throwOnM
2ef00 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
2ef20 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
2ef30 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
2ef40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2ef50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2ef60 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
2ef70 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2ef80 20 20 20 20 20 20 20 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 2f  ////////////////
2efa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2efb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2efc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2efd0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2efe0 6e 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 45 6e  n Application En
2eff0 74 72 79 20 50 6f 69 6e 74 0d 0a 20 20 20 20 20  try Point..     
2f000 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2f010 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2f020 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2f030 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2f040 74 61 74 69 63 20 69 6e 74 20 4d 61 69 6e 28 0d  tatic int Main(.
2f050 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2f060 69 6e 67 5b 5d 20 61 72 67 73 0d 0a 20 20 20 20  ing[] args..    
2f070 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2f080 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f090 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
2f0a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f0b0 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74        Configurat
2f0c0 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ion configuratio
2f0d0 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  n = null;..     
2f0e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2f0f0 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d  g error = null;.
2f100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f110 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2f120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f150 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2f160 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
2f170 62 75 67 67 65 72 20 48 6f 6f 6b 0d 0a 20 20 20  bugger Hook..   
2f180 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2f190 28 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 47 65 74  (Environment.Get
2f1a0 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61  EnvironmentVaria
2f1b0 62 6c 65 28 22 42 72 65 61 6b 22 29 20 21 3d 20  ble("Break") != 
2f1c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2f1d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
2f1f0 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28  nsole.WriteLine(
2f200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f210 20 20 20 20 20 20 20 20 20 20 22 41 74 74 61 63            "Attac
2f220 68 20 61 20 64 65 62 75 67 67 65 72 20 74 6f 20  h a debugger to 
2f230 70 72 6f 63 65 73 73 20 7b 30 7d 20 61 6e 64 20  process {0} and 
2f240 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
2f250 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70 72               "pr
2f260 65 73 73 20 61 6e 79 20 6b 65 79 20 74 6f 20 63  ess any key to c
2f270 6f 6e 74 69 6e 75 65 2e 22 2c 0d 0a 20 20 20 20  ontinue.",..    
2f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f290 20 20 20 20 50 72 6f 63 65 73 73 2e 47 65 74 43      Process.GetC
2f2a0 75 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29 2e  urrentProcess().
2f2b0 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Id);....        
2f2c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
2f2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f2e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f300 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 28  Console.ReadKey(
2f310 74 72 75 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  true); /* throw 
2f320 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
2f330 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2f350 61 74 63 68 20 28 49 6e 76 61 6c 69 64 4f 70 65  atch (InvalidOpe
2f360 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 29  rationException)
2f370 20 2f 2f 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64   // Console.Read
2f380 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
2f390 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3b0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
2f3c0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
2f3d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3f0 20 44 65 62 75 67 67 65 72 2e 42 72 65 61 6b 28   Debugger.Break(
2f400 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2f410 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2f420 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2f430 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
2f440 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2f450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f480 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2f490 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2f4a0 43 6f 6d 6d 61 6e 64 20 4c 69 6e 65 20 50 72 6f  Command Line Pro
2f4b0 63 65 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  cessing..       
2f4c0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 43 6f           if (!Co
2f4d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 46 72 6f 6d  nfiguration.From
2f4e0 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
2f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2f500 72 67 73 2c 20 74 72 75 65 2c 20 72 65 66 20 63  rgs, true, ref c
2f510 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65  onfiguration, re
2f520 66 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20  f error) ||..   
2f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f540 20 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !Configuration.
2f550 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20  Process(..      
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f570 20 20 61 72 67 73 2c 20 63 6f 6e 66 69 67 75 72    args, configur
2f580 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66  ation, true, ref
2f590 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20 20   error) ||..    
2f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5b0 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43  !Configuration.C
2f5c0 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73 69  heckRuntimeVersi
2f5d0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
2f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2f5f0 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72 75 65  figuration, true
2f600 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
2f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2f620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f630 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
2f640 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65  howMessage(Trace
2f650 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
2f660 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f670 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2f680 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2f690 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73  allback, thisAss
2f6a0 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
2f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6c0 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65  error, traceCate
2f6d0 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78  gory, MessageBox
2f6e0 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20  Buttons.OK,..   
2f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f700 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
2f710 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
2f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f730 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2f740 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2f750 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
2f760 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
2f770 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2f780 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2f790 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c  eCallback, "Fail
2f7a0 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ure.",..        
2f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7c0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2f7d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f7e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
2f7f0 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
2f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f810 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2f820 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2f830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f840 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2f850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f890 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2f8a0 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
2f8b0 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
2f8c0 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
2f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2f8e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
2f8f0 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  If, false, false
2f900 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2f910 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f920 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
2f930 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  on .NET Framewor
2f940 6b 20 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69  k / Visual Studi
2f950 6f 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  o Data..        
2f960 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
2f970 61 67 65 20 70 61 63 6b 61 67 65 20 3d 20 6e 75  age package = nu
2f980 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
2f990 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
2f9a0 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  rkList framework
2f9b0 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  List = null;..  
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9d0 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 20    VsList vsList 
2f9e0 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
2f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2fa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa50 20 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61    InitializeVsPa
2fa60 63 6b 61 67 65 28 72 65 66 20 70 61 63 6b 61 67  ckage(ref packag
2fa70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2fa80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fac0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2fae0 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72  itializeFramewor
2faf0 6b 4c 69 73 74 28 72 65 67 69 73 74 72 79 2e 4c  kList(registry.L
2fb00 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a 20 20  ocalMachine,..  
2fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
2fb30 69 6f 6e 2c 20 72 65 66 20 66 72 61 6d 65 77 6f  ion, ref framewo
2fb40 72 6b 4c 69 73 74 29 3b 0d 0a 0d 0a 20 20 20 20  rkList);....    
2fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb60 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74  InitializeVsList
2fb70 28 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d  (registry.LocalM
2fb80 61 63 68 69 6e 65 2c 20 63 6f 6e 66 69 67 75 72  achine, configur
2fb90 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
2fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbb0 72 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20 20  ref vsList);..  
2fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbd0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2fc30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2fc40 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43         #region C
2fc50 6f 72 65 20 41 73 73 65 6d 62 6c 79 20 4e 61 6d  ore Assembly Nam
2fc60 65 20 43 68 65 63 6b 0d 0a 20 20 20 20 20 20 20  e Check..       
2fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2fc80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fc90 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f       // NOTE: Do
2fca0 20 74 68 69 73 20 66 69 72 73 74 2c 20 62 65 66   this first, bef
2fcb0 6f 72 65 20 6d 61 6b 69 6e 67 20 61 6e 79 20 63  ore making any c
2fcc0 68 61 6e 67 65 73 20 74 6f 20 74 68 65 0d 0a 20  hanges to the.. 
2fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fce0 20 20 20 2f 2f 20 20 20 20 20 20 20 73 79 73 74     //       syst
2fcf0 65 6d 2c 20 62 65 63 61 75 73 65 20 69 74 20 77  em, because it w
2fd00 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 65 78 63  ill throw an exc
2fd10 65 70 74 69 6f 6e 20 69 66 20 74 68 65 0d 0a 20  eption if the.. 
2fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd30 20 20 20 2f 2f 20 20 20 20 20 20 20 66 69 6c 65     //       file
2fd40 20 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 72   name does not r
2fd50 65 70 72 65 73 65 6e 74 20 61 20 76 61 6c 69 64  epresent a valid
2fd60 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20   managed..      
2fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2fd80 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e         assembly.
2fd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fda0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
2fdc0 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
2fdd0 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62  blyName = Assemb
2fde0 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62  lyName.GetAssemb
2fdf0 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lyName(..       
2fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe10 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   configuration.C
2fe20 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  oreFileName); /*
2fe30 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
2fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
2fe50 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe70 20 2f 2f 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 0d 0a 0d 0a  ////////////....
2feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fec0 20 20 20 20 23 72 65 67 69 6f 6e 20 53 68 61 72      #region Shar
2fed0 65 64 20 43 6c 69 65 6e 74 20 44 61 74 61 20 43  ed Client Data C
2fee0 72 65 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  reation..       
2fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
2ff00 65 63 74 20 64 69 72 65 63 74 6f 72 79 44 61 74  ect directoryDat
2ff10 61 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72 3c  a = new AnyPair<
2ff20 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a  string, bool>(..
2ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff40 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
2ff50 61 74 69 6f 6e 2e 44 69 72 65 63 74 6f 72 79 2c  ation.Directory,
2ff60 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49   configuration.I
2ff70 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  nstall);....    
2ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff90 6f 62 6a 65 63 74 20 66 69 6c 65 4e 61 6d 65 44  object fileNameD
2ffa0 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61 69  ata = new AnyPai
2ffb0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28  r<string, bool>(
2ffc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ffd0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
2ffe0 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72  uration.Designer
2fff0 46 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e 66 69 67  FileName, config
30000 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29  uration.Install)
30010 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30020 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
30030 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
30040 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
30050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30080 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
30090 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
300a0 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20 49 6e 73  ion .NET GAC Ins
300b0 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a 20 20 20  tall/Remove..   
300c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300d0 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
300e0 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74  on.HasFlags(Inst
300f0 61 6c 6c 46 6c 61 67 73 2e 47 41 43 2c 20 74 72  allFlags.GAC, tr
30100 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
30110 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30130 20 20 20 20 20 50 75 62 6c 69 73 68 20 70 75 62       Publish pub
30140 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  lish = null;....
30150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30160 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
30170 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
30180 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
30190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301a0 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20 50 75  publish = new Pu
301b0 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 20 20  blish();....    
301c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301d0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
301e0 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a  ation.Install)..
301f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30200 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30220 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
30230 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
30240 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30260 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a     /* throw */..
30270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30290 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61  publish.GacInsta
302a0 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ll(configuration
302b0 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .CoreFileName);.
302c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
302d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
302e0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
302f0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
30300 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
30310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
30330 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
30340 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
30350 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
30360 20 20 20 20 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 22 47 61 63              "Gac
30380 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c  Install: assembl
30390 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20  yPath = {0}",.. 
303a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
303c0 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67  orDisplay(config
303d0 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
303e0 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
303f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30400 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30410 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
30420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30430 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
30440 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
30450 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
30460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30470 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d      /* throw */.
30480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304a0 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74   publish.GacInst
304b0 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  all(configuratio
304c0 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  n.LinqFileName);
304d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
304e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304f0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
30500 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
30510 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
30520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
30540 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
30550 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
30560 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
30570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30580 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61               "Ga
30590 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62  cInstall: assemb
305a0 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
305b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305d0 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
305e0 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c  guration.LinqFil
305f0 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
30600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30610 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
30620 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
30630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30640 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
30650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
30660 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
30670 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30690 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
306a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
306b0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
306c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306d0 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
306e0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
306f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30700 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52      publish.GacR
30710 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74  emove(configurat
30720 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.LinqFileName
30730 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30750 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
30760 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
30770 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
30780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307a0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
307b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
307c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
307d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
307f0 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d  GacRemove: assem
30800 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
30810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30830 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
30840 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69  iguration.LinqFi
30850 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30870 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
30880 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
30890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
308b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
308c0 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
308d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308e0 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a        /* throw *
308f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
30900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30910 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65     publish.GacRe
30920 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69  move(configurati
30930 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
30940 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30960 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
30970 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
30980 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
30990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309b0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
309c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
309d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
309e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
30a00 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62  acRemove: assemb
30a10 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
30a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a40 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
30a50 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
30a60 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
30a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a80 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
30a90 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
30aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ab0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
30ac0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
30ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ae0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
30af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
30b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
30b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30b50 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
30b60 45 54 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  ET AssemblyFolde
30b70 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
30b80 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
30b90 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
30ba0 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
30bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30bc0 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 73   InstallFlags.As
30bd0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20 74  semblyFolders, t
30be0 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
30bf0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c10 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61        if (!ForEa
30c20 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  chFrameworkRegis
30c30 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20  try(registry,.. 
30c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
30c60 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72  rameworkList, Pr
30c70 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
30c80 64 65 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ders,..         
30c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ca0 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
30cb0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
30cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cd0 20 20 20 20 20 20 20 4e 65 74 46 78 49 73 33 32         NetFxIs32
30ce0 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69  BitOnly || confi
30cf0 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d  guration.Wow64,.
30d00 0a 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 20 20 20 20 20 20                  
30d20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54   configuration.T
30d30 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
30d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
30d70 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74  atIf, configurat
30d80 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20  ion.Verbose,..  
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 20 20 20 72 65                re
30db0 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
30dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30dd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30df0 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
30e00 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
30e10 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
30e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
30e40 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
30e50 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
30e60 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
30e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e80 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
30e90 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
30ea0 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
30eb0 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
30ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ed0 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
30ee0 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
30ef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
30f10 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
30f20 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
30f30 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
30f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f60 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
30f70 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22  traceCallback, "
30f80 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20  Failure.",..    
30f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fa0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
30fb0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
30fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30fe0 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
30ff0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
31000 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
31010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31020 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
31030 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
31040 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
31050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
31060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31090 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
310b0 72 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62 50 72  region .NET DbPr
310c0 6f 76 69 64 65 72 46 61 63 74 6f 72 79 0d 0a 20  oviderFactory.. 
310d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310e0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
310f0 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a  tion.HasFlags(..
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31110 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
31120 61 6c 6c 46 6c 61 67 73 2e 44 62 50 72 6f 76 69  allFlags.DbProvi
31130 64 65 72 46 61 63 74 6f 72 79 2c 20 74 72 75 65  derFactory, true
31140 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
31150 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31170 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 20 3d 20     bool saved = 
31180 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
31190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311a0 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 46 72    if (!ForEachFr
311b0 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 72 65  ameworkConfig(re
311c0 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
311d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311e0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
311f0 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 44  rkList, ProcessD
31200 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
31210 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31230 20 20 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65     InvariantName
31240 2c 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 2c 20  , ProviderName, 
31250 44 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  Description,..  
31260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 61                Fa
31280 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 2c 20 61  ctoryTypeName, a
31290 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 64 69 72  ssemblyName, dir
312a0 65 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20 20 20  ectoryData,..   
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 4e 65 74               Net
312d0 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c  FxIs32BitOnly ||
312e0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57   configuration.W
312f0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
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 63 6f 6e 66 69 67 75 72 61         configura
31320 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73  tion.ThrowOnMiss
31330 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
31340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31350 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
31360 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66  ion.WhatIf, conf
31370 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
31380 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
31390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313a0 20 20 20 20 72 65 66 20 73 61 76 65 64 2c 20 72      ref saved, r
313b0 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
313c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
313e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313f0 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77     TraceOps.Show
31400 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69  Message(TracePri
31410 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
31420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31440 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
31450 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68  raceCallback, th
31460 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20  isAssembly,..   
31470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31480 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
31490 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  or, traceCategor
314a0 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74  y, MessageBoxBut
314b0 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20  tons.OK,..      
314c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314d0 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67            Messag
314e0 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b  eBoxIcon.Error);
314f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31510 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
31520 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
31530 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
31540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31560 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
31570 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
31580 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20  "Failure.",..   
31590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
315b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
315c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
315e0 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45  rn 1; /* FAILURE
315f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
31600 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31620 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
31630 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
31640 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
31650 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
31660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31690 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
316a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316b0 23 72 65 67 69 6f 6e 20 56 53 20 50 61 63 6b 61  #region VS Packa
316c0 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ge..            
316d0 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
316e0 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
316f0 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
31700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31710 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73   InstallFlags.Vs
31720 50 61 63 6b 61 67 65 2c 20 74 72 75 65 29 29 0d  Package, true)).
31730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31740 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31760 69 66 20 28 21 46 6f 72 45 61 63 68 56 73 56 65  if (!ForEachVsVe
31770 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 72 65  rsionRegistry(re
31780 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
31790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317a0 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2c           vsList,
317b0 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61 67   ProcessVsPackag
317c0 65 2c 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  e, package,..   
317d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317e0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
317f0 65 4e 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20 20  eNameData,..    
31800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31810 20 20 20 20 20 20 20 20 20 20 20 20 56 73 49 73              VsIs
31820 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e  32BitOnly || con
31830 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34  figuration.Wow64
31840 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31860 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
31870 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c  .ThrowOnMissing,
31880 0d 0a 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 20 20 20 20 20                  
318a0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
318b0 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72  WhatIf, configur
318c0 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a  ation.Verbose,..
318d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318f0 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
31900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31910 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31930 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f      TraceOps.Sho
31940 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72  wMessage(TracePr
31950 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
31960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31980 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
31990 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74  traceCallback, t
319a0 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  hisAssembly,..  
319b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
319d0 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ror, traceCatego
319e0 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75  ry, MessageBoxBu
319f0 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20  ttons.OK,..     
31a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a10 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
31a20 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29  geBoxIcon.Error)
31a30 3b 0d 0a 0d 0a 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 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
31a60 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
31a70 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
31a80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31aa0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
31ab0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
31ac0 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20   "Failure.",..  
31ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
31af0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
31b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
31b20 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52  urn 1; /* FAILUR
31b30 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  E */..          
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
31b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b60 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
31b70 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
31b80 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
31b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
31ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
31be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bf0 20 23 72 65 67 69 6f 6e 20 56 53 20 44 61 74 61   #region VS Data
31c00 53 6f 75 72 63 65 0d 0a 20 20 20 20 20 20 20 20  Source..        
31c10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
31c20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
31c30 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20  sFlags(..       
31c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c50 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
31c60 73 2e 56 73 44 61 74 61 53 6f 75 72 63 65 2c 20  s.VsDataSource, 
31c70 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
31c80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ca0 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45         if (!ForE
31cb0 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
31cc0 73 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a  stry(registry,..
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cf0 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56  vsList, ProcessV
31d00 73 44 61 74 61 53 6f 75 72 63 65 2c 20 70 61 63  sDataSource, pac
31d10 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
31d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d30 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 44         fileNameD
31d40 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d60 20 20 20 20 20 20 56 73 49 73 33 32 42 69 74 4f        VsIs32BitO
31d70 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61  nly || configura
31d80 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20  tion.Wow64,..   
31d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31da0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
31db0 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77  figuration.Throw
31dc0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
31dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31de0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
31df0 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
31e00 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
31e10 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  Verbose,..      
31e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e30 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
31e40 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
31e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
31e80 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
31e90 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ge(TracePriority
31ea0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ec0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
31ed0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
31ee0 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73  allback, thisAss
31ef0 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
31f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f10 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74          error, t
31f20 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
31f30 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
31f40 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
31f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f60 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
31f70 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
31f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f90 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
31fa0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
31fb0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
31fc0 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
31fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
31ff0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
32000 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c  eCallback, "Fail
32010 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ure.",..        
32020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32030 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
32040 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
32050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32060 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
32070 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
32080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32090 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
320a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
320b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
320c0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
320d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
320e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
320f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32120 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
32130 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
32140 6f 6e 20 56 53 20 44 61 74 61 50 72 6f 76 69 64  on VS DataProvid
32150 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  er..            
32160 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
32170 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
32180 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
32190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321a0 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73   InstallFlags.Vs
321b0 44 61 74 61 50 72 6f 76 69 64 65 72 2c 20 74 72  DataProvider, tr
321c0 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
321d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
321e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321f0 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63       if (!ForEac
32200 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74  hVsVersionRegist
32210 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20 20  ry(registry,..  
32220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
32240 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56 73 44  List, ProcessVsD
32250 61 74 61 50 72 6f 76 69 64 65 72 2c 20 70 61 63  ataProvider, pac
32260 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
32270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32280 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 44         fileNameD
32290 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322b0 20 20 20 20 20 20 56 73 49 73 33 32 42 69 74 4f        VsIs32BitO
322c0 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61  nly || configura
322d0 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20  tion.Wow64,..   
322e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
32300 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77  figuration.Throw
32310 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
32320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32330 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
32340 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
32350 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
32360 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  Verbose,..      
32370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32380 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
32390 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
323a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
323b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
323c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
323d0 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
323e0 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ge(TracePriority
323f0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
32400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32410 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
32420 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
32430 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73  allback, thisAss
32440 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
32450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32460 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74          error, t
32470 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
32480 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
32490 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
324a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324b0 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
324c0 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
324d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324e0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
324f0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
32500 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
32510 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
32520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32530 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
32540 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
32550 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c  eCallback, "Fail
32560 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ure.",..        
32570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32580 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
32590 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
325a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
325c0 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
325d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
325f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32610 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
32620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32630 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
32640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32670 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
32680 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
32690 6f 6e 20 4c 6f 67 20 53 75 6d 6d 61 72 79 0d 0a  on Log Summary..
326a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326b0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
326c0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
326d0 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
326e0 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
326f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
32700 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
32710 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
32720 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
32730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32740 20 20 20 20 22 73 75 62 4b 65 79 73 43 72 65 61      "subKeysCrea
32750 74 65 64 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  ted = {0}, subKe
32760 79 73 44 65 6c 65 74 65 64 20 3d 20 7b 31 7d 2c  ysDeleted = {1},
32770 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b                "k
32790 65 79 56 61 6c 75 65 73 53 65 74 20 3d 20 7b 32  eyValuesSet = {2
327a0 7d 2c 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65  }, keyValuesDele
327b0 74 65 64 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20 20  ted = {3}",..   
327c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327d0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
327e0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
327f0 75 62 4b 65 79 73 43 72 65 61 74 65 64 29 2c 0d  ubKeysCreated),.
32800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32810 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
32820 6c 61 79 28 52 65 67 69 73 74 72 79 48 65 6c 70  lay(RegistryHelp
32830 65 72 2e 53 75 62 4b 65 79 73 44 65 6c 65 74 65  er.SubKeysDelete
32840 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d),..           
32850 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
32860 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79  Display(Registry
32870 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73  Helper.KeyValues
32880 53 65 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Set),..         
32890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
328a0 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69 73 74  orDisplay(Regist
328b0 72 79 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75  ryHelper.KeyValu
328c0 65 73 44 65 6c 65 74 65 64 29 29 2c 0d 0a 20 20  esDeleted)),..  
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
328f0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
32900 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
32910 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
32920 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
32930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32960 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
32970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32980 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
32990 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
329a0 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
329b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
329c0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
329d0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
329e0 6c 6c 62 61 63 6b 2c 20 22 53 75 63 63 65 73 73  llback, "Success
329f0 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
32a00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
32a10 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
32a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a30 20 20 20 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a      return 0; /*
32a40 20 53 55 43 43 45 53 53 20 2a 2f 0d 0a 20 20 20   SUCCESS */..   
32a50 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32a60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
32a70 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
32a80 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
32a90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
32ab0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
32ac0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
32ad0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
32ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32af0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
32b00 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
32b10 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
32b20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32b30 20 20 20 20 20 20 74 68 72 6f 77 3b 0d 0a 20 20        throw;..  
32b40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
32b50 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
32b60 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
32b70 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
32b80 6e 0d 0a 7d 0d 0a                                n..}..