System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 5c28906a08f6c9a8e7dc1bd9b7f55595ab778b71:


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 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73  m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67  ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73   System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69  ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63  n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65  Lite..{..    #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65  gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72  gates..    inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69  nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20   message, /* in 
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69  ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  n */..    );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 20 20  ing invariant,  
03d0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20  scription,      
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69  semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
04a0: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20  ring directory, 
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  /..        objec
04d0: 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  t clientData,   
04e0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
04f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
0500: 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20  User,           
0510: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0520: 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0540: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0550: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
0560: 73 73 69 6e 67 2c 20 20 20 20 20 20 20 2f 2a 20  ssing,       /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0580: 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20  ool whatIf,     
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
05b0: 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20   verbose,       
05c0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
05d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
05e0: 6c 20 73 61 76 65 64 2c 20 20 20 20 20 20 20 20  l saved,        
05f0: 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
0600: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
0610: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
0620: 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20    /* out */..   
0630: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f   );....    /////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0680: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
0690: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
06a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65  bool FrameworkRe
06b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
06c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
06d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
06e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69  ey rootKey, /* i
06f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0700: 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
0710: 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  me,             
0720: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0730: 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
0740: 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 20 20 20  workVersion,    
0750: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0760: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
0770: 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 20 20 20  latformName,    
0780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0790: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
07a0: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20  ing directory,  
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
07d0: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
07e0: 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 20  ata,            
07f0: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
0810: 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  ser,            
0820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0830: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0840: 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20   wow64,         
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0860: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0870: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
0880: 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20  sing,           
0890: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
08a0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
08b0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f,              
08c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
08d0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
08e0: 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20  verbose,        
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0900: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0910: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
0940: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f    );....    ////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69  ///////....    i
09a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
09b0: 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64   bool VisualStud
09c0: 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  ioRegistryCallba
09d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
09e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
09f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0a00: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0a10: 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
0a20: 69 6f 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20  ion,            
0a30: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0a40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
0a50: 66 66 69 78 2c 20 20 20 20 20 20 20 20 20 20 20  ffix,           
0a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c            /* in,
0a70: 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20   optional */..  
0a80: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
0a90: 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
0aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0ab0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0ac0: 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20 20 20  g directory,    
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0ae0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0af0: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
0b00: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
0b10: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0b20: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
0b30: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
0b40: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
0b50: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
0b60: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20  ow64,           
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0b80: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0b90: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0ba0: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
0bb0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0bc0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0be0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0bf0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
0c00: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20  rbose,          
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0c20: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  n */..        re
0c30: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
0c60: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
0c70: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
0cd0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d  gion Public Enum
0ce0: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46  erations..    [F
0cf0: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62  lags()]..    pub
0d00: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c  lic enum Install
0d10: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Flags..    {..  
0d20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
0d30: 72 6d 61 6c 20 46 6c 61 67 73 0d 0a 20 20 20 20  rmal Flags..    
0d40: 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d      None = 0x0,.
0d50: 0a 20 20 20 20 20 20 20 20 47 6c 6f 62 61 6c 41  .        GlobalA
0d60: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 30  ssemblyCache = 0
0d70: 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41 73 73  x1,..        Ass
0d80: 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d 20 30  emblyFolders = 0
0d90: 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44 62 50  x2,..        DbP
0da0: 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 20 3d  roviderFactory =
0db0: 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 56   0x4,..        V
0dc0: 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38 2c 0d  sPackage = 0x8,.
0dd0: 0a 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61  .        VsPacka
0de0: 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
0df0: 43 61 63 68 65 20 3d 20 30 78 31 30 2c 0d 0a 20  Cache = 0x10,.. 
0e00: 20 20 20 20 20 20 20 56 73 44 61 74 61 53 6f 75         VsDataSou
0e10: 72 63 65 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20  rce = 0x20,..   
0e20: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
0e30: 64 65 72 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20  der = 0x40,..   
0e40: 20 20 20 20 20 56 73 44 65 76 45 6e 76 53 65 74       VsDevEnvSet
0e50: 75 70 20 3d 20 30 78 38 30 2c 0d 0a 20 20 20 20  up = 0x80,..    
0e60: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0e70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
0e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
0ed0: 67 69 6f 6e 20 43 6f 6d 70 6f 73 69 74 65 20 46  gion Composite F
0ee0: 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 46 72  lags..        Fr
0ef0: 61 6d 65 77 6f 72 6b 20 3d 20 47 6c 6f 62 61 6c  amework = Global
0f00: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 20  AssemblyCache | 
0f10: 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20  AssemblyFolders 
0f20: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
0f30: 20 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65         DbProvide
0f40: 72 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a 20 20 20  rFactory,....   
0f50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0fa0: 20 20 20 20 20 20 20 20 56 73 20 3d 20 56 73 50          Vs = VsP
0fb0: 61 63 6b 61 67 65 20 7c 20 56 73 50 61 63 6b 61  ackage | VsPacka
0fc0: 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
0fd0: 43 61 63 68 65 20 7c 20 56 73 44 61 74 61 53 6f  Cache | VsDataSo
0fe0: 75 72 63 65 20 7c 0d 0a 20 20 20 20 20 20 20 20  urce |..        
0ff0: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
1000: 64 65 72 20 7c 20 56 73 44 65 76 45 6e 76 53 65  der | VsDevEnvSe
1010: 74 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tup,....        
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1070: 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77 6f     All = Framewo
1080: 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20 20 20  rk | Vs,....    
1090: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
10e0: 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65 70 74         AllExcept
10f0: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
1100: 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 28 47 6c  che = All & ~(Gl
1110: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
1120: 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e |..           
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1140: 20 20 20 20 20 20 20 20 20 20 20 20 56 73 50 61              VsPa
1150: 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d  ckageGlobalAssem
1160: 62 6c 79 43 61 63 68 65 29 2c 0d 0a 20 20 20 20  blyCache),..    
1170: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1180: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 65 66  /....        Def
11e0: 61 75 6c 74 20 3d 20 41 6c 6c 0d 0a 20 20 20 20  ault = All..    
11f0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61  ////....    [Fla
1250: 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69  gs()]..    publi
1260: 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69 6f  c enum TracePrio
1270: 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  rity..    {..   
1280: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
1290: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
12a0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
12b0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
12c0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
12d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
12e0: 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a 20 20 20  mLow = 0x8,..   
12f0: 20 20 20 20 20 4d 65 64 69 75 6d 20 3d 20 30 78       Medium = 0x
1300: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  10,..        Med
1310: 69 75 6d 48 69 67 68 20 3d 20 30 78 32 30 2c 0d  iumHigh = 0x20,.
1320: 0a 20 20 20 20 20 20 20 20 48 69 67 68 20 3d 20  .        High = 
1330: 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x40,..        H
1340: 69 67 68 65 72 20 3d 20 30 78 38 30 2c 0d 0a 20  igher = 0x80,.. 
1350: 20 20 20 20 20 20 20 48 69 67 68 65 73 74 20 3d         Highest =
1360: 20 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20   0x100,..       
1370: 20 44 65 66 61 75 6c 74 20 3d 20 4d 65 64 69 75   Default = Mediu
1380: 6d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  m..    }..    #e
1390: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
13f0: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 73 74 61     #region Insta
1400: 6c 6c 65 72 20 43 6c 61 73 73 0d 0a 23 69 66 20  ller Class..#if 
1410: 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35  NET_40 || NET_45
1420: 20 7c 7c 20 4e 45 54 5f 34 35 31 0d 0a 20 20 20   || NET_451..   
1430: 20 5b 53 65 63 75 72 69 74 79 43 72 69 74 69 63   [SecurityCritic
1440: 61 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20 20  al()]..#else..  
1450: 20 20 5b 53 65 63 75 72 69 74 79 50 65 72 6d 69    [SecurityPermi
1460: 73 73 69 6f 6e 28 53 65 63 75 72 69 74 79 41 63  ssion(SecurityAc
1470: 74 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64 2c  tion.LinkDemand,
1480: 20 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20 3d   UnmanagedCode =
1490: 20 74 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66 0d   true)]..#endif.
14a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
14b0: 61 74 69 63 20 63 6c 61 73 73 20 49 6e 73 74 61  atic class Insta
14c0: 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ller..    {..   
14d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 6e 73       #region Uns
14e0: 61 66 65 20 4e 61 74 69 76 65 20 4d 65 74 68 6f  afe Native Metho
14f0: 64 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ds Class..      
1500: 20 20 5b 53 75 70 70 72 65 73 73 55 6e 6d 61 6e    [SuppressUnman
1510: 61 67 65 64 43 6f 64 65 53 65 63 75 72 69 74 79  agedCodeSecurity
1520: 28 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ()]..        pri
1530: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
1540: 73 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  s UnsafeNativeMe
1550: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 7b  thods..        {
1560: 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
1570: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1580: 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e 33 32 20  on Native Win32 
1590: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
15a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
15b0: 6f 6e 73 74 20 69 6e 74 20 4d 41 58 5f 50 41 54  onst int MAX_PAT
15c0: 48 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20 20  H = 260;....    
15d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1620: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1630: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 43 53 49  te const int CSI
1640: 44 4c 5f 53 59 53 54 45 4d 58 38 36 20 3d 20 30  DL_SYSTEMX86 = 0
1650: 78 30 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20 20  x0029;....      
1660: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
16b0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
16c0: 20 63 6f 6e 73 74 20 69 6e 74 20 53 48 47 46 50   const int SHGFP
16d0: 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 20 3d 20  _TYPE_CURRENT = 
16e0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
16f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1740: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1750: 73 74 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30 3b  st int S_OK = 0;
1760: 20 2f 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d 0a   /* HRESULT */..
1770: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1780: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1790: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17e0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
17f0: 20 4e 61 74 69 76 65 20 57 69 6e 64 6f 77 73 20   Native Windows 
1800: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
1810: 20 20 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 28       [DllImport(
1820: 22 73 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c 0d  "shfolder.dll",.
1830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1840: 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69   CallingConventi
1850: 6f 6e 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e 76  on = CallingConv
1860: 65 6e 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d 0a  ention.Winapi,..
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 43 68 61 72 53 65 74 20 3d 20 43 68 61 72 53 65  CharSet = CharSe
1890: 74 2e 41 75 74 6f 2c 20 42 65 73 74 46 69 74 4d  t.Auto, BestFitM
18a0: 61 70 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c 0d  apping = false,.
18b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c0: 20 54 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61 62   ThrowOnUnmappab
18d0: 6c 65 43 68 61 72 20 3d 20 74 72 75 65 2c 20 53  leChar = true, S
18e0: 65 74 4c 61 73 74 45 72 72 6f 72 20 3d 20 74 72  etLastError = tr
18f0: 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ue)]..          
1900: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1910: 20 65 78 74 65 72 6e 20 69 6e 74 20 53 48 47 65   extern int SHGe
1920: 74 46 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20 20  tFolderPath(..  
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
1940: 74 50 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c 20  tPtr hWndOwner, 
1950: 69 6e 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e 74  int nFolder, Int
1960: 50 74 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e 74  Ptr hToken, uint
1970: 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20   flags,..       
1980: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1990: 62 75 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41 58  buffer /* >= MAX
19a0: 5f 50 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20 20  _PATH */);..    
19b0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
19c0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
19d0: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1a30: 6c 69 63 20 57 72 61 70 70 65 72 20 4d 65 74 68  lic Wrapper Meth
1a40: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
1a50: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
1a60: 74 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44  tring GetSystemD
1a70: 69 72 65 63 74 6f 72 79 28 29 0d 0a 20 20 20 20  irectory()..    
1a80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a90: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1aa0: 72 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74  r buffer = IntPt
1ab0: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
1ac0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1af0: 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20         buffer = 
1b00: 4d 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f 54  Marshal.AllocCoT
1b10: 61 73 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20 20  askMem(..       
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b30: 20 73 69 7a 65 6f 66 28 63 68 61 72 29 20 2a 20   sizeof(char) * 
1b40: 28 4d 41 58 5f 50 41 54 48 20 2b 20 31 29 29 3b  (MAX_PATH + 1));
1b50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b60: 20 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66          if (buff
1b70: 65 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  er != IntPtr.Zer
1b80: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
1b90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb0: 20 20 20 69 66 20 28 53 48 47 65 74 46 6f 6c 64     if (SHGetFold
1bc0: 65 72 50 61 74 68 28 49 6e 74 50 74 72 2e 5a 65  erPath(IntPtr.Ze
1bd0: 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro,..           
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 20 20 20 20 20 43 53 49 44 4c 5f 53 59 53 54 45       CSIDL_SYSTE
1c00: 4d 58 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65 72  MX86, IntPtr.Zer
1c10: 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o,..            
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 20 20 20 20 53 48 47 46 50 5f 54 59 50 45 5f 43      SHGFP_TYPE_C
1c40: 55 52 52 45 4e 54 2c 20 62 75 66 66 65 72 29 20  URRENT, buffer) 
1c50: 3d 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20 20  == S_OK)..      
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c90: 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
1ca0: 50 74 72 54 6f 53 74 72 69 6e 67 41 75 74 6f 28  PtrToStringAuto(
1cb0: 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20  buffer);..      
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1ce0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1d10: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1d20: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1d30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d60: 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20 74     // TODO: Is t
1d70: 68 69 73 20 74 68 65 20 72 69 67 68 74 20 65 72  his the right er
1d80: 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f 6c  ror handling sol
1d90: 75 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ution..         
1da0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1db0: 20 20 20 20 74 6f 20 75 73 65 20 61 74 20 74 68      to use at th
1dc0: 69 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20 20  is point?..     
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1de0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1df0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1e00: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1e10: 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1e20: 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e40: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1e50: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1e60: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e80: 20 20 20 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f         "Could no
1e90: 74 20 67 65 74 20 73 79 73 74 65 6d 20 64 69 72  t get system dir
1ea0: 65 63 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65 29  ectory: {0}", e)
1eb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ec0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1ed0: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef0: 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20    throw;..      
1f00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
1f20: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1f30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f50: 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74  (buffer != IntPt
1f60: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f90: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
1fa0: 46 72 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62 75  FreeCoTaskMem(bu
1fb0: 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffer);..        
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd0: 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e  buffer = IntPtr.
1fe0: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
1ff0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2010: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2020: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
2030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2040: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2050: 72 65 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a  region..#endif..
2060: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2070: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2080: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
20e0: 69 6f 6e 20 50 72 69 76 61 74 65 20 48 65 6c 70  ion Private Help
20f0: 65 72 20 43 6c 61 73 73 65 73 0d 0a 20 20 20 20  er Classes..    
2100: 20 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79 50      #region AnyP
2110: 61 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  air Class..     
2120: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
2130: 64 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72 3c  d class AnyPair<
2140: 54 31 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20 20  T1, T2>..       
2150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2160: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
2170: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
2180: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2190: 20 20 20 20 20 20 20 20 20 2f 2f 20 57 41 52 4e           // WARN
21a0: 49 4e 47 3a 20 54 68 69 73 20 63 6f 6e 73 74 72  ING: This constr
21b0: 75 63 74 6f 72 20 70 72 6f 64 75 63 65 73 20 61  uctor produces a
21c0: 6e 20 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d 70  n immutable "emp
21d0: 74 79 22 20 70 61 69 72 0d 0a 20 20 20 20 20 20  ty" pair..      
21e0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
21f0: 20 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20    object...     
2200: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2210: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e         public An
2220: 79 50 61 69 72 28 29 0d 0a 20 20 20 20 20 20 20  yPair()..       
2230: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
2240: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2260: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
2270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2280: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22e0: 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72    public AnyPair
22f0: 28 54 31 20 78 29 0d 0a 20 20 20 20 20 20 20 20  (T1 x)..        
2300: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29          : this()
2310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2330: 20 74 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20 20   this.x = x;..  
2340: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2350: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23b0: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20  blic AnyPair(T1 
23c0: 78 2c 20 54 32 20 79 29 0d 0a 20 20 20 20 20 20  x, T2 y)..      
23d0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
23e0: 28 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  (x)..           
23f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2400: 20 20 20 20 74 68 69 73 2e 79 20 3d 20 79 3b 0d      this.y = y;.
2410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2420: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2430: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2440: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2490: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
24a0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
24b0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
24c0: 70 72 69 76 61 74 65 20 54 31 20 78 3b 0d 0a 20  private T1 x;.. 
24d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
24e0: 63 20 54 31 20 58 0d 0a 20 20 20 20 20 20 20 20  c T1 X..        
24f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2500: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2510: 75 72 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20 20  urn x; }..      
2520: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2530: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2580: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2590: 65 20 54 32 20 79 3b 0d 0a 20 20 20 20 20 20 20  e T2 y;..       
25a0: 20 20 20 20 20 70 75 62 6c 69 63 20 54 32 20 59       public T2 Y
25b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
25c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 79 3b   get { return y;
25e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2600: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
2610: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2620: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2630: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2680: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54         #region T
2690: 72 61 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a 20  raceOps Class.. 
26a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
26b0: 74 61 74 69 63 20 63 6c 61 73 73 20 54 72 61 63  tatic class Trac
26c0: 65 4f 70 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  eOps..        {.
26d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
26e0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
26f0: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
2700: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
2710: 74 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74  t string Default
2720: 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 22 23  DebugFormat = "#
2730: 7b 30 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b  {0:000} @ {1}: {
2740: 32 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  2}";..          
2750: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2760: 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72  string DefaultTr
2770: 61 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30  aceFormat = "#{0
2780: 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d  :000} @ {1}: {2}
2790: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
27a0: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
27b0: 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31 44 61  string Iso8601Da
27c0: 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d  teTimeOutputForm
27d0: 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  at =..          
27e0: 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d 2e 64        "yyyy.MM.d
27f0: 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 66 66  dTHH:mm:ss.fffff
2800: 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ff";..          
2810: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2870: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2880: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
2890: 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
28a0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28b0: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
28c0: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
28d0: 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ect();..        
28e0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
28f0: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65 62 75  ic long nextDebu
2900: 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gId;..          
2910: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2920: 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63 65 49   long nextTraceI
2930: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
2940: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 49  private static I
2950: 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e  List<TraceListen
2960: 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65 6e 65  er> debugListene
2970: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
2980: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2990: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
29a0: 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 54 72  bugPriority = Tr
29b0: 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61  acePriority.Defa
29c0: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
29d0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
29e0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
29f0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 54  racePriority = T
2a00: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
2a10: 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ault;..         
2a20: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2a30: 63 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  c string debugFo
2a40: 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 44 65  rmat = DefaultDe
2a50: 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
2a60: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2a70: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
2a80: 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66 61  aceFormat = Defa
2a90: 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ultTraceFormat;.
2aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2ab0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2ac0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b10: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2b20: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
2b30: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
2b40: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
2b50: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
2b60: 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74  ity DebugPriorit
2b70: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
2b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b90: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
2ba0: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
2bb0: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20   debugPriority; 
2bc0: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
2bd0: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
2be0: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62  (syncRoot) { deb
2bf0: 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  ugPriority = val
2c00: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
2c10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c20: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2c70: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2c80: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
2c90: 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69  rity TracePriori
2ca0: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
2cb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cc0: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
2cd0: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
2ce0: 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n tracePriority;
2cf0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
2d00: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
2d10: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
2d20: 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61  acePriority = va
2d30: 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  lue; } }..      
2d40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2da0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2db0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
2dc0: 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20  ebugFormat..    
2dd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2de0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2df0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
2e00: 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
2e10: 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20  ormat; } }..    
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2e30: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
2e40: 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20  ) { debugFormat 
2e50: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
2e60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e70: 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 0d 0a  //////////////..
2ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2ed0: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
2ee0: 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a  ng TraceFormat..
2ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2f10: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
2f20: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74 72  oot) { return tr
2f30: 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a  aceFormat; } }..
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f50: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
2f60: 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46 6f 72  Root) { traceFor
2f70: 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  mat = value; } }
2f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2fa0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2fb0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3000: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
3010: 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20 53 75  n Interactive Su
3020: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20  pport Methods.. 
3030: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
3040: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
3050: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
3060: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
3070: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3080: 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 53 68   DialogResult Sh
3090: 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  owMessage(..    
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
30b0: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
30c0: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
30d0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
30e0: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
30f0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
3100: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
3110: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
3120: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
3130: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
3140: 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
3150: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3160: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
3170: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
3180: 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20  g category,..   
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
31a0: 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20 62  sageBoxButtons b
31b0: 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  uttons,..       
31c0: 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
31d0: 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20  BoxIcon icon..  
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
31f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3210: 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65 73  DialogResult res
3220: 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73 75  ult = DialogResu
3230: 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20  lt.OK;....      
3240: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
3250: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
3260: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
3270: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3280: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3290: 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73 61 67  Callback, messag
32a0: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  e, category);...
32b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32c0: 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66 6f 72   if (SystemInfor
32d0: 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74 65 72  mation.UserInter
32e0: 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20 20 20  active)..       
32f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3310: 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d 20 47  string title = G
3320: 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
3330: 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20  assembly);....  
3340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3350: 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d 20 6e    if (title == n
3360: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69                ti
3380: 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74 69 6f  tle = Applicatio
3390: 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a  n.ProductName;..
33a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33b0: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 4d        result = M
33c0: 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 28 6d  essageBox.Show(m
33d0: 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c 20 62  essage, title, b
33e0: 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a  uttons, icon);..
33f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3400: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72        DebugAndTr
3410: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
3420: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
3430: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3440: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3450: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
3460: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 20 22 55 73 65 72 20 63 68 6f 69 63 65 20 6f    "User choice o
3490: 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70  f {0}.", ForDisp
34a0: 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20  lay(result)),.. 
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c0: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29         category)
34d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34f0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
3500: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
3520: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
3530: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
3540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3550: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
3560: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
3570: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
3580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3590: 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f 69 63    "Default choic
35a0: 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  e of {0}.", ForD
35b0: 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c  isplay(result)),
35c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35d0: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b        category);
35e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35f0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
3600: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
3610: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
3620: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
3630: 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3680: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
3690: 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70 70  ion Tracing Supp
36a0: 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ort Methods..   
36b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
36c0: 73 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 75  static void Setu
36d0: 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28  pDebugListeners(
36e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
36f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3700: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65    if (debugListe
3710: 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ners == null).. 
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3730: 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72     debugListener
3740: 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 72 61  s = new List<Tra
3750: 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b 0d 0a  ceListener>();..
3760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3770: 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73    debugListeners
3780: 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65  .Add(new Console
3790: 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29  TraceListener())
37a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
37b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3800: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3810: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3820: 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49   long NextDebugI
3830: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
3840: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3850: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
3860: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
3870: 28 72 65 66 20 6e 65 78 74 44 65 62 75 67 49 64  (ref nextDebugId
3880: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3890: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
38a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
38f0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3900: 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65  c long NextTrace
3910: 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  Id()..          
3920: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3930: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65       return Inte
3940: 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e  rlocked.Incremen
3950: 74 28 72 65 66 20 6e 65 78 74 54 72 61 63 65 49  t(ref nextTraceI
3960: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
3970: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3980: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
39d0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
39e0: 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74  ic string TimeSt
39f0: 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61 74  amp(DateTime dat
3a00: 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  eTime)..        
3a10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61         return da
3a30: 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28  teTime.ToString(
3a40: 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f  Iso8601DateTimeO
3a50: 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20  utputFormat);.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3ac0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
3ad0: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
3ae0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
3af0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
3b00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
3b10: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
3b20: 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20  MethodName(..   
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61               Sta
3b40: 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61  ckTrace stackTra
3b50: 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
3b60: 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a       int level..
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ba0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
3bb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3be0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
3bf0: 66 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20  f a valid stack 
3c00: 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75  trace was not su
3c10: 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20  pplied by the.. 
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c30: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
3c40: 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e  er, create one n
3c50: 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ow based on the 
3c60: 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20  current..       
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3c80: 20 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20        execution 
3c90: 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20  stack...        
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cc0: 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61      if (stackTra
3cd0: 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ce == null)..   
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d20: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3d30: 20 47 72 61 62 20 74 68 65 20 63 75 72 72 65 6e   Grab the curren
3d40: 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63  t execution stac
3d50: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d80: 20 20 20 20 20 20 20 20 73 74 61 63 6b 54 72 61          stackTra
3d90: 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72  ce = new StackTr
3da0: 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ace();....      
3db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dc0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3de0: 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b   NOTE: Always sk
3df0: 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61  ip this call fra
3e00: 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70 74 75  me when we captu
3e10: 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
3e30: 20 20 20 20 20 74 68 65 20 73 74 61 63 6b 20 74       the stack t
3e40: 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  race...         
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3e60: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3e70: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c             level
3e80: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
3e90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3eb0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3ec0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3ed0: 45 3a 20 47 65 74 20 74 68 65 20 73 70 65 63 69  E: Get the speci
3ee0: 66 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65  fied stack frame
3ef0: 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65   (always add one
3f00: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
3f10: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3f20: 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68    skip this meth
3f30: 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  od)...          
3f40: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f60: 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61    StackFrame sta
3f70: 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54  ckFrame = stackT
3f80: 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65  race.GetFrame(le
3f90: 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  vel);....       
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3fc0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
3fd0: 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72  t the method for
3fe0: 20 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65   the stack frame
3ff0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4000: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
4020: 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64  ethodBase method
4030: 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d  Base = stackFram
4040: 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a  e.GetMethod();..
4050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4060: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4080: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74   NOTE: Get the t
4090: 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68  ype for the meth
40a0: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
40b0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40d0: 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74   Type type = met
40e0: 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e  hodBase.Declarin
40f0: 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  gType;....      
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4120: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
4130: 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  et the name of t
4140: 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  he method...    
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4160: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4170: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
4180: 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65  ame = methodBase
4190: 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Name;....      
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
41b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
41c0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
41d0: 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72  eturn the proper
41e0: 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73  ly formatted res
41f0: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ult...          
4200: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4220: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
4230: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
4240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4250: 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79   "{0}{1}{2}", ty
4260: 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65  pe.Name, Type.De
4270: 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d  limiter, name);.
4280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4290: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
42a0: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
42b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42d0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
42e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
42f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4300: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
4310: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
4320: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4330: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4370: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4380: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4390: 69 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72  ic void DebugCor
43a0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
43b0: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
43c0: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
43d0: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
43e0: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
43f0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4400: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4410: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
4420: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
4430: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 69 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65  if (debugListene
4460: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4490: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
44a0: 61 63 68 20 28 54 72 61 63 65 4c 69 73 74 65 6e  ach (TraceListen
44b0: 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e 20 64  er listener in d
44c0: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a  ebugListeners)..
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4500: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e         listener.
4510: 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61 67  WriteLine(messag
4520: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  e, category);.. 
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65             liste
4550: 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20  ner.Flush();..  
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4570: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
45b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4600: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4610: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4620: 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72 65 28   void TraceCore(
4630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4640: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
4650: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4660: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
4670: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
4680: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
4690: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
46a0: 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
46b0: 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Root)..         
46c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
46e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
46f0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
4700: 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 67 65  rite the message
4710: 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69   to all the acti
4720: 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ve trace..      
4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4740: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 73         listeners
4750: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4760: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
4780: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d  race.WriteLine(m
4790: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
47a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
47b0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 46 6c          Trace.Fl
47c0: 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ush();..        
47d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
47e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
47f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4840: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
4850: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
4860: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
4870: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
4880: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4890: 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64   string DebugAnd
48a0: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
48b0: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
48c0: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
48d0: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
48e0: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
48f0: 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ack debugCallbac
4900: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
4910: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
4920: 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  k traceCallback,
4930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4940: 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63 65    Exception exce
4950: 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
4960: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
4970: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
4980: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4990: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
49a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
49b0: 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  xception != null
49c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
49d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65         return De
49e0: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
49f0: 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67  ePriority, debug
4a00: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a20: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
4a30: 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65  , new StackTrace
4a40: 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75 65  (exception, true
4a50: 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  ), 0,..         
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
4a70: 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e  xception.ToStrin
4a80: 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  g(), category);.
4a90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4aa0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b10: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4b20: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
4b30: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
4b40: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
4b50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4b60: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
4b70: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4b90: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
4ba0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
4bb0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4bc0: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
4bd0: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4be0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
4bf0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
4c00: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
4c10: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
4c20: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
4c30: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4c40: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
4c50: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4c60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4c70: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4c80: 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65  rn DebugAndTrace
4c90: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4ca0: 20 20 20 20 20 20 20 74 72 61 63 65 50 72 69 6f         tracePrio
4cb0: 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62  rity, debugCallb
4cc0: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
4cd0: 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20  ck, null, 1,..  
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cf0: 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67    message, categ
4d00: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
4d10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4d20: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d60: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4d70: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
4d80: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
4d90: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
4da0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
4db0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
4dc0: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
4dd0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4de0: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
4df0: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
4e00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4e10: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4e20: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4e40: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
4e50: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
4e70: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
4e80: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
4e90: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
4ea0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4eb0: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
4ec0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4ed0: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
4ee0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
4ef0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4f00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4f10: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4f20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4f30: 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20  TE: Always skip 
4f40: 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20  this call frame 
4f50: 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72 61  if the stack tra
4f60: 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  ce is..         
4f70: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
4f80: 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74  going to be capt
4f90: 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f  ured by GetMetho
4fa0: 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20  dName...        
4fb0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4fd0: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75  stackTrace == nu
4fe0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4ff0: 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b           level++
5000: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5010: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5020: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5030: 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65 73  : Format the mes
5040: 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61 79  sage for display
5050: 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20   (once)...      
5060: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
5080: 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20 3d  ring formatted =
5090: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
50a0: 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}: {1}",..    
50b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50c0: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74  GetMethodName(st
50d0: 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29  ackTrace, level)
50e0: 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  , message);.... 
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5100: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
5110: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
5120: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
5130: 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20  k is invalid or 
5140: 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72 69  the trace priori
5150: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
5160: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20      //       of 
5170: 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20  this message is 
5180: 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20 77  less than what w
5190: 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74  e currently want
51a0: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
51b0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 65       //       de
51c0: 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20  bug, skip it... 
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
51e0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
51f0: 20 20 20 69 66 20 28 28 64 65 62 75 67 43 61 6c     if ((debugCal
5200: 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26  lback != null) &
5210: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
5220: 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72 69         (tracePri
5230: 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72  ority >= DebugPr
5240: 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20  iority))..      
5250: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5270: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5280: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5290: 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 62  : Invoke the deb
52a0: 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ug callback with
52b0: 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a   the formatted..
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52d0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73      //       mes
52e0: 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61 74  sage and the cat
52f0: 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64 20  egory specified 
5300: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
5310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
5320: 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20       caller...  
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5340: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5350: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
5360: 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65  allback(formatte
5370: 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  d, category);.. 
5380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5390: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
53a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
53b0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
53c0: 20 49 66 20 74 68 65 20 74 72 61 63 65 20 63 61   If the trace ca
53d0: 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69  llback is invali
53e0: 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70  d or the trace p
53f0: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
5400: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5410: 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67    of this messag
5420: 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77  e is less than w
5430: 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79  hat we currently
5440: 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20   want to..      
5450: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5460: 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20 69     trace, skip i
5470: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
5480: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5490: 20 20 20 20 20 20 20 20 69 66 20 28 28 74 72 61          if ((tra
54a0: 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
54b0: 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
54c0: 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61              (tra
54d0: 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54 72  cePriority >= Tr
54e0: 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a 20  acePriority)).. 
54f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5510: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5530: 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68   NOTE: Invoke th
5540: 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
5550: 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74   with the format
5560: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
5570: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5580: 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68    message and th
5590: 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69  e category speci
55a0: 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
55b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55c0: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
55d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
55e0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
55f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5600: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72  raceCallback(for
5610: 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79  matted, category
5620: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5640: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5650: 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20  message;..      
5660: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5670: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5680: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5690: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
56a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
56b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
5700: 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72  gion MockRegistr
5710: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
5720: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
5730: 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74  class MockRegist
5740: 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  ry : IDisposable
5750: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5760: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
5770: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
5780: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
5790: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
57a0: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
57b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
57c0: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
57d0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
57e0: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
57f0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5800: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
5810: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
5820: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5830: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5870: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5880: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5890: 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ockRegistry(..  
58a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
58b0: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
58c0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
58e0: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
58f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5900: 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74         this.what
5910: 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20  If = whatIf;..  
5920: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5930: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5990: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
59a0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
59b0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
59c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
59d0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
59e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
59f0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5a00: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
5a10: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
5a20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5a30: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
5a40: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
5a50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5a60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5ac0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5ad0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5ae0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
5af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b00: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
5b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b20: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b50: 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c 20 72  : this(whatIf, r
5b60: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
5b70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5b80: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
5b90: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
5ba0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5bb0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5bc0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
5bd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5c20: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
5c30: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
5c40: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
5c50: 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
5c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5c70: 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
5c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ca0: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
5cb0: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68  sed(); return wh
5cc0: 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
5cd0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
5ce0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5cf0: 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
5d00: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5d70: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5d80: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
5d90: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
5da0: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
5db0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5dc0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
5dd0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
5de0: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
5df0: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
5e00: 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
5e10: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
5e20: 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20  adOnly = value; 
5e30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5e40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5ea0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5eb0: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
5ec0: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
5ed0: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
5ee0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5ef0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
5f00: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
5f10: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
5f20: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
5f30: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5f40: 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b 20  ; safe = value; 
5f50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fb0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5fc0: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
5fd0: 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73 73  egistryKey class
5fe0: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
5ff0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
6000: 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73  RegistryKey Clas
6010: 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20  sesRoot..       
6020: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6030: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
6040: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6060: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6070: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6080: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6090: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e  classesRoot == n
60a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
60c0: 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65 77 20  assesRoot = new 
60d0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
60e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6100: 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73 52 6f  gistry.ClassesRo
6110: 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ot, whatIf, read
6120: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6140: 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61 73 73      return class
6150: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
6160: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6170: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6180: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
61d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
61e0: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
61f0: 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e 66 69  Key currentConfi
6200: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
6210: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6220: 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 43 6f  tryKey CurrentCo
6230: 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20  nfig..          
6240: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6250: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
6260: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6280: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6290: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
62a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72           if (cur
62b0: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75  rentConfig == nu
62c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
62e0: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 65 77  rentConfig = new
62f0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6300: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
6320: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 43  egistry.CurrentC
6330: 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c 20 72  onfig, whatIf, r
6340: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6350: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6360: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75         return cu
6370: 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20  rrentConfig;..  
6380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
63a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
63b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6400: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
6410: 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74  istryKey current
6420: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
6430: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
6440: 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e  gistryKey Curren
6450: 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20  tUser..         
6460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6470: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6480: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64a0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
64b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
64c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
64d0: 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e 75 6c  rrentUser == nul
64e0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
64f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72              curr
6500: 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20 4d 6f  entUser = new Mo
6510: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6530: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6540: 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
6550: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
6560: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6580: 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e 74    return current
6590: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
65a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
65b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
65c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
65d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6610: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6620: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
6630: 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  y dynData;..    
6640: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
6650: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 44  ockRegistryKey D
6660: 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ynData..        
6670: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6680: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6690: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
66c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
66d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
66e0: 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d  ynData == null).
66f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6700: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
6710: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6720: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6740: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 44 79       Registry.Dy
6750: 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72  nData, whatIf, r
6760: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6770: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 79         return dy
6790: 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  nData;..        
67a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
67b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
67c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
67d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6810: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6820: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6830: 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b  ey localMachine;
6840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6850: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6860: 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68 69 6e  yKey LocalMachin
6870: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
6880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6890: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
68a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
68c0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
68d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
68e0: 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d        if (localM
68f0: 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c 29 0d  achine == null).
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 6c 6f 63 61 6c 4d 61           localMa
6920: 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b  chine = new Mock
6930: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
6940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6950: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
6960: 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c  ry.LocalMachine,
6970: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
6980: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
6990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69a0: 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d 61 63   return localMac
69b0: 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  hine;..         
69c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
69d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 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 2f 2f 2f  ////////////////
6a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6a30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6a40: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
6a50: 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y performanceDat
6a60: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
6a70: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6a80: 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d 61 6e  tryKey Performan
6a90: 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ceData..        
6aa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6ab0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ae0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6af0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6b00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
6b10: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d  erformanceData =
6b20: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b40: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
6b50: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6b60: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b80: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 50 65       Registry.Pe
6b90: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c 20 77  rformanceData, w
6ba0: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
6bb0: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
6bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6bd0: 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61 6e 63  eturn performanc
6be0: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
6bf0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6c00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6c10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6c60: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6c70: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6c80: 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20 20 20  ey users;..     
6c90: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
6ca0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 55 73  ckRegistryKey Us
6cb0: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
6cc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6cd0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
6ce0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d00: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6d20: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
6d30: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d50: 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65 77 20      users = new 
6d60: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6d90: 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20 77 68  gistry.Users, wh
6da0: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
6db0: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6dd0: 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 20 20  turn users;..   
6de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6e00: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
6e10: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6e20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6e70: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6e80: 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 72 79  Public "Registry
6e90: 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  " Methods..     
6ea0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62         public ob
6eb0: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a  ject GetValue(..
6ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ed0: 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d  string keyName,.
6ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ef0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d   string valueNam
6f00: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
6f10: 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75      object defau
6f20: 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  ltValue..       
6f30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
6f40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6f50: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
6f60: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6f80: 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 47  eturn Registry.G
6f90: 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c  etValue(keyName,
6fa0: 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65 66 61   valueName, defa
6fb0: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
6fc0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6fd0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7020: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
7030: 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65  ic void SetValue
7040: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7050: 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
7060: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
7070: 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
7080: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
7090: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
70a0: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
70b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
70c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
70d0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
70e0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
70f0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
7100: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7120: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
7130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
7140: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
7150: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
7160: 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  ame, value);..  
7170: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7180: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
71d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
71e0: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
71f0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
7200: 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
7210: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
7220: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
7230: 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ueName,..       
7240: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
7250: 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  value,..        
7260: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
7270: 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75 65 4b  ValueKind valueK
7280: 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ind..           
7290: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
72a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
72b0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
72c0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
72d0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
72e0: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7300: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
7310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
7320: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
7330: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
7340: 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75  ame, value, valu
7350: 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20  eKind);..       
7360: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7370: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
73e0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
73f0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
7400: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
7410: 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79  id CheckReadOnly
7420: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
7430: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7440: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
7450: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
7460: 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d  In "read-only" m
7470: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
7480: 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73   all write acces
7490: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
74a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
74b0: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
74c0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
74e0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
74f0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7500: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
7510: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
7520: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7530: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
7540: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
7550: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7590: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
75a0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
75b0: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
75c0: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
75d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
75e0: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
75f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7600: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
7610: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
7620: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
7630: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7640: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
7650: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
7660: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7670: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
7680: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7690: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
76a0: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
76c0: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
76d0: 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  y).Name);..     
76e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
76f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7740: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
7750: 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
7760: 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
7770: 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20  Dispose(..      
7780: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
7790: 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20  isposing..      
77a0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
77b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
77d0: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7800: 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67     if (disposing
7810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7820: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7840: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7860: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7880: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
7890: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
78a0: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
78b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
78c0: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7900: 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 21 3d   (classesRoot !=
7910: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7950: 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c 6f 73 65  lassesRoot.Close
7960: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7980: 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e   classesRoot = n
7990: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
79b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
79c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
79d0: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 21 3d 20  urrentConfig != 
79e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
7a20: 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43 6c 6f 73  rrentConfig.Clos
7a30: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20    currentConfig 
7a60: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7aa0: 20 28 63 75 72 72 65 6e 74 55 73 65 72 20 21 3d   (currentUser !=
7ab0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ad0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7af0: 75 72 72 65 6e 74 55 73 65 72 2e 43 6c 6f 73 65  urrentUser.Close
7b00: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b20: 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e   currentUser = n
7b30: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7b50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7b60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
7b70: 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d  ynData != null).
7b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7b90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 2e          dynData.
7bc0: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 20 20 20 20 20 20 64 79 6e 44 61 74 61 20 3d 20        dynData = 
7bf0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7c10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7c30: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 21 3d 20  localMachine != 
7c40: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
7c80: 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c 6f 73 65  calMachine.Close
7c90: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cb0: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20   localMachine = 
7cc0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7ce0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7d00: 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20  performanceData 
7d10: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d50: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
7d60: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d80: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
7d90: 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a  ceData = null;..
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dd0: 20 20 20 20 20 69 66 20 28 75 73 65 72 73 20 21       if (users !
7de0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e20: 75 73 65 72 73 2e 43 6c 6f 73 65 28 29 3b 0d 0a  users.Close();..
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72              user
7e50: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
7e80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ea0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7ee0: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
7ef0: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
7f00: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
7f10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7f50: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f   // NOTE: This o
7f80: 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73  bject is now dis
7f90: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fc0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
7fd0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
7fe0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7ff0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8000: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
8010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8060: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8070: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
8080: 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
8090: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
80a0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
80b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80d0: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80f0: 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c  GC.SuppressFinal
8100: 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ize(this);..    
8110: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8120: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
8130: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
8140: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8180: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8190: 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
81a0: 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  ructor..        
81b0: 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72      ~MockRegistr
81c0: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y()..           
81d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
81e0: 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73      Dispose(fals
81f0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8200: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8210: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
8220: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
8230: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
8240: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8290: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
82a0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
82b0: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69  Class..        i
82c0: 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63  nternal sealed c
82d0: 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74 72  lass MockRegistr
82e0: 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73 61 62  yKey : IDisposab
82f0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
8300: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
8310: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
8320: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
8330: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
8340: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a  kRegistryKey()..
8350: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
8370: 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20  hatIf = true;.. 
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8390: 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d  eadOnly = true;.
83a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
83b0: 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20   safe = true;.. 
83c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
83d0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
83e0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
83f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8430: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8440: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
8450: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
8460: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
8470: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8480: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8490: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
84a0: 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20  yKey key..      
84b0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
84c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
84d0: 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  his()..         
84e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
84f0: 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79 20 3d        this.key =
8500: 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20   key;..         
8510: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8520: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8560: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8570: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8580: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85a0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
85b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85c0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
85d0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
85e0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
85f0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
8600: 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey)..           
8610: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8620: 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65 79 4e      this.subKeyN
8630: 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61 6d 65  ame = subKeyName
8640: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8650: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f  ////////////////
86a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
86b0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
86c0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
86e0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8700: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
8710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8720: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
8740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8750: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
8760: 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20 20 20  bKeyName)..     
8770: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8780: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
8790: 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d  hatIf = whatIf;.
87a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
87b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8800: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8810: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
8820: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8830: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
8840: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
8850: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8860: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
8870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8880: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
8890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
88a0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol readOnly..   
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88d0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b  : this(key, subK
88e0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 29 0d  eyName, whatIf).
88f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8910: 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 3d 20  this.readOnly = 
8920: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
8930: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8940: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8990: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
89a0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
89b0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
89c0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
89d0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
89e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
89f0: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
8a00: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
8a10: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
8a20: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
8a30: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  dOnly,..        
8a40: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66          bool saf
8a50: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8a60: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8a70: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
8a80: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
8a90: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d  atIf, readOnly).
8aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ac0: 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 65  this.safe = safe
8ad0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8ae0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b30: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8b40: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8b50: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8b70: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8b90: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
8ba0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8bc0: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8bd0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
8be0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8bf0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8c00: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8c10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8c20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8c70: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
8c80: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
8c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ca0: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
8cb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8cc0: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ce0: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8d10: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e     : this(key, n
8d20: 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ull, whatIf, rea
8d30: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
8d40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8d50: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
8d60: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
8d70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8d80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8dd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8de0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e00: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
8e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e20: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e40: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a  bool readOnly,..
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e60: 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20  bool safe..     
8e70: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8e90: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8ea0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
8eb0: 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  , safe)..       
8ec0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8ed0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8ee0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8ef0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8f00: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
8f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
8f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8f70: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
8f80: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
8f90: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
8fa0: 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  Close()..       
8fb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8fc0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
8fe0: 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73 65 64  OTE: No disposed
8ff0: 20 63 68 65 63 6b 20 68 65 72 65 20 62 65 63 61   check here beca
9000: 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68 69 73  use calling this
9010: 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20   method..       
9020: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
9030: 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75 73 74    should be just
9040: 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20 44 69   like calling Di
9050: 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  spose...        
9060: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9070: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
9080: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
9090: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
90a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
90b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9100: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
9110: 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey CreateSubKey(
9120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9130: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
9140: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
9150: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9160: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9170: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9180: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
9190: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
91a0: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
91c0: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
91d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91e0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
91f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9200: 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a     if (whatIf)..
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9220: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9230: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9250: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
9260: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
9270: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
9280: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  If this..       
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
92a0: 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77 65 20        fails, we 
92b0: 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75  will simply retu
92c0: 72 6e 20 74 68 65 20 77 72 61 70 70 65 64 20 72  rn the wrapped r
92d0: 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  oot key..       
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
92f0: 20 20 20 20 20 20 69 74 73 65 6c 66 20 73 69 6e        itself sin
9300: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
9310: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 27 77 68 61   allowed in 'wha
9320: 74 2d 69 66 27 0d 0a 20 20 20 20 20 20 20 20 20  t-if'..         
9330: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
9340: 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e      mode anyhow.
9350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9360: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
9380: 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
9390: 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65   = key.OpenSubKe
93a0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  y(subKeyName);..
93b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
93c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73 75        return (su
93d0: 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d  bKey != null) ?.
93e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
93f0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
9400: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9430: 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72  ubKey, whatIf, r
9440: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a  eadOnly, safe) :
9450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9460: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f            new Mo
9470: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94a0: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
94b0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
94c0: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
94d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
94f0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
9500: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9510: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9520: 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
9530: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
9540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9550: 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79  key.CreateSubKey
9560: 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68  (subKeyName), wh
9570: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
9580: 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  safe);..        
9590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
95a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
95b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
9600: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9610: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
9620: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
9630: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
9640: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
9650: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
9660: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
96a0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
96b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
96c0: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
96d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
96e0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
96f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9710: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
9720: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
9730: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
9740: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
9750: 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  leteSubKey(subKe
9760: 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  yName, throwOnMi
9770: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9780: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9790: 20 20 20 20 20 20 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 2f  ////////////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
97e0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
97f0: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
9800: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
9810: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9820: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
9830: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9840: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9850: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9860: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9880: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
9890: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
98a0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
98b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
98c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
98d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
98e0: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
98f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9900: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
9910: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
9920: 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  yName);..       
9930: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9940: 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
9980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9990: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
99a0: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
99b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
99c0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
99d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
99e0: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
99f0: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
9a00: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9a10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9a20: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9a30: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
9a40: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
9a50: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9a70: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a90: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9ab0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65   key.DeleteValue
9ae0: 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  (name, throwOnMi
9af0: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9b00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9b10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9b60: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9b70: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
9b80: 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20 20  eyNames()..     
9b90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9ba0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9bb0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9bd0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bf0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
9c00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c10: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
9c20: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
9c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9c40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9ca0: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
9cb0: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
9cc0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9cd0: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
9ce0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
9cf0: 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20  defaultValue..  
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9d50: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
9d60: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9d70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9d80: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
9d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9da0: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61   key.GetValue(na
9db0: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
9dc0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9dd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9de0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9e30: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
9e40: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
9e50: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
9e60: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9e70: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
9e80: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9e90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9eb0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ed0: 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 62 4b   return OpenSubK
9ee0: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66  ey(subKeyName, f
9ef0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
9f00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9f10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9f60: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
9f70: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
9f80: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9fa0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d 0a 20  bool writable.. 
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a000: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a010: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a020: 20 20 20 20 20 69 66 20 28 77 72 69 74 61 62 6c       if (writabl
a030: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
a040: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
a050: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
a060: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a070: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
a0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a0b0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
a0c0: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
a0d0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
a0f0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f  eyName, whatIf ?
a100: 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c   false : writabl
a110: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
a120: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73         return (s
a130: 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f  ubKey != null) ?
a140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a150: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
a160: 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b 65 79  gistryKey(subKey
a170: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
a180: 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75 6c 6c  ly, safe) : null
a190: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a1a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
a200: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
a210: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
a220: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
a230: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
a240: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
a250: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
a260: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
a270: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a280: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
a290: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
a2a0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
a2b0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a2d0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2f0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a310: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
a320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a330: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
a340: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  me, value);..   
a350: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a360: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a370: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
a380: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a3d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
a3e0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a400: 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a  ic string Name..
a410: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a430: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
a440: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a450: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a460: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a480: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
a490: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a4b0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4d0: 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e 67 2e   return !String.
a4e0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 75  IsNullOrEmpty(su
a4f0: 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  bKeyName) ?..   
a500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a510: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
a520: 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  at("{0}\\{1}", k
a530: 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e  ey.Name, subKeyN
a540: 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20  ame) :..        
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a560: 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  key.Name;..     
a570: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a580: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a5f0: 69 76 61 74 65 20 52 65 67 69 73 74 72 79 4b 65  ivate RegistryKe
a600: 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  y key;..        
a610: 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69 73      public Regis
a620: 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20  tryKey Key..    
a630: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a640: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
a650: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a660: 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b 20 72  ; CheckSafe(); r
a670: 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20  eturn key; }..  
a680: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a690: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a6f0: 69 76 61 74 65 20 73 74 72 69 6e 67 20 73 75 62  ivate string sub
a700: 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  KeyName;..      
a710: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
a720: 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a  ing SubKeyName..
a730: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a750: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
a760: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 75 62  ed(); return sub
a770: 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  KeyName; }..    
a780: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a790: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a7e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a7f0: 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
a800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a810: 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
a820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a840: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
a850: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77  osed(); return w
a860: 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
a870: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a880: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a8d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
a8e0: 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b  e bool readOnly;
a8f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a900: 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e  blic bool ReadOn
a910: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
a920: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a930: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
a940: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
a950: 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20   readOnly; }..  
a960: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a970: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a9d0: 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d  blic bool safe;.
a9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a9f0: 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20  lic bool Safe.. 
aa00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
aa20: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
aa30: 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65  d(); return safe
aa40: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
aa50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
aa60: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
aa70: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
aa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
aac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
aad0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
aae0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
aaf0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
ab00: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a  heckReadOnly()..
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ab30: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
ab40: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22     // NOTE: In "
ab50: 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c  read-only" mode,
ab60: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
ab70: 20 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a   write access...
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab90: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
aba0: 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
abb0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
abc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
abd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
abe0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
abf0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
ac00: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20  eption();..     
ac10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ac20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ac30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ac70: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ac80: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53 61 66  te void CheckSaf
ac90: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
aca0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
acb0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
acc0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
acd0: 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64 65 2c   In "safe" mode,
ace0: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
acf0: 20 64 69 72 65 63 74 20 61 63 63 65 73 73 20 74   direct access t
ad00: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
ad10: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
ad20: 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69 73 74  contained regist
ad30: 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20  ry key...       
ad40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ad60: 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  (!safe)..       
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ad80: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
ad90: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
ada0: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
adb0: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  onException();..
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
add0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
ade0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
adf0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae30: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ae40: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
ae50: 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76  System.Object Ov
ae60: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20  errides..       
ae70: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
ae80: 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74  ride string ToSt
ae90: 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 20 20  ring()..        
aea0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aeb0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
aec0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
aed0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
aee0: 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20  n this.Name;..  
aef0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
af00: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
af10: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
af20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
af30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
af70: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6d        #region Im
af80: 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73 69 6f  plicit Conversio
af90: 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20 20 20  n Operators..   
afa0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
afb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 42           // BUGB
afc0: 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f 20 20  UG: Remove me?  
afd0: 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 73  This should be s
afe0: 61 66 65 20 62 65 63 61 75 73 65 20 69 6e 20 27  afe because in '
aff0: 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20 20  what-if'..      
b000: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
b010: 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73 20 61   mode all keys a
b020: 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64 2d 6f  re opened read-o
b030: 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  nly...          
b040: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b050: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
b060: 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 74 6f  implicit operato
b070: 72 20 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  r RegistryKey(..
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
b0a0: 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  key..           
b0b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
b0c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b0d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b         return (k
b0e0: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6b 65  ey != null) ? ke
b0f0: 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  y.Key : null;.. 
b100: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b110: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
b120: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b130: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b170: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b180: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b190: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
b1a0: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
b1b0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b1c0: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
b1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b1e0: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
b1f0: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
b200: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
b210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b220: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
b230: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
b240: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b250: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
b260: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b270: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
b280: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
b2a0: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
b2b0: 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  yKey).Name);..  
b2c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b330: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
b340: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
b350: 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
b370: 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
b390: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b3b0: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
b3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b3e0: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
b3f0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
b400: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b420: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
b450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b460: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
b470: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
b480: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4e0: 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c   if (key != null
b4f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b500: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b520: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 6c            key.Cl
b530: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d      key = null;.
b560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b570: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b590: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b5a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b5e0: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
b5f0: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
b600: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b620: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b660: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b670: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
b680: 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
b690: 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b6c0: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
b6d0: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b6f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b700: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
b710: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b720: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b760: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b770: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b780: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
b790: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
b7a0: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
b7b0: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
b7c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b7d0: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
b7e0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
b7f0: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
b800: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
b810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
b830: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b840: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b890: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b8a0: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
b8b0: 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52            ~MockR
b8c0: 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20  egistryKey()..  
b8d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
b8f0: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
b900: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b910: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b920: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
b930: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
b940: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
b950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b990: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b9a0: 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74 72   #region Registr
b9b0: 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20  yHelper Class.. 
b9c0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
b9d0: 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67 69  tatic class Regi
b9e0: 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20 20  stryHelper..    
b9f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ba00: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
ba10: 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74  c Static Propert
ba20: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
ba30: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
ba40: 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65 61 74  int subKeysCreat
ba50: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
ba60: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
ba70: 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61 74 65  nt SubKeysCreate
ba80: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
ba90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
baa0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
bab0: 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 20 7d  ubKeysCreated; }
bac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bad0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
bae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb20: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
bb30: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
bb40: 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65 6c 65   int subKeysDele
bb50: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
bb60: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bb70: 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c 65 74  int SubKeysDelet
bb80: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
bb90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bba0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
bbb0: 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b 20  subKeysDeleted; 
bbc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
bbd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc20: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
bc30: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
bc40: 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 53  c int keyValuesS
bc50: 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et;..           
bc60: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
bc70: 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65 74 0d  nt KeyValuesSet.
bc80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79  get { return key
bcb0: 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a 20 20  ValuesSet; }..  
bcc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bcd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
bce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
bd20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
bd30: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
bd40: 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
bd50: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
bd60: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
bd70: 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  t KeyValuesDelet
bd80: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
bd90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bda0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
bdb0: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
bdc0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
bdd0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
bde0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
bdf0: 20 20 20 20 20 20 20 20 20 20 2f 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 0d 0a 0d  /////////////...
be40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
be50: 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74  gion Public Stat
be60: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
be70: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
be80: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
be90: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
bea0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
beb0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f  public static Mo
bec0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70  ckRegistryKey Op
bed0: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
bee0: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
bef0: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
bf00: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
bf10: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
bf20: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
bf30: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72           bool wr
bf40: 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20  itable,..       
bf50: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
bf60: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
bf70: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
bf80: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
bf90: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
bfa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bfb0: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
bfc0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfe0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
bff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c000: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c020: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
c030: 67 41 6e 64 54 72 61 63 65 28 77 72 69 74 61 62  gAndTrace(writab
c040: 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  le ?..          
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c060: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
c070: 65 73 74 20 3a 20 54 72 61 63 65 50 72 69 6f 72  est : TracePrior
c080: 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20  ity.Higher,..   
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0a0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
c0b0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
c0c0: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
c0d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c0e0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
c0f0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
c100: 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69  yName = {1}, wri
c110: 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20  table = {2}",.. 
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c130: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
c140: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
c150: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
c160: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
c180: 44 69 73 70 6c 61 79 28 77 72 69 74 61 62 6c 65  Display(writable
c190: 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
c1a0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
c1b0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
c1c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
c1d0: 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f 72 62 69  CK: Always forbi
c1e0: 64 20 77 72 69 74 61 62 6c 65 20 61 63 63 65 73  d writable acces
c1f0: 73 20 77 68 65 6e 20 6f 70 65 72 61 74 69 6e 67  s when operating
c200: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   in..           
c210: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77       //       'w
c220: 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20  hat-if' mode... 
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c240: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c250: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
c260: 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ey key = rootKey
c270: 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c290: 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68    subKeyName, wh
c2a0: 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77  atIf ? false : w
c2b0: 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  ritable);....   
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c2d0: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
c2e0: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
c2f0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
c300: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b 65 79  kRegistryKey(key
c310: 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c  , whatIf, false,
c320: 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d   false) : null;.
c330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
c350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c390: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
c3a0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
c3b0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
c3c0: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
c3d0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
c3e0: 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73  static MockRegis
c3f0: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
c400: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
c410: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c420: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c440: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
c450: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
c460: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c480: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
c4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4c0: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
c4d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
c4f0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
c500: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c510: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c530: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
c540: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
c550: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
c580: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
c590: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
c5a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c5b0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
c5c0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
c5d0: 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20  yName = {1}",.. 
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
c600: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
c610: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
c620: 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
c630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
c640: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
c650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c660: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
c670: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
c690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c6a0: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c       // HACK: Al
c6b0: 77 61 79 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c  ways open a key,
c6c0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65   rather than cre
c6d0: 61 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a  ating one when..
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6f0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65      //       ope
c700: 72 61 74 69 6e 67 20 69 6e 20 27 77 68 61 74 2d  rating in 'what-
c710: 69 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20  if' mode...     
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c730: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c740: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
c750: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
c760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c780: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
c790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c7a0: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
c7b0: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
c7c0: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
c7d0: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
c7f0: 20 20 20 20 20 74 68 69 73 20 66 61 69 6c 73 2c       this fails,
c800: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
c810: 72 65 74 75 72 6e 20 74 68 65 20 72 6f 6f 74 0d  return the root.
c820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c830: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
c840: 20 20 6b 65 79 20 69 74 73 65 6c 66 20 73 69 6e    key itself sin
c850: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
c860: 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20   allowed in..   
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c880: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77       //       'w
c890: 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 61 6e 79  hat-if' mode any
c8a0: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8d0: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
c8e0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
c8f0: 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b  rootKey.OpenSubK
c900: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  ey(subKeyName);.
c910: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c920: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c930: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
c940: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
c960: 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ey : new MockReg
c970: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
c9a0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
c9b0: 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66  whatIf, false, f
c9c0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
ca30: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
ca40: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca60: 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74 65 53   rootKey.CreateS
ca70: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
ca80: 29 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65  ), whatIf, false
ca90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
cab0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
cac0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
cae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
caf0: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
cb00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb20: 20 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64    subKeysCreated
cb30: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
cb40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
cb50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cb60: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cb70: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
cbb0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
cbc0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
cbd0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
cbe0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
cbf0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
cc00: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28  id DeleteSubKey(
cc10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cc20: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
cc30: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
cc50: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc70: 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
cc80: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
cc90: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
cca0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
ccb0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
ccc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ccd0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
cce0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ccf0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
cd00: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cd20: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
cd30: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
cd40: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
cd50: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
cd60: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
cd70: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
cd80: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cda0: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
cdb0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
cdc0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
cdf0: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
ce00: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce20: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
ce30: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
ce40: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
ce50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ce60: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
ce70: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ce90: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ceb0: 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75  rootKey.DeleteSu
cec0: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c  bKey(subKeyName,
ced0: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29   throwOnMissing)
cee0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cef0: 20 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65       subKeysDele
cf00: 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
cf10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cf20: 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
cf60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
cf70: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
cf80: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
cf90: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
cfa0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
cfb0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
cfc0: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54  id DeleteSubKeyT
cfd0: 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
cfe0: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
cff0: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d010: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
d020: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
d030: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
d040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d050: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d070: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d090: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
d0a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
d0c0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
d0d0: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
d0e0: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
d0f0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
d100: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
d110: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
d120: 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d140: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
d150: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
d160: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d180: 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d        "rootKey =
d190: 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65   {0}, subKeyName
d1a0: 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1c0: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f    ForDisplay(roo
d1d0: 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  tKey), ForDispla
d1e0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d  y(subKeyName)),.
d1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d200: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
d210: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
d220: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d230: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d250: 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b  otKey.DeleteSubK
d260: 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d  eyTree(subKeyNam
d270: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
d280: 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65         subKeysDe
d290: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
d2a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d2b0: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d300: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
d310: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
d320: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
d330: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
d340: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
d350: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
d360: 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
d370: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
d380: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3a0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
d3c0: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
d3e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d400: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
d430: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d440: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
d450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d460: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
d470: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
d480: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c  cePriority.High,
d490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d4a0: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
d4b0: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
d4c0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
d4d0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  "key = {0}", For
d500: 44 69 73 70 6c 61 79 28 6b 65 79 29 29 2c 20 74  Display(key)), t
d510: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d530: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
d540: 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a  SubKeyNames();..
d550: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
d560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d5c0: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
d5d0: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
d5e0: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
d5f0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
d600: 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47 65 74  tatic object Get
d610: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
d620: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
d630: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d650: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
d660: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
d670: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 2c  ct defaultValue,
d680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d690: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6b0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
d700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d710: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
d720: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
d730: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d740: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d750: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
d760: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
d770: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
d780: 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
d790: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
d7a0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
d7b0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
d7c0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7e0: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61    "key = {0}, na
d7f0: 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66 61 75 6c  me = {1}, defaul
d800: 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a  tValue = {2}",..
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d820: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
d830: 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70  ay(key), ForDisp
d840: 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20 20 20 20  lay(name),..    
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d860: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64      ForDisplay(d
d870: 65 66 61 75 6c 74 56 61 6c 75 65 29 29 2c 20 74  efaultValue)), t
d880: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d8a0: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
d8b0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61  Value(name, defa
d8c0: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
d8d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d8e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d930: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
d940: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
d950: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
d960: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
d970: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
d980: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
d990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d9a0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
d9b0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
d9c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
d9d0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
d9e0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
d9f0: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
da00: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
da10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
da20: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
da30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da40: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
da50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
da60: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
da70: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
da80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
da90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
daa0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
dab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dac0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
dad0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
dae0: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
daf0: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
db10: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
db20: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
db30: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e     "key = {0}, n
db60: 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c 75 65  ame = {1}, value
db70: 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20   = {2}",..      
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db90: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79    ForDisplay(key
dba0: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61  ), ForDisplay(na
dbb0: 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me), ForDisplay(
dbc0: 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20 20 20  value)),..      
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbe0: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
dbf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc00: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
dc10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dc20: 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61         key.SetVa
dc30: 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  lue(name, value)
dc40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc50: 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 53 65       keyValuesSe
dc60: 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t++;..          
dc70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
dc80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
dc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
dcd0: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
dce0: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
dcf0: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
dd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
dd10: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
dd20: 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20   DeleteValue(.. 
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
dd40: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
dd50: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
dd60: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
dd70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dd80: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
dd90: 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
dda0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
ddb0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
ddc0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
ddd0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
dde0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
ddf0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
de00: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
de10: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
de30: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
de40: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
de50: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
de60: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
de70: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
de80: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
de90: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
dec0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
ded0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30         "key = {0
df00: 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20  }, name = {1}", 
df10: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c  ForDisplay(key),
df20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
df30: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
df40: 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74 72 61  play(name)), tra
df50: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75    key.DeleteValu
dfa0: 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d  e(name, throwOnM
dfb0: 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  issing);....    
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56              keyV
dfd0: 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  aluesDeleted++;.
dfe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
e000: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
e010: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e020: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e030: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e070: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e080: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69      #region Stri
e090: 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  ngList Class..  
e0a0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
e0b0: 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e  aled class Strin
e0c0: 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72  gList : List<str
e0d0: 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ing>..        {.
e0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e0f0: 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29  lic StringList()
e100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e110: 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20    : base()..    
e120: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e130: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
e140: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
e150: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e160: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e1b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e1c0: 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e  c StringList(IEn
e1d0: 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e  umerable<string>
e1e0: 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20   collection)..  
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
e200: 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29  base(collection)
e210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e230: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
e240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e250: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e260: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
e270: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
e280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
e2d0: 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f  ion StringDictio
e2e0: 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20  nary Class..    
e2f0: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e300: 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44  ed class StringD
e310: 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74  ictionary : Dict
e320: 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73  ionary<string, s
e330: 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20  tring>..        
e340: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
e350: 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74  ublic StringDict
e360: 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20  ionary()..      
e370: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e380: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e390: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e3a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e3b0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e3c0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e3d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e410: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e420: 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73      #region Vers
e430: 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  ionList Class.. 
e440: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
e450: 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73  ealed class Vers
e460: 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56  ionList : List<V
e470: 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20  ersion>..       
e480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e490: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69  public VersionLi
e4a0: 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
e4b0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e4e0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e4f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
e510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e550: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
e560: 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
e570: 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65  t(IEnumerable<Ve
e580: 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f  rsion> collectio
e590: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
e5a0: 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65      : base(colle
e5b0: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
e5c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e5d0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
e5e0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
e5f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
e600: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
e610: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
e620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e660: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e670: 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f    #region Versio
e680: 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20  nMap Class..    
e690: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e6a0: 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
e6b0: 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79  Map : Dictionary
e6c0: 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e  <string, Version
e6d0: 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b  List>..        {
e6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e6f0: 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28  blic VersionMap(
e700: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e720: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
e730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e740: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
e750: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e760: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7b0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
e7c0: 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61  gion Package Cla
e7d0: 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  ss..        inte
e7e0: 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73  rnal sealed clas
e7f0: 73 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  s Package..     
e800: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e810: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
e820: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
e830: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e840: 63 20 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20  c Package()..   
e850: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
e870: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
e880: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e890: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
e8a0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
e8b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e900: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
e910: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
e920: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
e930: 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  te AssemblyName 
e940: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  assemblyName;.. 
e950: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e960: 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 41  c AssemblyName A
e970: 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20 20  ssemblyName..   
e980: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e990: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
e9a0: 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c  { return assembl
e9b0: 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  yName; }..      
e9c0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
e9d0: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 76  assemblyName = v
e9e0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
e9f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ea00: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ea10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ea50: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
ea60: 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65   bool globalAsse
ea70: 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20 20  mblyCache;..    
ea80: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
ea90: 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62  ool GlobalAssemb
eaa0: 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20 20 20  lyCache..       
eab0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
eac0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
ead0: 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73 65 6d  turn globalAssem
eae0: 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20 20 20  blyCache; }..   
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
eb00: 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c   { globalAssembl
eb10: 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65 3b 20  yCache = value; 
eb20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
eb30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
eb90: 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20     private Guid 
eba0: 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20 20  packageId;..    
ebb0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47          public G
ebc0: 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d 0a 20  uid PackageId.. 
ebd0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ebe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
ebf0: 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 6b 61  t { return packa
ec00: 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  geId; }..       
ec10: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
ec20: 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c 75 65  ackageId = value
ec30: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ec40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ec50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ec60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec90: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eca0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
ecb0: 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a 20 20  d serviceId;..  
ecc0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ecd0: 20 47 75 69 64 20 53 65 72 76 69 63 65 49 64 0d   Guid ServiceId.
ece0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ecf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed00: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 65 72  get { return ser
ed10: 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  viceId; }..     
ed20: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
ed30: 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 61 6c   serviceId = val
ed40: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
ed50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ed60: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ed70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eda0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
edb0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
edc0: 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49 64  uid dataSourceId
edd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
ede0: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 53  ublic Guid DataS
edf0: 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20  ourceId..       
ee00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ee10: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
ee20: 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 65 49  turn dataSourceI
ee30: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
ee40: 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74 61        set { data
ee50: 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c 75 65  SourceId = value
ee60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ee70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ee80: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eec0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eed0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
eee0: 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  d dataProviderId
eef0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
ef00: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 50  ublic Guid DataP
ef10: 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 20 20  roviderId..     
ef20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef30: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ef40: 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f 76 69  return dataProvi
ef50: 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  derId; }..      
ef60: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
ef70: 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d  dataProviderId =
ef80: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
ef90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
efa0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
efb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
eff0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f000: 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 54 65  te Guid adoNetTe
f010: 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20 20  chnologyId;..   
f020: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
f030: 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 68 6e  Guid AdoNetTechn
f040: 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 20 20  ologyId..       
f050: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f060: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
f070: 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 68 6e  turn adoNetTechn
f080: 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 20 20  ologyId; }..    
f090: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
f0a0: 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  { adoNetTechnolo
f0b0: 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  gyId = value; }.
f0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
f0e0: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
f0f0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
f100: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
f110: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
f120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f150: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f160: 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66      #region Conf
f170: 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73 0d  iguration Class.
f180: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
f190: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f   sealed class Co
f1a0: 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20  nfiguration..   
f1b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f1c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
f1d0: 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  ate Constants.. 
f1e0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f1f0: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53 77  te const char Sw
f200: 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20 20  itch = '-';..   
f210: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f220: 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74 53   const char AltS
f230: 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a  witch = '/';....
f240: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f290: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
f2a0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
f2b0: 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53 77  adonly char[] Sw
f2c0: 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a 20  itchChars = {.. 
f2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
f2e0: 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63 68  witch, AltSwitch
f2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b  ..            };
f300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
f310: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
f320: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
f370: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
f380: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
f390: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
f3a0: 20 20 20 20 20 70 72 69 76 61 74 65 20 43 6f 6e       private Con
f3b0: 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20  figuration(..   
f3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
f3d0: 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d  embly assembly,.
f3e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3f0: 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e   string logFileN
f400: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
f410: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
f420: 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
f430: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
f440: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  coreFileName,.. 
f450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f460: 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
f470: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
f480: 20 20 20 20 20 73 74 72 69 6e 67 20 65 66 36 46       string ef6F
f490: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
f4a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f4b0: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
f4c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
f4d0: 20 20 20 20 73 74 72 69 6e 67 20 72 65 67 69 73      string regis
f4e0: 74 72 79 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  tryVersion,..   
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
f500: 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69 6f  ing configVersio
f510: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
f520: 20 20 20 20 73 74 72 69 6e 67 20 76 73 56 65 72      string vsVer
f530: 73 69 6f 6e 53 75 66 66 69 78 2c 0d 0a 20 20 20  sionSuffix,..   
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
f550: 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74 2c  ing debugFormat,
f560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f570: 20 20 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f    string traceFo
f580: 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
f590: 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
f5a0: 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  ags installFlags
f5b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f5c0: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
f5d0: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 2c 0d   debugPriority,.
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f5f0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
f600: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f620: 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f640: 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20  ol install,..   
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f660: 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
f670: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f680: 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  oRuntimeVersion,
f690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f6a0: 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70    bool noDesktop
f6b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f6c0: 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63     bool noCompac
f6d0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
f6e0: 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
f6f0: 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20,..           
f700: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
f710: 78 33 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x35,..          
f720: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74        bool noNet
f730: 46 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  Fx40,..         
f740: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
f750: 74 46 78 34 35 2c 0d 0a 20 20 20 20 20 20 20 20  tFx45,..        
f760: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
f770: 65 74 46 78 34 35 31 2c 0d 0a 20 20 20 20 20 20  etFx451,..      
f780: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f790: 6f 56 73 32 30 30 35 2c 0d 0a 20 20 20 20 20 20  oVs2005,..      
f7a0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f7b0: 6f 56 73 32 30 30 38 2c 0d 0a 20 20 20 20 20 20  oVs2008,..      
f7c0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f7d0: 6f 56 73 32 30 31 30 2c 0d 0a 20 20 20 20 20 20  oVs2010,..      
f7e0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f7f0: 6f 56 73 32 30 31 32 2c 0d 0a 20 20 20 20 20 20  oVs2012,..      
f800: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f810: 6f 56 73 32 30 31 33 2c 0d 0a 20 20 20 20 20 20  oVs2013,..      
f820: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f830: 6f 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20  oTrace,..       
f840: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
f850: 43 6f 6e 73 6f 6c 65 2c 0d 0a 20 20 20 20 20 20  Console,..      
f860: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f870: 6f 4c 6f 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  oLog,..         
f880: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
f890: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
f8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f8b0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
f8c0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f8d0: 64 65 62 75 67 2c 0d 0a 20 20 20 20 20 20 20 20  debug,..        
f8e0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
f8f0: 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
f900: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6e 66         bool conf
f910: 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  irm..           
f920: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
f930: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f940: 20 20 20 20 20 20 20 74 68 69 73 2e 61 73 73 65         this.asse
f950: 6d 62 6c 79 20 3d 20 61 73 73 65 6d 62 6c 79 3b  mbly = assembly;
f960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f970: 20 20 74 68 69 73 2e 6c 6f 67 46 69 6c 65 4e 61    this.logFileNa
f980: 6d 65 20 3d 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  me = logFileName
f990: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f9a0: 20 20 20 74 68 69 73 2e 64 69 72 65 63 74 6f 72     this.director
f9b0: 79 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a  y = directory;..
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9d0: 74 68 69 73 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  this.coreFileNam
f9e0: 65 20 3d 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  e = coreFileName
f9f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fa00: 20 20 20 74 68 69 73 2e 6c 69 6e 71 46 69 6c 65     this.linqFile
fa10: 4e 61 6d 65 20 3d 20 6c 69 6e 71 46 69 6c 65 4e  Name = linqFileN
fa20: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
fa30: 20 20 20 20 20 20 74 68 69 73 2e 65 66 36 46 69        this.ef6Fi
fa40: 6c 65 4e 61 6d 65 20 3d 20 65 66 36 46 69 6c 65  leName = ef6File
fa50: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
fa60: 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 73 69         this.desi
fa70: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 64  gnerFileName = d
fa80: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
fa90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
faa0: 20 20 74 68 69 73 2e 72 65 67 69 73 74 72 79 56    this.registryV
fab0: 65 72 73 69 6f 6e 20 3d 20 72 65 67 69 73 74 72  ersion = registr
fac0: 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  yVersion;..     
fad0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fae0: 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20  configVersion = 
faf0: 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a  configVersion;..
fb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb10: 74 68 69 73 2e 76 73 56 65 72 73 69 6f 6e 53 75  this.vsVersionSu
fb20: 66 66 69 78 20 3d 20 76 73 56 65 72 73 69 6f 6e  ffix = vsVersion
fb30: 53 75 66 66 69 78 3b 0d 0a 20 20 20 20 20 20 20  Suffix;..       
fb40: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65           this.de
fb50: 62 75 67 46 6f 72 6d 61 74 20 3d 20 64 65 62 75  bugFormat = debu
fb60: 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  gFormat;..      
fb70: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74            this.t
fb80: 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 72 61  raceFormat = tra
fb90: 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ceFormat;..     
fba0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fbb0: 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 69  installFlags = i
fbc0: 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20  nstallFlags;..  
fbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fbe0: 69 73 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79  is.debugPriority
fbf0: 20 3d 20 64 65 62 75 67 50 72 69 6f 72 69 74 79   = debugPriority
fc00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fc10: 20 20 20 74 68 69 73 2e 74 72 61 63 65 50 72 69     this.tracePri
fc20: 6f 72 69 74 79 20 3d 20 74 72 61 63 65 50 72 69  ority = tracePri
fc30: 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
fc40: 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 65 72          this.per
fc50: 55 73 65 72 20 3d 20 70 65 72 55 73 65 72 3b 0d  User = perUser;.
fc60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fc70: 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 20 3d 20   this.install = 
fc80: 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20  install;..      
fc90: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
fca0: 6f 77 36 34 20 3d 20 77 6f 77 36 34 3b 0d 0a 20  ow64 = wow64;.. 
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fcc0: 68 69 73 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72  his.noRuntimeVer
fcd0: 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69 6d 65  sion = noRuntime
fce0: 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
fcf0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
fd00: 6f 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73  oDesktop = noDes
fd10: 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20  ktop;..         
fd20: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f         this.noCo
fd30: 6d 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63  mpact = noCompac
fd40: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
fd50: 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
fd60: 32 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d  20 = noNetFx20;.
fd70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd80: 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 33 35 20   this.noNetFx35 
fd90: 3d 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20  = noNetFx35;..  
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fdb0: 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 6e  is.noNetFx40 = n
fdc0: 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20  oNetFx40;..     
fdd0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fde0: 6e 6f 4e 65 74 46 78 34 35 20 3d 20 6e 6f 4e 65  noNetFx45 = noNe
fdf0: 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx45;..        
fe00: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
fe10: 65 74 46 78 34 35 31 20 3d 20 6e 6f 4e 65 74 46  etFx451 = noNetF
fe20: 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  x451;..         
fe30: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
fe40: 32 30 30 35 20 3d 20 6e 6f 56 73 32 30 30 35 3b  2005 = noVs2005;
fe50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fe60: 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 38 20    this.noVs2008 
fe70: 3d 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20  = noVs2008;..   
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fe90: 73 2e 6e 6f 56 73 32 30 31 30 20 3d 20 6e 6f 56  s.noVs2010 = noV
fea0: 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20  s2010;..        
feb0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
fec0: 73 32 30 31 32 20 3d 20 6e 6f 56 73 32 30 31 32  s2012 = noVs2012
fed0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fee0: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 33     this.noVs2013
fef0: 20 3d 20 6e 6f 56 73 32 30 31 33 3b 0d 0a 20 20   = noVs2013;..  
ff00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
ff10: 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54  is.noTrace = noT
ff20: 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  race;..         
ff30: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f         this.noCo
ff40: 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c  nsole = noConsol
ff50: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ff60: 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d      this.noLog =
ff70: 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20   noLog;..       
ff80: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 68           this.th
ff90: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74  rowOnMissing = t
ffa0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a  hrowOnMissing;..
ffb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffc0: 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68  this.whatIf = wh
ffd0: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
ffe0: 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75         this.debu
fff0: 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20 20 20  g = debug;..    
10000 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10010 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72 62 6f  .verbose = verbo
10020 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
10030 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 72       this.confir
10040 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  m = confirm;..  
10050 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10060 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
10070 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
10080 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
10090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
100d0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
100e0 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65 74  ivate Static Met
100f0 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
10100 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
10110 20 76 6f 69 64 20 47 65 74 44 65 66 61 75 6c 74   void GetDefault
10120 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20  FileNames(..    
10130 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
10140 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
10150 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10160 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f     ref string co
10170 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  reFileName,..   
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
10190 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
101a0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
101b0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
101c0 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a  g ef6FileName,..
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 72 65 66 20 73 74 72 69 6e 67 20 64 65 73 69 67  ref string desig
101f0 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  nerFileName..   
10200 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
10210 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10230 66 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20  f (thisAssembly 
10240 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
10250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10260 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
10270 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f           directo
10280 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72  ry = Path.GetDir
10290 65 63 74 6f 72 79 4e 61 6d 65 28 74 68 69 73 41  ectoryName(thisA
102a0 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e  ssembly.Location
102b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
102c0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
102d0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
102e0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10300 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
10310 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
10320 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
10330 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
10340 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10350 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72         Installer
10360 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .CoreFileName);.
10370 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10380 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20     linqFileName 
10390 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
103a0 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
103c0 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c  nstaller.LinqFil
103d0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
103e0 20 20 20 20 20 20 20 20 20 20 20 65 66 36 46 69             ef6Fi
103f0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
10400 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
10410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10420 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
10430 45 66 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  Ef6FileName);...
10440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10450 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
10460 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
10470 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20  (directory,..   
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10490 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67   Installer.Desig
104a0 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  nerFileName);.. 
104b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
104c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
104d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
10520 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
10530 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d  ol CheckOption(.
10540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10550 20 72 65 66 20 73 74 72 69 6e 67 20 61 72 67 0d   ref string arg.
10560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10570 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
10580 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10590 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74     string result
105a0 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20   = arg;....     
105b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
105c0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
105d0 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d 0a 20  mpty(result)).. 
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
105f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10600 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10620 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c   NOTE: Remove al
10630 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74 63 68  l leading switch
10640 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20 20 20   chars...       
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
10660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10670 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 72 65       result = re
10680 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74 28 53  sult.TrimStart(S
10690 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a  witchChars);....
106a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
106c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
106d0 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68  OTE: How many ch
106e0 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76 65 64  ars were removed
106f0 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
10700 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
10710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10720 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c  nt count = arg.L
10730 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c  ength - result.L
10740 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
10750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10770 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
10780 61 73 20 74 68 65 72 65 20 61 74 20 6c 65 61 73  as there at leas
10790 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20  t one?..        
107a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
107b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107c0 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20      if (count > 
107d0 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
107e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
107f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10800 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10820 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c  / NOTE: Ok, repl
10830 61 63 65 20 74 68 65 69 72 20 6f 72 69 67 69 6e  ace their origin
10840 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  al..            
10850 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
10860 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a       argument...
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10880 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108a0 20 20 20 20 61 72 67 20 3d 20 72 65 73 75 6c 74      arg = result
108b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
108d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
108e0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
108f0 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73 20 61  : Yes, this is a
10900 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20 20 20   switch...      
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
10930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10940 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
10950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10960 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
10970 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10980 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
10990 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
109a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
109b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
109c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10a00 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
10a10 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68  tatic bool Match
10a20 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  Option(..       
10a30 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10a40 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  arg,..          
10a50 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f 70 74        string opt
10a60 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
10a70 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
10a80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10a90 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67 20         if ((arg 
10aa0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74  == null) || (opt
10ab0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ion == null)).. 
10ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ad0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
10ae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10af0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
10b00 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c 20 30  g.Compare(arg, 0
10b10 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20  , option, 0,..  
10b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b30 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74    arg.Length, St
10b40 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
10b50 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
10b60 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ) == 0;..       
10b70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10b80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
10b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
10bd0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
10be0 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61   static bool? Pa
10bf0 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20  rseBoolean(..   
10c00 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
10c10 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20  ing text..      
10c20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
10c30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10c40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10c50 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
10c60 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20  Empty(text))..  
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c90 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b       bool value;
10ca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10cb0 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f 6c          if (bool
10cc0 2e 54 72 79 50 61 72 73 65 28 74 65 78 74 2c 20  .TryParse(text, 
10cd0 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20  out value))..   
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cf0 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
10d00 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10d10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10d20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10d30 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
10d40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10d50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10da0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
10db0 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50 61 72  tatic object Par
10dc0 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
10dd0 20 20 20 20 20 20 20 20 20 54 79 70 65 20 65 6e           Type en
10de0 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20 20 20  umType,..       
10df0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10e00 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  text,..         
10e10 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61         bool noCa
10e20 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
10e30 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
10e40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10e50 20 20 20 20 20 20 69 66 20 28 28 65 6e 75 6d 54        if ((enumT
10e60 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ype == null) || 
10e70 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d  !enumType.IsEnum
10e80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10e90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
10ea0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
10eb0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
10ec0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
10ed0 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20  (text))..       
10ee0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f00 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
10f10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f30 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e      return Enum.
10f40 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65 2c 20  Parse(enumType, 
10f50 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a  text, noCase);..
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10f80 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
10f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10fa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
10fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10fe0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10ff0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11010 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
11020 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11030 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
11040 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11090 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
110a0 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
110b0 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  c Static Methods
110c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
110d0 62 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e 66  blic static Conf
110e0 69 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74 65  iguration Create
110f0 44 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20 20  Default()..     
11100 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11110 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
11120 20 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c   directory = nul
11130 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
11140 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46      string coreF
11150 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
11160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11170 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
11180 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Name = null;..  
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
111a0 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65  ring ef6FileName
111b0 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
111c0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
111d0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
111e0 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
11200 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73  DefaultFileNames
11210 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11220 20 20 20 20 20 20 20 72 65 66 20 64 69 72 65 63         ref direc
11230 74 6f 72 79 2c 20 72 65 66 20 63 6f 72 65 46 69  tory, ref coreFi
11240 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71  leName, ref linq
11250 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
11260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11270 65 66 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 20  ef ef6FileName, 
11280 72 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ref designerFile
11290 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
112a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
112b0 20 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69   new Configurati
112c0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
112d0 20 20 20 20 20 20 20 20 20 74 68 69 73 41 73 73           thisAss
112e0 65 6d 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72  embly, null, dir
112f0 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65  ectory, coreFile
11300 4e 61 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e 61  Name, linqFileNa
11310 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
11320 20 20 20 20 20 20 20 20 20 65 66 36 46 69 6c 65           ef6File
11330 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65 72 46 69  Name, designerFi
11340 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75  leName, null, nu
11350 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ll, null,..     
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
11370 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
11380 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 54 72  mat, TraceOps.Tr
11390 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  aceFormat,..    
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113b0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66  InstallFlags.Def
113c0 61 75 6c 74 2c 20 54 72 61 63 65 50 72 69 6f 72  ault, TracePrior
113d0 69 74 79 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20  ity.Default,..  
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113f0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
11400 44 65 66 61 75 6c 74 2c 20 66 61 6c 73 65 2c 20  Default, false, 
11410 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  true, false, fal
11420 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20  se, false,..    
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
11450 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
11460 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
11470 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20   false,..       
11480 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
11490 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
114a0 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
114b0 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 74 72 75  false, true, tru
114c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
114d0 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66          false, f
114e0 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20  alse, false);.. 
114f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11500 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
11510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
11550 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
11560 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
11570 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
11580 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
11590 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
115a0 61 74 69 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72  atic bool FromAr
115b0 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
115c0 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
115d0 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
115e0 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74       bool strict
115f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11600 20 20 20 72 65 66 20 43 6f 6e 66 69 67 75 72 61     ref Configura
11610 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
11620 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
11630 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
11640 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
11650 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
11660 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11670 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
11680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
116a0 20 20 20 20 20 69 66 20 28 61 72 67 73 20 3d 3d       if (args ==
116b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116d0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a  return true;....
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116f0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
11700 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ation == null)..
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11720 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
11730 61 74 69 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72  ation = Configur
11740 61 74 69 6f 6e 2e 43 72 65 61 74 65 44 65 66 61  ation.CreateDefa
11750 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ult();....      
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
11770 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 67 73 2e  t length = args.
11780 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
117a0 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
117b0 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
117c0 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
117f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
11800 6e 67 20 61 72 67 20 3d 20 61 72 67 73 5b 69 6e  ng arg = args[in
11810 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11830 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11850 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6e 79 20 61  NOTE: Skip any a
11860 72 67 75 6d 65 6e 74 20 74 68 61 74 20 69 73 20  rgument that is 
11870 6e 75 6c 6c 20 28 3f 29 20 6f 72 20 61 6e 20 65  null (?) or an e
11880 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mpty..          
11890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
118a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a         string...
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
118d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118e0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
118f0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67  sNullOrEmpty(arg
11900 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
11930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11940 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61 72 65   // NOTE: We are
11970 20 67 6f 69 6e 67 20 74 6f 20 6d 6f 64 69 66 79   going to modify
11980 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72   the original ar
11990 67 75 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  gument..        
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119b0 2f 2f 20 20 20 20 20 20 20 62 79 20 72 65 6d 6f  //       by remo
119c0 76 69 6e 67 20 61 6e 79 20 6c 65 61 64 69 6e 67  ving any leading
119d0 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65   option characte
119e0 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
119f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11a00 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
11a10 20 77 65 20 75 73 65 20 61 20 6e 65 77 20 73 74   we use a new st
11a20 72 69 6e 67 20 74 6f 20 68 6f 6c 64 20 74 68 65  ring to hold the
11a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11a40 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
11a50 20 20 20 6d 6f 64 69 66 69 65 64 20 61 72 67 75     modified argu
11a60 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  ment...         
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11a80 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
11a90 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
11aa0 67 20 6e 65 77 41 72 67 20 3d 20 61 72 67 3b 0d  g newArg = arg;.
11ab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ae0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
11af0 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65  All the supporte
11b00 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  d command line o
11b10 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20  ptions must..   
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65       //       be
11b40 67 69 6e 20 77 69 74 68 20 61 6e 20 6f 70 74 69  gin with an opti
11b50 6f 6e 20 63 68 61 72 61 63 74 65 72 20 28 65 2e  on character (e.
11b60 67 2e 20 61 20 6d 69 6e 75 73 0d 0a 20 20 20 20  g. a minus..    
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 72 20      //       or 
11b90 66 6f 72 77 61 72 64 20 73 6c 61 73 68 29 3b 20  forward slash); 
11ba0 61 74 74 65 6d 70 74 20 74 6f 20 76 61 6c 69 64  attempt to valid
11bb0 61 74 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20  ate that..      
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bd0 20 20 2f 2f 20 20 20 20 20 20 20 6e 6f 77 2e 20    //       now. 
11be0 20 49 66 20 77 65 20 66 61 69 6c 20 69 6e 20 73   If we fail in s
11bf0 74 72 69 63 74 20 6d 6f 64 65 2c 20 77 65 20 61  trict mode, we a
11c00 72 65 20 64 6f 6e 65 3b 0d 0a 20 20 20 20 20 20  re done;..      
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68 65 72    //       other
11c30 77 69 73 65 2c 20 6a 75 73 74 20 73 6b 69 70 20  wise, just skip 
11c40 74 68 69 73 20 61 72 67 75 6d 65 6e 74 20 61 6e  this argument an
11c50 64 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20  d advance..     
11c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c70 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 74     //       to t
11c80 68 65 20 6e 65 78 74 20 6f 6e 65 2e 0d 0a 20 20  he next one...  
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ca0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cc0 20 20 69 66 20 28 21 43 68 65 63 6b 4f 70 74 69    if (!CheckOpti
11cd0 6f 6e 28 72 65 66 20 6e 65 77 41 72 67 29 29 0d  on(ref newArg)).
11ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11cf0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d10 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
11d20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
11d30 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d50 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
11d60 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
11d70 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11da0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
11db0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
11de0 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61  nsupported comma
11df0 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd line argument
11e00 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
11e30 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
11e40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
11e70 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
11e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
11ea0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ec0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ee0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 20 20 20 20 2f 2f 0d 0a 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 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65  // NOTE: All the
11f30 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61   supported comma
11f40 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20  nd line options 
11f50 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11f70 20 20 20 20 20 20 20 68 61 76 65 20 61 20 76 61         have a va
11f80 6c 75 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  lue; therefore, 
11f90 61 74 74 65 6d 70 74 20 74 6f 20 61 64 76 61 6e  attempt to advan
11fa0 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
11fc0 20 20 20 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20       to it now. 
11fd0 20 49 66 20 77 65 20 66 61 69 6c 2c 20 77 65 20   If we fail, we 
11fe0 61 72 65 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20  are done...     
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12020 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  ndex++;....     
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d 20     if (index >= 
12050 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20  length)..       
12060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12070 20 7b 0d 0a 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 20 20 20                  
12090 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
120a0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
120b0 0a 20 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 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
120e0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
120f0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12110 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
12120 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
12130 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
12140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12150 20 20 20 20 20 20 22 4d 69 73 73 69 6e 67 20 76        "Missing v
12160 61 6c 75 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a  alue for option:
12170 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12190 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
121a0 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 43  ay(arg)), traceC
121b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121d0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
121e0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
121f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12200 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
12210 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12230 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12250 20 20 20 7d 0d 0a 0d 0a 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 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
12280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
12290 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 74 65  OTE: Grab the te
122a0 78 74 75 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  xtual value of t
122b0 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  his command line
122c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
122d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
122e0 20 20 20 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20     option...    
122f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12300 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12320 73 74 72 69 6e 67 20 74 65 78 74 20 3d 20 61 72  string text = ar
12330 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  gs[index];....  
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12350 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
12360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12370 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72    // NOTE: Figur
12380 65 20 6f 75 74 20 77 68 69 63 68 20 63 6f 6d 6d  e out which comm
12390 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20  and line option 
123a0 74 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20  this is..       
123b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123c0 20 2f 2f 20 20 20 20 20 20 20 28 62 61 73 65 64   //       (based
123d0 20 6f 6e 20 61 20 70 61 72 74 69 61 6c 20 6e 61   on a partial na
123e0 6d 65 20 6d 61 74 63 68 29 20 61 6e 64 20 74 68  me match) and th
123f0 65 6e 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20  en try..        
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 6e 74 65  //       to inte
12420 72 70 72 65 74 20 74 68 65 20 74 65 78 74 75 61  rpret the textua
12430 6c 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 63  l value as the c
12440 6f 72 72 65 63 74 0d 0a 20 20 20 20 20 20 20 20  orrect..        
12450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12460 2f 2f 20 20 20 20 20 20 20 74 79 70 65 2e 0d 0a  //       type...
12470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12480 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 69 66 20 28 4d 61 74 63 68 4f 70 74      if (MatchOpt
124b0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e  ion(newArg, "con
124c0 66 69 67 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20  figVersion")).. 
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124e0 20 20 20 20 20 20 20 7b 0d 0a 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 20 63 6f 6e 66 69 67 75 72 61 74        configurat
12510 69 6f 6e 2e 63 6f 6e 66 69 67 56 65 72 73 69 6f  ion.configVersio
12520 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  n = text;..     
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12540 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
12560 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12570 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66  on(newArg, "conf
12580 69 72 6d 22 29 29 0d 0a 20 20 20 20 20 20 20 20  irm"))..        
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
125c0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
125d0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
125e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12600 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
12610 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12630 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12650 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
12660 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
12670 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
12680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12690 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
126a0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
126b0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126e0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
126f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
12700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12720 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
12730 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
12740 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12760 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
12770 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
12780 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
12790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
127a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
127c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127e0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
127f0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12810 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
12820 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
12830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12840 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
12850 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12870 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12890 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
128a0 63 6f 6e 66 69 72 6d 20 3d 20 28 62 6f 6f 6c 29  confirm = (bool)
128b0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
128e0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
128f0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12900 6e 65 77 41 72 67 2c 20 22 63 6f 72 65 46 69 6c  newArg, "coreFil
12910 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
12960 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65  oreFileName = te
12970 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129a0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
129b0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
129c0 41 72 67 2c 20 22 64 65 62 75 67 22 29 29 0d 0a  Arg, "debug"))..
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 7b 0d 0a 20 20 20 20 20          {..     
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
12a10 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
12a20 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
12a50 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a90 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
12aa0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
12ab0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ae0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
12af0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
12b00 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12b30 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
12b40 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
12b70 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
12b80 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
12b90 20 20 20 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 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
12bc0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
12bd0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
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 20 20 20 20 20 74 72 61               tra
12c00 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
12c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c60 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
12c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cd0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
12ce0 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 20 3d 20  uration.debug = 
12cf0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d30 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
12d40 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
12d50 65 62 75 67 46 6f 72 6d 61 74 22 29 29 0d 0a 20  ebugFormat")).. 
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 7b 0d 0a 20 20 20 20 20 20         {..      
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d90 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
12da0 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 20  ion.debugFormat 
12db0 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dd0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
12de0 62 75 67 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66  bugFormat = conf
12df0 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46  iguration.debugF
12e00 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
12e30 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
12e40 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12e50 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 50 72  newArg, "debugPr
12e60 69 6f 72 69 74 79 22 29 29 0d 0a 20 20 20 20 20  iority"))..     
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ea0 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
12eb0 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20   ParseEnum(..   
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
12ee0 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69 74  eof(TracePriorit
12ef0 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b  y), text, true);
12f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
12f30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f70 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
12f80 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
12f90 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fb0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
12fc0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
12fd0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13000 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
13010 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
13020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
13050 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  } value: {1}",..
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13080 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
13090 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
130a0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
130d0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13100 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13130 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
13140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13160 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13180 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
13190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
131b0 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69  uration.debugPri
131c0 6f 72 69 74 79 20 3d 20 28 54 72 61 63 65 50 72  ority = (TracePr
131d0 69 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20  iority)value;.. 
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131f0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
13200 4f 70 73 2e 44 65 62 75 67 50 72 69 6f 72 69 74  Ops.DebugPriorit
13210 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  y = configuratio
13220 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b  n.debugPriority;
13230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13240 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13260 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
13270 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
13280 2c 20 22 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  , "designerFileN
13290 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ame"))..        
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132b0 7b 0d 0a 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 63                 c
132d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73  onfiguration.des
132e0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
132f0 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13320 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
13330 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
13340 65 77 41 72 67 2c 20 22 64 69 72 65 63 74 6f 72  ewArg, "director
13350 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  y"))..          
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13390 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63  figuration.direc
133a0 74 6f 72 79 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a  tory = text;....
133b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
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 20 20 2f 2f 20 4e              // N
133f0 4f 54 45 3a 20 2a 53 50 45 43 49 41 4c 2a 20 4d  OTE: *SPECIAL* M
13400 75 73 74 20 72 65 66 72 65 73 68 20 74 68 65 20  ust refresh the 
13410 66 69 6c 65 20 6e 61 6d 65 73 0d 0a 20 20 20 20  file names..    
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
13440 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74 68   here because th
13450 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 69 72  e underlying dir
13460 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..        
13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13480 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61 73      //       has
13490 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20   changed...     
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
134e0 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e  reFileName = con
134f0 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46  figuration.coreF
13500 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
13530 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
13540 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29  y(coreFileName))
13550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13570 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d    coreFileName =
13580 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
13590 65 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  e(coreFileName);
135a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
135d0 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c  lOrEmpty(coreFil
135e0 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
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 63 6f 72 65 46 69 6c           coreFil
13610 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65  eName = Installe
13620 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d  r.CoreFileName;.
13630 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13650 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72  onfiguration.cor
13660 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  eFileName = Path
13670 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
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 63 6f 6e 66 69             confi
136a0 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f  guration.directo
136b0 72 79 2c 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ry, coreFileName
136c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c    string linqFil
136f0 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72  eName = configur
13700 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61  ation.linqFileNa
13710 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
13720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13730 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
13740 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e  sNullOrEmpty(lin
13750 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  qFileName))..   
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 20 20 20 20 20 20 6c 69 6e               lin
13780 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  qFileName = Path
13790 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 6c 69 6e  .GetFileName(lin
137a0 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  qFileName);.... 
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
137d0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
137e0 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  pty(linqFileName
137f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13810 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65      linqFileName
13820 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e   = Installer.Lin
13830 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  qFileName;....  
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
13860 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65  uration.linqFile
13870 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
13880 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ine(..          
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
138b0 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 6c  ion.directory, l
138c0 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  inqFileName);...
138d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
138f0 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 20  ing ef6FileName 
13900 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
13910 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  ef6FileName;....
13920 20 20 20 20 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 69 66 20 28              if (
13940 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
13950 45 6d 70 74 79 28 65 66 36 46 69 6c 65 4e 61 6d  Empty(ef6FileNam
13960 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13980 20 20 20 20 20 65 66 36 46 69 6c 65 4e 61 6d 65       ef6FileName
13990 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e   = Path.GetFileN
139a0 61 6d 65 28 65 66 36 46 69 6c 65 4e 61 6d 65 29  ame(ef6FileName)
139b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139d0 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
139e0 6c 6c 4f 72 45 6d 70 74 79 28 65 66 36 46 69 6c  llOrEmpty(ef6Fil
139f0 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
13a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a10 20 20 20 20 20 20 20 20 20 65 66 36 46 69 6c 65           ef6File
13a20 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72  Name = Installer
13a30 2e 45 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  .Ef6FileName;...
13a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13a50 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13a60 66 69 67 75 72 61 74 69 6f 6e 2e 65 66 36 46 69  figuration.ef6Fi
13a70 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
13a80 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13aa0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
13ab0 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
13ac0 20 65 66 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a   ef6FileName);..
13ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
13af0 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c  ring designerFil
13b00 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72  eName = configur
13b10 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69  ation.designerFi
13b20 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
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 69 66 20 28 21 53 74 72 69         if (!Stri
13b50 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
13b60 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  (designerFileNam
13b70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b90 20 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c       designerFil
13ba0 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
13bb0 46 69 6c 65 4e 61 6d 65 28 64 65 73 69 67 6e 65  FileName(designe
13bc0 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  rFileName);.... 
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
13bf0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
13c00 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65  pty(designerFile
13c10 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72          designer
13c40 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61  FileName = Insta
13c50 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c  ller.DesignerFil
13c60 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
13c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c80 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13c90 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65  ion.designerFile
13ca0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
13cb0 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ine(..          
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13ce0 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 64  ion.directory, d
13cf0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
13d00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13d10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
13d40 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
13d50 67 2c 20 22 65 66 36 46 69 6c 65 4e 61 6d 65 22  g, "ef6FileName"
13d60 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13d70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d90 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
13da0 67 75 72 61 74 69 6f 6e 2e 65 66 36 46 69 6c 65  guration.ef6File
13db0 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20  Name = text;..  
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13df0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
13e00 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69  ption(newArg, "i
13e10 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20  nstall"))..     
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
13e60 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
13e70 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
13ea0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ec0 20 20 20 7b 0d 0a 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 65 72 72 6f 72 20 3d 20 54 72        error = Tr
13ef0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
13f00 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
13f30 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
13f40 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
13f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
13f80 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
13f90 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fb0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
13fc0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
13fd0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
14000 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
14010 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
14020 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14040 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
14050 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14070 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
14080 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
140b0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
140e0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14100 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
14130 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f  on.install = (bo
14140 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
14180 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
14190 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74  on(newArg, "inst
141a0 61 6c 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20 20  allFlags"))..   
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
141d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141e0 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
141f0 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20   = ParseEnum(.. 
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14220 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61  ypeof(InstallFla
14230 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29  gs), text, true)
14240 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
14270 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14290 20 7b 0d 0a 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 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
142c0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
142d0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
14300 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
14310 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
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 20 20 20 20 20                  
14340 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
14350 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
14360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14380 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 69        "Invalid i
14390 6e 73 74 61 6c 6c 20 66 6c 61 67 73 20 76 61 6c  nstall flags val
143a0 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ue: {0}",..     
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
143d0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
143e0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
143f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14410 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
14420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14440 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
14450 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14470 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
14480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
144a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
144b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
144c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73  onfiguration.ins
144d0 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73  tallFlags = (Ins
144e0 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b  tallFlags)value;
144f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14500 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
14530 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
14540 2c 20 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 22  , "linqFileName"
14550 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
14560 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14580 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
14590 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c  guration.linqFil
145a0 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
145d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145e0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
145f0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
14600 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  logFileName"))..
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14620 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14640 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
14650 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  tion.logFileName
14660 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14680 20 20 7d 0d 0a 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 65 6c 73               els
146a0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
146b0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d  n(newArg, "noCom
146c0 70 61 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20  pact"))..       
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14700 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
14710 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
14720 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14740 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
14750 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14790 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
147a0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
147b0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147d0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
147e0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
147f0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
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 20 20 20 20 20 20 20 20 20                  
14820 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
14830 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
14840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14860 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
14870 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
14880 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
14890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
148b0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
148c0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
148d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
14900 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14920 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
14930 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
14960 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
14990 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149b0 20 20 7d 0d 0a 0d 0a 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 20                  
149d0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
149e0 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f  .noCompact = (bo
149f0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 20 20 7d 0d 0a 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 65 6c                el
14a30 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
14a40 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f  on(newArg, "noCo
14a50 6e 73 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20 20  nsole"))..      
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a90 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
14aa0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
14ab0 29 3b 0d 0a 0d 0a 20 20 20 20 20 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
14ae0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
14b30 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
14b40 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
14b70 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
14b80 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
14bc0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
14bd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
14c00 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
14c10 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
14c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
14c40 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
14c50 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
14c60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
14c90 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
14cc0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ce0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
14cf0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
14d20 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
14d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d60 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
14d70 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28 62  n.noConsole = (b
14d80 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
14db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14dc0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
14dd0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 44  ion(newArg, "noD
14de0 65 73 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20 20  esktop"))..     
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e00 20 20 20 7b 0d 0a 20 20 20 20 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
14e30 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
14e40 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
14e70 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
14ec0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
14ed0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ef0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
14f00 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
14f10 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
14f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
14f50 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
14f60 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f80 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
14f90 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
14fa0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
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 20 20 20 20 20 20 20 46                 F
14fd0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
14fe0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
14ff0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15010 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
15020 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
15050 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15070 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
15080 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
150b0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150f0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15100 6f 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28  on.noDesktop = (
15110 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
15160 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
15170 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20  Log"))..        
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
151b0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
151c0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
151d0 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
15200 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15240 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
15250 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
15260 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
15270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15280 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
15290 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
152a0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152d0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
152e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
152f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15310 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
15320 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
15330 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
15340 20 20 20 20 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 46 6f 72 44              ForD
15360 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
15370 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
15380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153a0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
153b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
153e0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
15410 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15430 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
15440 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15460 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15480 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
15490 6e 6f 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61  noLog = (bool)va
154a0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
154c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
154d0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
154e0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
154f0 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30  wArg, "noNetFx20
15500 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 62 6f 6f 6c              bool
15540 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
15550 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
15560 0a 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 69 66 20               if 
15580 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
15590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
155a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 20 20 20 20                  
155d0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
155e0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
155f0 0a 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 20                  
15610 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
15620 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
15630 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15660 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
15670 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
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 20 20 20 20 20 20 20 20 20                  
156a0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
156b0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
156c0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
156d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156e0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
156f0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
15700 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
15740 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15760 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
15770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15790 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
157a0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157c0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
157d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
157f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15810 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
15820 65 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76  etFx20 = (bool)v
15830 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15860 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
15870 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
15880 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 33  ewArg, "noNetFx3
15890 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  5"))..          
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
158b0 0a 20 20 20 20 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 62 6f 6f               boo
158d0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
158e0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
158f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15910 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
15920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
15970 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
15980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159a0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
159b0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
159c0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
15a00 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
15a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
15a40 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
15a50 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
15a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a70 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
15a80 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
15a90 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
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 20 20 20 20 20 20 20                  
15ac0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
15ad0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15af0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
15b00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
15b30 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b50 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
15b60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15b80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ba0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
15bb0 4e 65 74 46 78 33 35 20 3d 20 28 62 6f 6f 6c 29  NetFx35 = (bool)
15bc0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15be0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15bf0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
15c00 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
15c10 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78  newArg, "noNetFx
15c20 34 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  40"))..         
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
15c40 0d 0a 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 20 62 6f                bo
15c60 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
15c70 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
15c80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15ca0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
15cb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
15cd0 0d 0a 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 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
15d00 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
15d10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
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 54 72 61 63 65 50 72 69 6f         TracePrio
15d40 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
15d50 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
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 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
15d90 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dc0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
15dd0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
15de0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
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 46 6f 72 44 69             ForDi
15e10 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
15e20 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
15e60 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
15e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e80 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
15e90 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
15ec0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ee0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
15ef0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f30 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
15f40 6f 4e 65 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c  oNetFx40 = (bool
15f50 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
15f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15f80 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
15f90 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
15fa0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
15fb0 78 34 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20  x45"))..        
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
15ff0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
16000 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
16010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16030 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
16040 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16060 7b 0d 0a 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 20                  
16080 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
16090 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
160a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
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 54 72 61 63 65 50 72 69          TracePri
160d0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
160e0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
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 20 20 20 20                  
16110 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
16120 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
16130 0a 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 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
16160 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
16170 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
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 46 6f 72 44              ForD
161a0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
161b0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
161c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
161f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16210 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
16220 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16240 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16250 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
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 20 63 6f 6e 74 69 6e            contin
16280 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162c0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
162d0 6e 6f 4e 65 74 46 78 34 35 20 3d 20 28 62 6f 6f  noNetFx45 = (boo
162e0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16300 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
16320 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
16330 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74  n(newArg, "noNet
16340 46 78 34 35 31 22 29 29 0d 0a 20 20 20 20 20 20  Fx451"))..      
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16360 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16380 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
16390 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
163a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
163b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163c0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
163d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
163e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
16420 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
16430 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
16440 20 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 54 72 61 63 65 50            TraceP
16460 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
16470 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
16480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
164b0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
164c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
164d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164e0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
164f0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
16500 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
16530 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
16540 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
16550 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16570 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
16580 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
165b0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
165e0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16600 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
16610 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
16660 6e 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20 28  n.noNetFx451 = (
16670 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
16680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16690 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
166a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166b0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
166c0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
166d0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 29  RuntimeVersion")
166e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
166f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16710 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
16720 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
16730 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16750 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
16760 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16780 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
167b0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
167c0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
167d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
16800 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
16810 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
16820 20 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 20 20 20 20 74 72 61               tra
16840 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
16850 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
16890 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
168a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
168b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168c0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
168d0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
168e0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
16920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16940 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
16950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16970 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
16980 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
169d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
169f0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e  figuration.noRun
16a00 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 28 62  timeVersion = (b
16a10 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
16a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
16a50 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
16a60 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 54  ion(newArg, "noT
16a70 72 61 63 65 22 29 29 0d 0a 20 20 20 20 20 20 20  race"))..       
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ab0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
16ac0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
16ad0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
16b00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b40 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
16b50 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
16b60 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b80 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
16b90 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
16ba0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bd0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
16be0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
16bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c10 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
16c20 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
16c30 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
16c60 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
16c70 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
16c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
16cb0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
16ce0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16d10 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d30 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
16d40 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d80 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
16d90 2e 6e 6f 54 72 61 63 65 20 3d 20 28 62 6f 6f 6c  .noTrace = (bool
16da0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16dd0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
16de0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
16df0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30  (newArg, "noVs20
16e00 30 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  05"))..         
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
16e40 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
16e50 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
16e60 0a 0d 0a 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 69                 i
16e80 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
16e90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ed0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
16ee0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
16ef0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f10 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
16f20 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
16f30 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f60 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
16f70 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fa0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
16fb0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
16fc0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fe0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
16ff0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
17000 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
17040 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
17050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17060 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
17070 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
170a0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
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 20 20 63 6f 6e 74 69 6e 75           continu
170d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170f0 7d 0d 0a 0d 0a 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 20 20                  
17110 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
17120 6f 56 73 32 30 30 35 20 3d 20 28 62 6f 6f 6c 29  oVs2005 = (bool)
17130 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
17160 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
17170 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
17180 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 30  newArg, "noVs200
17190 38 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  8"))..          
171a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
171b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
171d0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
171e0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
171f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
17210 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
17220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
17270 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
17280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
172b0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
172c0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
17300 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
17310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17330 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
17340 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
17350 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
17360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17370 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
17380 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
17390 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
173d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173f0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
17400 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
17430 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
17440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17450 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
17460 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17480 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
174b0 56 73 32 30 30 38 20 3d 20 28 62 6f 6f 6c 29 76  Vs2008 = (bool)v
174c0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
174e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
174f0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
17500 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
17510 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 30  ewArg, "noVs2010
17520 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17550 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
17560 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
17570 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
17580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
175a0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
175b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175f0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
17600 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
17610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17630 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
17640 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
17650 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17680 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
17690 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
176a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
176d0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
176e0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17700 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
17710 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
17720 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17750 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
17760 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
17790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
177c0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177e0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
177f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17810 0a 0d 0a 20 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 20 20 20 63                 c
17830 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
17840 73 32 30 31 30 20 3d 20 28 62 6f 6f 6c 29 76 61  s2010 = (bool)va
17850 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17880 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
17890 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
178a0 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 32 22  wArg, "noVs2012"
178b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
178c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
178f0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
17900 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17920 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17930 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17980 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
17990 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
179a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
179d0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
179e0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
17a10 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
17a20 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
17a60 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
17a70 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
17a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a90 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
17aa0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
17ab0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
17ac0 20 20 20 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 20 20 20 20 20                  
17ae0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
17af0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b10 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
17b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b40 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
17b50 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
17b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17bc0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
17bd0 32 30 31 32 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  2012 = (bool)val
17be0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
17c20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
17c30 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 33 22 29  Arg, "noVs2013")
17c40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17c50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c70 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
17c80 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
17c90 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
17cc0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ce0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
17d10 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
17d20 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
17d60 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
17d70 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
17da0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
17db0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17de0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
17df0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
17e00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
17e30 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
17e40 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
17e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
17e80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ea0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
17ee0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17f50 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
17f60 30 31 33 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  013 = (bool)valu
17f70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17f80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fa0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
17fb0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
17fc0 72 67 2c 20 22 70 65 72 55 73 65 72 22 29 29 0d  rg, "perUser")).
17fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17fe0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18000 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
18010 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
18020 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
18030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18040 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
18050 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18070 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18090 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
180a0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
180b0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180e0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
180f0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
18100 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18120 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
18130 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
18140 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
18150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
18170 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
18180 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
18190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181b0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
181c0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
181d0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
181e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
18200 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
18210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
18270 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18290 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
182e0 67 75 72 61 74 69 6f 6e 2e 70 65 72 55 73 65 72  guration.perUser
182f0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
18300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18310 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18330 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
18340 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
18350 20 22 72 65 67 69 73 74 72 79 56 65 72 73 69 6f   "registryVersio
18360 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n"))..          
18370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18390 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
183a0 66 69 67 75 72 61 74 69 6f 6e 2e 72 65 67 69 73  figuration.regis
183b0 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 74 65 78  tryVersion = tex
183c0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
183d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
183e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183f0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
18400 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
18410 72 67 2c 20 22 73 74 72 69 63 74 22 29 29 0d 0a  rg, "strict"))..
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18430 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18450 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
18460 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
18470 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18490 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
184a0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 20 20 20 65 72 72 6f 72             error
184f0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
18500 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
18540 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
18550 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18580 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
18590 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
185c0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
185d0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18600 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
18610 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
18620 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
18650 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18680 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
186c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186e0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18720 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18740 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
18750 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20 63 6f 6d  E: Allow the com
18760 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65  mand line argume
18770 6e 74 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  nts to..        
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 76 65      //       ove
187a0 72 72 69 64 65 20 74 68 65 20 22 73 74 72 69 63  rride the "stric
187b0 74 6e 65 73 73 22 20 73 65 74 74 69 6e 67 0d 0a  tness" setting..
187c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
187e0 20 20 20 20 20 70 72 6f 76 69 64 65 64 20 62 79       provided by
187f0 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...  
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18830 20 20 20 20 20 20 20 20 20 20 73 74 72 69 63 74            strict
18840 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
18850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18860 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18880 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
18890 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
188a0 20 22 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67   "throwOnMissing
188b0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
188f0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
18900 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
18910 0a 20 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 69 66 20               if 
18930 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
18940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18960 20 20 20 20 20 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 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
18990 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
189a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189c0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
189d0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
189e0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18a10 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
18a20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
18a60 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
18a70 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
18aa0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
18ab0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
18af0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b10 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
18b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
18b50 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b70 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
18b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18ba0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18bc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 68 72  onfiguration.thr
18bd0 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 28 62  owOnMissing = (b
18be0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
18c20 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
18c30 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61  ion(newArg, "tra
18c40 63 65 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20  ceFormat"))..   
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
18c90 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  n.traceFormat = 
18ca0 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
18cd0 65 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67  eFormat = config
18ce0 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72  uration.traceFor
18cf0 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
18d30 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
18d40 77 41 72 67 2c 20 22 74 72 61 63 65 50 72 69 6f  wArg, "tracePrio
18d50 72 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20  rity"))..       
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50  object value = P
18da0 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20  arseEnum(..     
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dc0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
18dd0 66 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29  f(TracePriority)
18de0 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a  , text, true);..
18df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18e10 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
18e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
18e70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
18e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
18eb0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
18ec0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
18f00 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
18f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
18f40 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
18f80 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
18f90 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
18fc0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18ff0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19020 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19050 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
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 63 6f 6e 66 69 67 75 72          configur
190a0 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
190b0 69 74 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f  ity = (TracePrio
190c0 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20  rity)value;..   
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190e0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
190f0 73 2e 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  s.TracePriority 
19100 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
19110 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a  tracePriority;..
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19130 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
19160 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
19170 22 76 65 72 62 6f 73 65 22 29 29 0d 0a 20 20 20  "verbose"))..   
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19190 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191b0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
191c0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
191d0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191f0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
19200 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
19250 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
19260 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19290 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
192a0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
192b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
192e0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
192f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19310 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
19320 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
19330 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19360 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
19370 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
19380 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
193b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
193e0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19410 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19440 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19460 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
19490 74 69 6f 6e 2e 76 65 72 62 6f 73 65 20 3d 20 28  tion.verbose = (
194a0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194e0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
194f0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 73  tion(newArg, "vs
19500 56 65 72 73 69 6f 6e 53 75 66 66 69 78 22 29 29  VersionSuffix"))
19510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19520 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
19550 72 61 74 69 6f 6e 2e 76 73 56 65 72 73 69 6f 6e  ration.vsVersion
19560 53 75 66 66 69 78 20 3d 20 74 65 78 74 3b 0d 0a  Suffix = text;..
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19580 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195a0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
195b0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
195c0 22 77 68 61 74 49 66 22 29 29 0d 0a 20 20 20 20  "whatIf"))..    
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
19610 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
19620 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19640 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
19650 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19690 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
196a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
196b0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196d0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
196e0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
196f0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
19700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
19730 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
19740 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
19750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19760 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
19770 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
19780 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197b0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
197c0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
197d0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
19800 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19830 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
19860 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
19890 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
198e0 69 6f 6e 2e 77 68 61 74 49 66 20 3d 20 28 62 6f  ion.whatIf = (bo
198f0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19910 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
19930 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
19940 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77 6f 77 36  on(newArg, "wow6
19950 34 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  4"))..          
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
19990 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
199a0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
199b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
199c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
199d0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
199e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
19a30 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
19a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
19a70 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
19a80 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ab0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
19ac0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
19b00 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
19b10 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b30 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
19b40 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
19b50 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
19b90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
19bc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
19bf0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
19c20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19c40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 6f  configuration.wo
19c70 77 36 34 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  w64 = (bool)valu
19c80 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19c90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cb0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cf0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
19d00 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
19d10 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d30 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
19d40 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
19d50 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
19d80 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
19d90 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
19da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19db0 20 20 20 20 20 20 20 20 20 20 22 55 6e 73 75 70            "Unsup
19dc0 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
19dd0 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22  ine option: {0}"
19de0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e00 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
19e10 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  g)), traceCatego
19e20 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
19e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e40 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
19e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e70 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19eb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19ec0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
19ed0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
19ee0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19ef0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
19f00 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
19f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f30 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
19f40 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
19f50 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
19f60 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
19f70 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
19f80 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
19f90 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61  Callback, e, tra
19fa0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fc0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69      error = "Fai
19fd0 6c 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 63 6f  led to modify co
19fe0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a  nfiguration.";..
19ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a000 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1a010 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1a020 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1a030 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1a040 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1a050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a080 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1a090 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
1a0a0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
1a0b0 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1a0d0 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  ic static bool P
1a0e0 72 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20 20  rocess(..       
1a0f0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
1a100 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20  ] args,..       
1a110 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
1a120 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
1a130 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
1a140 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69         bool stri
1a150 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct,..           
1a160 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1a170 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
1a180 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1a190 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a1a0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1a1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a1d0 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
1a1e0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ration == null).
1a1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a200 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64  error = "Invalid
1a230 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
1a240 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a250 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1a260 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a280 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a290 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
1a2a0 61 73 73 65 6d 62 6c 79 20 3d 20 63 6f 6e 66 69  assembly = confi
1a2b0 67 75 72 61 74 69 6f 6e 2e 61 73 73 65 6d 62 6c  guration.assembl
1a2c0 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
1a2d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
1a2e0 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d  sembly == null).
1a2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a300 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a320 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64  error = "Invalid
1a330 20 61 73 73 65 6d 62 6c 79 2e 22 3b 0d 0a 20 20   assembly.";..  
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a350 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1a360 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1a370 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
1a3a0 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 29 0d 0a 20  tion.noTrace).. 
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a3e0 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
1a3f0 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20  .noLog &&..     
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 49 73         String.Is
1a420 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66  NullOrEmpty(conf
1a430 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
1a440 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a460 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a480 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65  // NOTE: Use the
1a4b0 20 64 65 66 61 75 6c 74 20 6c 6f 67 20 66 69 6c   default log fil
1a4c0 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20  e name...       
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4e0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a500 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1a510 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d  on.logFileName =
1a520 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28   GetLogFileName(
1a530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a550 20 20 22 74 72 61 63 65 22 29 3b 0d 0a 20 20 20    "trace");..   
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a570 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a590 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1a5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5e0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
1a5f0 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c  uration.noConsol
1a600 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1a610 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a630 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1a660 54 45 3a 20 49 6e 20 76 65 72 62 6f 73 65 20 6d  TE: In verbose m
1a670 6f 64 65 2c 20 64 65 62 75 67 20 6f 75 74 70 75  ode, debug outpu
1a680 74 20 28 74 68 61 74 20 6d 65 65 74 73 0d 0a 20  t (that meets.. 
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1a6b0 20 20 20 20 74 68 65 20 63 6f 6e 66 69 67 75 72      the configur
1a6c0 65 64 20 70 72 69 6f 72 69 74 79 20 63 72 69 74  ed priority crit
1a6d0 65 72 69 61 29 20 77 69 6c 6c 20 62 65 0d 0a 20  eria) will be.. 
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1a700 20 20 20 20 64 69 73 70 6c 61 79 65 64 20 74 6f      displayed to
1a710 20 74 68 65 20 63 6f 6e 73 6f 6c 65 3b 20 6f 74   the console; ot
1a720 68 65 72 77 69 73 65 2c 20 74 72 61 63 65 0d 0a  herwise, trace..
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a750 20 20 20 20 20 6f 75 74 70 75 74 20 28 74 68 61       output (tha
1a760 74 20 6d 65 65 74 73 20 74 68 65 20 63 6f 6e 66  t meets the conf
1a770 69 67 75 72 65 64 20 70 72 69 6f 72 69 74 79 0d  igured priority.
1a780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a790 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a7a0 20 20 20 20 20 20 63 72 69 74 65 72 69 61 29 20        criteria) 
1a7b0 77 69 6c 6c 20 62 65 20 64 69 73 70 6c 61 79 65  will be displaye
1a7c0 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65  d to the console
1a7d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a7f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a810 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
1a820 2e 64 65 62 75 67 29 0d 0a 20 20 20 20 20 20 20  .debug)..       
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a840 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a860 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1a890 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e  OTE: Add the con
1a8a0 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65  sole trace liste
1a8b0 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ner to the..    
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a8e0 20 20 20 20 20 6c 69 73 74 20 6f 66 20 74 72 61       list of tra
1a8f0 63 65 20 6c 69 73 74 65 6e 65 72 73 20 6d 61 69  ce listeners mai
1a900 6e 74 61 69 6e 65 64 20 62 79 0d 0a 20 20 20 20  ntained by..    
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a930 20 20 20 20 20 74 68 65 20 54 72 61 63 65 4f 70       the TraceOp
1a940 73 20 63 6c 61 73 73 20 28 69 2e 65 2e 20 6f 6e  s class (i.e. on
1a950 6c 79 20 6d 65 73 73 61 67 65 73 0d 0a 20 20 20  ly messages..   
1a960 20 20 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 20 20 20 2f 2f 20               // 
1a980 20 20 20 20 20 20 74 68 61 74 20 6d 65 65 74 20        that meet 
1a990 74 68 65 20 64 65 62 75 67 20 70 72 69 6f 72 69  the debug priori
1a9a0 74 79 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20  ty will be..    
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a9d0 20 20 20 20 20 73 65 65 6e 20 6f 6e 20 74 68 65       seen on the
1a9e0 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20   console)...    
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 54 72 61 63 65 4f 70 73 2e 53 65 74 75 70 44 65  TraceOps.SetupDe
1aa40 62 75 67 4c 69 73 74 65 6e 65 72 73 28 29 3b 0d  bugListeners();.
1aa50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1aa90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1aab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aad0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64       // NOTE: Ad
1ab00 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72  d the console tr
1ab10 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20  ace listener to 
1ab20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69       //       li
1ab50 73 74 20 6f 66 20 62 75 69 6c 74 2d 69 6e 20 74  st of built-in t
1ab60 72 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20 28  race listeners (
1ab70 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  i.e...          
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
1aba0 6e 6c 79 20 6d 65 73 73 61 67 65 73 20 74 68 61  nly messages tha
1abb0 74 20 6d 65 65 74 20 74 68 65 20 74 72 61 63 65  t meet the trace
1abc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abe0 20 20 2f 2f 20 20 20 20 20 20 20 70 72 69 6f 72    //       prior
1abf0 69 74 79 20 77 69 6c 6c 20 62 65 20 73 65 65 6e  ity will be seen
1ac00 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29   on the console)
1ac10 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac30 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac50 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73         Trace.Lis
1ac60 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43  teners.Add(new C
1ac70 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65  onsoleTraceListe
1ac80 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ner());..       
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
1ace0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad10 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad30 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
1ad40 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20  on.noLog &&..   
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 20 20 20 20 20 20 20 21 53 74 72 69 6e 67           !String
1ad70 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
1ad80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
1ad90 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1add0 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65     Trace.Listene
1ade0 72 73 2e 41 64 64 28 6e 65 77 20 54 65 78 74 57  rs.Add(new TextW
1adf0 72 69 74 65 72 54 72 61 63 65 4c 69 73 74 65 6e  riterTraceListen
1ae00 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
1ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1ae30 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  on.logFileName))
1ae40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae80 20 2f 2f 20 4e 4f 54 45 3a 20 54 65 63 68 6e 69   // NOTE: Techni
1ae90 63 61 6c 6c 79 2c 20 77 65 20 63 72 65 61 74 65  cally, we create
1aea0 64 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 0d  d the log file..
1aeb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1aed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
1aef0 65 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20  esCreated++;..  
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1af30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1af40 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1af60 20 4e 4f 54 45 3a 20 44 75 6d 70 20 74 68 65 20   NOTE: Dump the 
1af70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6e 6f  configuration no
1af80 77 20 69 6e 20 63 61 73 65 20 77 65 20 6e 65 65  w in case we nee
1af90 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20  d to..          
1afa0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1afb0 20 20 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 20     troubleshoot 
1afc0 61 6e 79 20 69 73 73 75 65 73 2e 0d 0a 20 20 20  any issues...   
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afe0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1aff0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
1b000 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
1b010 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63  Priority <= Trac
1b020 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1b030 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b040 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1b050 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 64 65  guration.Dump(de
1b060 62 75 67 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d  bugCallback);...
1b070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b080 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
1b090 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f  ration.tracePrio
1b0a0 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69  rity <= TracePri
1b0b0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20  ority.Medium).. 
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0d0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1b0e0 74 69 6f 6e 2e 44 75 6d 70 28 74 72 61 63 65 43  tion.Dump(traceC
1b0f0 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20  allback);....   
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b110 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1b120 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1b130 3a 20 53 68 6f 77 20 77 68 65 72 65 20 77 65 20  : Show where we 
1b140 61 72 65 20 72 75 6e 6e 69 6e 67 20 66 72 6f 6d  are running from
1b150 20 61 6e 64 20 68 6f 77 20 77 65 20 77 65 72 65   and how we were
1b160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b170 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
1b180 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20 20  nvoked...       
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1b1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b1b0 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 63 61       string loca
1b1c0 74 69 6f 6e 20 3d 20 61 73 73 65 6d 62 6c 79 2e  tion = assembly.
1b1d0 4c 6f 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  Location;....   
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1b200 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1b210 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c  ority.MediumLow,
1b220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b230 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1b240 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1b250 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1b260 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 22 52 75 6e 6e 69 6e 67 20 65 78 65 63 75 74 61  "Running executa
1b290 62 6c 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46 6f  ble is: {0}", Fo
1b2a0 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 74 69 6f  rDisplay(locatio
1b2b0 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1b2d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1b2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b2f0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1b300 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1b310 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1b320 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1b340 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1b350 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1b360 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 20 20 20 20 22 4f 72 69 67 69 6e 61 6c 20 63 6f      "Original co
1b390 6d 6d 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20 7b  mmand line is: {
1b3a0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 6e                En
1b3c0 76 69 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e  vironment.Comman
1b3d0 64 4c 69 6e 65 29 2c 20 74 72 61 63 65 43 61 74  dLine), traceCat
1b3e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1b400 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1b410 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1b420 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a  ity.MediumLow,..
1b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b440 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1b450 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1b460 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1b470 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52                "R
1b490 75 6e 6e 69 6e 67 20 70 72 6f 63 65 73 73 20 69  unning process i
1b4a0 73 20 7b 30 7d 2e 22 2c 20 49 73 36 34 42 69 74  s {0}.", Is64Bit
1b4b0 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 20  Process() ?..   
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 20 20 20 20 20 20 20 20 20 22 36 34 2d 62 69 74           "64-bit
1b4e0 22 20 3a 20 22 33 32 2d 62 69 74 22 29 2c 20 74  " : "32-bit"), t
1b4f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1b500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b510 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
1b520 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 29  guration.whatIf)
1b530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b540 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b560 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1b580 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 64 65 62  NOTE: If the deb
1b590 75 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65  ugger is attache
1b5a0 64 20 61 6e 64 20 57 68 61 74 2d 49 66 20 6d 6f  d and What-If mo
1b5b0 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  de..            
1b5c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1b5d0 20 20 20 20 20 69 73 20 5b 6e 6f 77 5d 20 64 69       is [now] di
1b5e0 73 61 62 6c 65 64 2c 20 69 73 73 75 65 20 61 20  sabled, issue a 
1b5f0 77 61 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20 20  warning...      
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1b630 20 28 44 65 62 75 67 67 65 72 2e 49 73 41 74 74   (Debugger.IsAtt
1b640 61 63 68 65 64 29 0d 0a 20 20 20 20 20 20 20 20  ached)..        
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b660 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1b670 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1b680 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
1b690 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6b0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1b6c0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1b6d0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6f0 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20       "Forced to 
1b700 64 69 73 61 62 6c 65 20 5c 22 77 68 61 74 2d 69  disable \"what-i
1b710 66 5c 22 20 6d 6f 64 65 20 77 69 74 68 20 22 20  f\" mode with " 
1b720 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b740 20 20 20 22 64 65 62 75 67 67 65 72 20 61 74 74     "debugger att
1b750 61 63 68 65 64 2e 22 2c 20 74 72 61 63 65 43 61  ached.", traceCa
1b760 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b790 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1b7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b7c0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1b7d0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1b7e0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1b7f0 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
1b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b810 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1b820 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1b830 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b850 20 20 20 22 4e 6f 20 61 63 74 75 61 6c 20 63 68     "No actual ch
1b860 61 6e 67 65 73 20 77 69 6c 6c 20 62 65 20 6d 61  anges will be ma
1b870 64 65 20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a  de to this " +..
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 20 20 20 20 20 20 20 20 20 22 73 79 73              "sys
1b8a0 74 65 6d 20 62 65 63 61 75 73 65 20 5c 22 77 68  tem because \"wh
1b8b0 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73 20  at-if\" mode is 
1b8c0 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20  enabled.",..    
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1b8f0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
1b900 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1b910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b920 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b940 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f   NOTE: If the co
1b950 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e  mmand line has n
1b960 6f 74 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79  ot been manually
1b970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b980 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
1b990 6f 6e 66 69 72 6d 65 64 20 28 69 2e 65 2e 20 76  onfirmed (i.e. v
1b9a0 69 61 20 74 68 65 20 65 78 70 6c 69 63 69 74 20  ia the explicit 
1b9b0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20  command line..  
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9d0 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f    //       optio
1b9e0 6e 29 2c 20 74 68 65 6e 20 73 74 6f 70 20 70 72  n), then stop pr
1b9f0 6f 63 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57  ocessing now.  W
1ba00 65 20 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20  e enforce..     
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ba20 2f 20 20 20 20 20 20 20 74 68 69 73 20 72 75 6c  /       this rul
1ba30 65 20 73 6f 20 74 68 61 74 20 73 69 6d 70 6c 79  e so that simply
1ba40 20 64 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67   double-clicking
1ba50 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
1ba60 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1ba70 20 20 20 65 78 65 63 75 74 61 62 6c 65 20 77 69     executable wi
1ba80 6c 6c 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e  ll not result in
1ba90 20 61 6e 79 20 63 68 61 6e 67 65 73 20 62 65 69   any changes bei
1baa0 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
1bab0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1bac0 20 6d 61 64 65 20 74 6f 20 74 68 65 20 73 79 73   made to the sys
1bad0 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  tem...          
1bae0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
1bb10 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20  tion.confirm).. 
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1bb50 72 6f 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f  ror = "Cannot co
1bb60 6e 74 69 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f  ntinue, the \"co
1bb70 6e 66 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69  nfirm\" option i
1bb80 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  s " +..         
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 20 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e     "not enabled.
1bbb0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
1bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1bbd0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1bc00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1bc10 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1bc20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1bc30 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1bc40 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1bc70 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1bc80 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1bc90 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
1bca0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1bcc0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1bcd0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74  ceCallback, e, t
1bce0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1bcf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd00 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
1bd10 61 69 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73  ailed to process
1bd20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
1bd30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bd40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1bd50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1bd60 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1bd70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1bd80 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
1bdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdc0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1bdd0 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
1bde0 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
1bdf0 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
1be00 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
1be10 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
1be20 6c 20 43 68 65 63 6b 52 75 6e 74 69 6d 65 56 65  l CheckRuntimeVe
1be30 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  rsion(..        
1be40 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
1be50 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
1be60 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1be70 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63        bool stric
1be80 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1be90 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
1bea0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
1beb0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1bec0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1bed0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
1bf10 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ation == null)..
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1bf50 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20  rror = "Invalid 
1bf60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b  configuration.";
1bf70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bf80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1bf90 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1bfb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bfc0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bfe0 20 4e 4f 54 45 3a 20 57 68 61 74 20 76 65 72 73   NOTE: What vers
1bff0 69 6f 6e 20 6f 66 20 74 68 65 20 72 75 6e 74 69  ion of the runti
1c000 6d 65 20 77 61 73 20 74 68 65 20 63 6f 72 65 20  me was the core 
1c010 28 70 72 69 6d 61 72 79 29 0d 0a 20 20 20 20 20  (primary)..     
1c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c030 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  /       assembly
1c040 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73   compiled agains
1c050 74 20 28 65 2e 67 2e 20 22 76 32 2e 30 2e 35 30  t (e.g. "v2.0.50
1c060 37 32 37 22 20 6f 72 0d 0a 20 20 20 20 20 20 20  727" or..       
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1c080 20 20 20 20 20 20 22 76 34 2e 30 2e 33 30 33 31        "v4.0.3031
1c090 39 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  9")...          
1c0a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0c0 20 20 73 74 72 69 6e 67 20 63 6f 72 65 49 6d 61    string coreIma
1c0d0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1c0e0 20 3d 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69   = GetImageRunti
1c0f0 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c110 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1c120 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  n.coreFileName);
1c130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c140 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c160 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61 6c 6c 6f  // NOTE: We allo
1c170 77 20 74 68 65 20 61 63 74 75 61 6c 20 69 6d 61  w the actual ima
1c180 67 65 20 72 75 6e 74 69 6d 65 20 63 68 65 63 6b  ge runtime check
1c190 69 6e 67 20 74 6f 20 62 65 0d 0a 20 20 20 20 20  ing to be..     
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c1b0 2f 20 20 20 20 20 20 20 62 79 70 61 73 73 65 64  /       bypassed
1c1c0 20 76 69 61 20 74 68 65 20 22 2d 6e 6f 52 75 6e   via the "-noRun
1c1d0 74 69 6d 65 56 65 72 73 69 6f 6e 22 20 63 6f 6d  timeVersion" com
1c1e0 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c200 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 20  /       option. 
1c210 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   The command lin
1c220 65 20 6f 70 74 69 6f 6e 20 69 73 20 69 6e 74 65  e option is inte
1c230 6e 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20  nded for..      
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c250 20 20 20 20 20 20 20 65 78 70 65 72 74 20 75 73         expert us
1c260 65 20 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20  e only...       
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1c280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c290 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
1c2a0 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65  ration.noRuntime
1c2b0 56 65 72 73 69 6f 6e 29 0d 0a 20 20 20 20 20 20  Version)..      
1c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1c2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c2e0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1c2f0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1c300 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1c310 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  dium,..         
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c330 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1c340 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1c350 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1c360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
1c380 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c  sembly is compil
1c390 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20  ed for the .NET 
1c3a0 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20 22  Framework {0}; "
1c3b0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3d0 22 68 6f 77 65 76 65 72 2c 20 69 6e 73 74 61 6c  "however, instal
1c3e0 6c 61 74 69 6f 6e 20 72 65 73 74 72 69 63 74 69  lation restricti
1c3f0 6f 6e 73 20 62 61 73 65 64 20 6f 6e 20 74 68 69  ons based on thi
1c400 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  s " +..         
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c420 20 20 20 22 66 61 63 74 20 68 61 76 65 20 62 65     "fact have be
1c430 65 6e 20 64 69 73 61 62 6c 65 64 20 76 69 61 20  en disabled via 
1c440 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
1c450 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
1c480 65 56 65 72 73 69 6f 6e 29 2c 20 74 72 61 63 65  eVersion), trace
1c490 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
1c4c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1c4d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1c500 20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f           // TODO
1c510 3a 20 52 65 73 74 72 69 63 74 20 74 68 65 20 63  : Restrict the c
1c520 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 61 73  onfiguration bas
1c530 65 64 20 6f 6e 20 77 68 69 63 68 20 69 6d 61 67  ed on which imag
1c540 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1c550 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1c560 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 73  runtime versions
1c570 20 28 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72 2d   (which more-or-
1c580 6c 65 73 73 20 63 6f 72 72 65 73 70 6f 6e 64 0d  less correspond.
1c590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c5a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
1c5b0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1c5c0 76 65 72 73 69 6f 6e 73 29 20 61 72 65 20 73 75  versions) are su
1c5d0 70 70 6f 72 74 65 64 20 62 79 20 74 68 65 0d 0a  pported by the..
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 76 65 72      //       ver
1c600 73 69 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c 20  sions of Visual 
1c610 53 74 75 64 69 6f 20 74 68 61 74 20 61 72 65 20  Studio that are 
1c620 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20  installed...    
1c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c640 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1c650 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
1c660 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
1c670 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d  (coreImageRuntim
1c680 65 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20  eVersion))..    
1c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c6b0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1c6c0 20 3d 20 22 69 6e 76 61 6c 69 64 20 63 6f 72 65   = "invalid core
1c6d0 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74   file image runt
1c6e0 69 6d 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20  ime version";.. 
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c700 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1c710 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1c720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67   else if (String
1c750 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20  .Equals(..      
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c770 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52        coreImageR
1c780 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43  untimeVersion, C
1c790 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
1c7a0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
1c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7c0 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
1c7d0 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
1c7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c7f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c810 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1c820 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1c830 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c  NOTE: For the CL
1c840 52 20 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c 20  R v2.0 runtime, 
1c850 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64 69 73  make sure we dis
1c860 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c880 20 20 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d         any attem
1c890 70 74 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72  pt to use it for
1c8a0 20 74 68 69 6e 67 73 20 74 68 61 74 20 72 65 71   things that req
1c8b0 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  uire..          
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c8d0 20 20 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62         an assemb
1c8e0 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  ly compiled for 
1c8f0 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49  the CLR v4.0.  I
1c900 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  t is..          
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c920 20 20 20 20 20 20 20 75 6e 63 65 72 74 61 69 6e         uncertain
1c930 20 69 66 20 74 68 69 73 20 69 73 20 61 63 74 75   if this is actu
1c940 61 6c 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20 69  ally a problem i
1c950 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
1c960 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1c970 20 20 20 20 70 72 61 63 74 69 63 65 20 61 73 20      practice as 
1c980 74 68 65 20 43 4c 52 20 76 34 2e 30 20 63 61 6e  the CLR v4.0 can
1c990 20 6c 6f 61 64 20 61 6e 64 20 75 73 65 20 61 6e   load and use an
1c9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c9b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1c9c0 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70     assembly comp
1c9d0 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 43 4c  iled with the CL
1c9e0 52 20 76 32 2e 30 3b 20 68 6f 77 65 76 65 72 2c  R v2.0; however,
1c9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ca00 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1ca10 20 20 20 73 69 6e 63 65 20 74 68 69 73 20 70 72     since this pr
1ca20 6f 6a 65 63 74 20 6f 66 66 65 72 73 20 62 6f 74  oject offers bot
1ca30 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  h configurations
1ca40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ca50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1ca60 20 20 20 20 77 65 20 63 75 72 72 65 6e 74 6c 79      we currently
1ca70 20 64 69 73 61 6c 6c 6f 77 20 74 68 69 73 20 6d   disallow this m
1ca80 69 73 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20 20  ismatch...      
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caa0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1cac0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1cad0 74 46 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx40 = true;.. 
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caf0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1cb00 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d  tion.noNetFx45 =
1cb10 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1cb40 4e 65 74 46 78 34 35 31 20 3d 20 74 72 75 65 3b  NetFx451 = true;
1cb50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cb60 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1cb70 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30  uration.noVs2010
1cb80 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cba0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1cbb0 6e 6f 56 73 32 30 31 32 20 3d 20 74 72 75 65 3b  noVs2012 = true;
1cbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cbd0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1cbe0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 33  uration.noVs2013
1cbf0 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc10 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1cc20 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1cc30 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c  Priority.Medium,
1cc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1cc60 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1cc70 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1cc80 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1cc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cca0 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
1ccb0 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f  y is compiled fo
1ccc0 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
1ccd0 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20  work {0}, " +.. 
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70 70             "supp
1cd00 6f 72 74 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  ort for the .NET
1cd10 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69   Framework {1} i
1cd20 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22  s now disabled."
1cd30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1cd50 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
1cd60 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d  Version, CLRv4Im
1cd70 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1cd80 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1cdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cdc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1cde0 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75  e if (String.Equ
1cdf0 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  als(..          
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce10 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69    coreImageRunti
1ce20 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34  meVersion, CLRv4
1ce30 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1ce40 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce60 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73    StringComparis
1ce70 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1ceb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cec0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1ced0 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76 34  : For the CLR v4
1cee0 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65  .0 runtime, make
1cef0 20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c 65   sure we disable
1cf00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cf10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1cf20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74     any attempt t
1cf30 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74 68 69  o use it for thi
1cf40 6e 67 73 20 74 68 61 74 20 72 65 71 75 69 72 65  ngs that require
1cf50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cf60 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1cf70 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63     an assembly c
1cf80 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20  ompiled for the 
1cf90 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20  CLR v2.0...     
1cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfb0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1cfd0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
1cfe0 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a  etFx20 = true;..
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d000 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1d010 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20  ation.noNetFx35 
1d020 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d040 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1d050 6f 56 73 32 30 30 35 20 3d 20 74 72 75 65 3b 0d  oVs2005 = true;.
1d060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d070 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1d080 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20  ration.noVs2008 
1d090 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0b0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1d0c0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1d0d0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d  riority.Medium,.
1d0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1d100 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1d110 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1d120 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d140 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1d150 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72   is compiled for
1d160 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   the .NET Framew
1d170 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20  ork {0}, " +..  
1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d190 20 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f            "suppo
1d1a0 72 74 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20  rt for the .NET 
1d1b0 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73  Framework {1} is
1d1c0 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c   now disabled.",
1d1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1d1f0 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d  rDisplay(CLRv4Im
1d200 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1d210 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d230 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76   ForDisplay(CLRv
1d240 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  2ImageRuntimeVer
1d250 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d270 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d280 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
1d290 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2b0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1d2c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
1d2f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d310 20 20 20 20 20 20 20 20 20 20 22 75 6e 73 75 70            "unsup
1d320 70 6f 72 74 65 64 20 63 6f 72 65 20 66 69 6c 65  ported core file
1d330 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76   image runtime v
1d340 65 72 73 69 6f 6e 20 22 20 2b 0d 0a 20 20 20 20  ersion " +..    
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d360 20 20 20 20 20 20 20 20 22 7b 30 7d 2c 20 6d 75          "{0}, mu
1d370 73 74 20 62 65 20 7b 31 7d 20 6f 72 20 7b 32 7d  st be {1} or {2}
1d380 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3a0 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65 49  ForDisplay(coreI
1d3b0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1d3c0 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3e0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
1d3f0 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
1d400 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1d430 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv4ImageRuntim
1d440 65 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 20  eVersion));.... 
1d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d460 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1d470 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1d480 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
1d4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d4c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1d4d0 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
1d4e0 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
1d4f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d510 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1d520 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1d530 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d550 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
1d560 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
1d570 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74  ack, e, traceCat
1d580 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1d5a0 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74  rror = "Failed t
1d5b0 6f 20 63 68 65 63 6b 20 69 6d 61 67 65 20 72 75  o check image ru
1d5c0 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 2e 22 3b  ntime version.";
1d5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d5e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1d5f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1d600 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1d610 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d620 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1d630 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1d640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1d680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1d690 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74  egion Public Met
1d6a0 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
1d6b0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61    public bool Ha
1d6c0 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20  sFlags(..       
1d6d0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
1d6e0 46 6c 61 67 73 20 68 61 73 46 6c 61 67 73 2c 0d  Flags hasFlags,.
1d6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d700 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20 20   bool all..     
1d710 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1d720 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1d740 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  (all)..         
1d750 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1d760 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73  n ((installFlags
1d770 20 26 20 68 61 73 46 6c 61 67 73 29 20 3d 3d 20   & hasFlags) == 
1d780 68 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20  hasFlags);..    
1d790 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1d7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d7b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 69        return ((i
1d7c0 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61  nstallFlags & ha
1d7d0 73 46 6c 61 67 73 29 20 21 3d 20 49 6e 73 74 61  sFlags) != Insta
1d7e0 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a  llFlags.None);..
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d800 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1d810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d860 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 4c 69  public bool IsLi
1d870 6e 71 53 75 70 70 6f 72 74 65 64 28 29 0d 0a 20  nqSupported().. 
1d880 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d8b0 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72    // NOTE: Retur
1d8c0 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  n non-zero if th
1d8d0 65 20 4c 49 4e 51 20 61 73 73 65 6d 62 6c 79 20  e LINQ assembly 
1d8e0 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20  should be..     
1d8f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1d900 20 20 20 20 70 72 6f 63 65 73 73 65 64 20 64 75      processed du
1d910 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61 6c 6c  ring the install
1d920 2e 20 20 49 66 20 74 68 65 20 74 61 72 67 65 74  .  If the target
1d930 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20   is..           
1d940 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 56 69       //       Vi
1d950 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 35  sual Studio 2005
1d960 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 72 65  , this should re
1d970 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  turn zero...    
1d980 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9a0 72 65 74 75 72 6e 20 21 6e 6f 4e 65 74 46 78 33  return !noNetFx3
1d9b0 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 30 20  5 || !noNetFx40 
1d9c0 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 20 7c 7c  || !noNetFx45 ||
1d9d0 20 21 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20   !noNetFx451;.. 
1d9e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1da00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1da40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1da50 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 45 66 36  ublic bool IsEf6
1da60 53 75 70 70 6f 72 74 65 64 28 29 0d 0a 20 20 20  Supported()..   
1da70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1da80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daa0 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20  // NOTE: Return 
1dab0 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
1dac0 45 46 36 20 61 73 73 65 6d 62 6c 79 20 73 68 6f  EF6 assembly sho
1dad0 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 20 20  uld be..        
1dae0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1daf0 20 70 72 6f 63 65 73 73 65 64 20 64 75 72 69 6e   processed durin
1db00 67 20 74 68 65 20 69 6e 73 74 61 6c 6c 2e 20 20  g the install.  
1db10 49 66 20 74 68 65 20 74 61 72 67 65 74 20 69 73  If the target is
1db20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1db30 20 20 2f 2f 20 20 20 20 20 20 20 56 69 73 75 61    //       Visua
1db40 6c 20 53 74 75 64 69 6f 20 32 30 30 35 20 6f 72  l Studio 2005 or
1db50 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32   Visual Studio 2
1db60 30 30 38 2c 20 74 68 69 73 0d 0a 20 20 20 20 20  008, this..     
1db70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1db80 20 20 20 20 73 68 6f 75 6c 64 20 72 65 74 75 72      should retur
1db90 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20  n zero...       
1dba0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1dbc0 75 72 6e 20 21 6e 6f 4e 65 74 46 78 34 30 20 7c  urn !noNetFx40 |
1dbd0 7c 20 21 6e 6f 4e 65 74 46 78 34 35 20 7c 7c 20  | !noNetFx45 || 
1dbe0 21 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20 20  !noNetFx451;..  
1dbf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1dc00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1dc10 2f 2f 2f 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 0d 0a  //////////////..
1dc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1dc60 62 6c 69 63 20 76 6f 69 64 20 44 75 6d 70 28 0d  blic void Dump(.
1dc70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dc80 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
1dc90 72 61 63 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20  raceCallback..  
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
1dcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 69 66 20 28 74 72 61 63 65 43 61 6c 6c 62 61 63  if (traceCallbac
1dce0 6b 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k != null)..    
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd10 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1dd20 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1dd30 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1dd40 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1dd50 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
1dd60 65 6d 62 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c  embly", ForDispl
1dd70 61 79 28 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a  ay(assembly)),..
1dd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd90 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1dda0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ddc0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1ddd0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1dde0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de00 20 20 20 20 20 20 20 20 22 4c 6f 67 46 69 6c 65          "LogFile
1de10 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
1de20 79 28 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c  y(logFileName)),
1de30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1de40 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1de50 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de70 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1de80 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1de90 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1dea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1deb0 20 20 20 20 20 20 20 20 20 20 22 44 69 72 65 63            "Direc
1dec0 74 6f 72 79 22 2c 20 46 6f 72 44 69 73 70 6c 61  tory", ForDispla
1ded0 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a  y(directory)),..
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1def0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1df00 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1df20 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1df30 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1df40 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df60 20 20 20 20 20 20 20 20 22 43 6f 72 65 46 69 6c          "CoreFil
1df70 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  eName", ForDispl
1df80 61 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  ay(coreFileName)
1df90 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1dfb0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfd0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1dfe0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1dff0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e000 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e010 20 20 20 20 20 20 20 20 20 20 20 20 22 4c 69 6e              "Lin
1e020 71 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44  qFileName", ForD
1e030 69 73 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e  isplay(linqFileN
1e040 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
1e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e060 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e080 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e090 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e0a0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e0b0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0d0 22 45 66 36 46 69 6c 65 4e 61 6d 65 22 2c 20 46  "Ef6FileName", F
1e0e0 6f 72 44 69 73 70 6c 61 79 28 65 66 36 46 69 6c  orDisplay(ef6Fil
1e0f0 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e110 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e120 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e130 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e140 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1e150 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1e160 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e180 20 20 22 44 65 73 69 67 6e 65 72 46 69 6c 65 4e    "DesignerFileN
1e190 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
1e1a0 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  (designerFileNam
1e1b0 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e1d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e1f0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e200 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e210 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e220 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52                "R
1e240 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 22 2c  egistryVersion",
1e250 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 67 69   ForDisplay(regi
1e260 73 74 72 79 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  stryVersion)),..
1e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e280 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e290 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e2b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1e2c0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1e2d0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2f0 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 67 56          "ConfigV
1e300 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70  ersion", ForDisp
1e310 6c 61 79 28 63 6f 6e 66 69 67 56 65 72 73 69 6f  lay(configVersio
1e320 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
1e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e340 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e360 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e370 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e380 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e390 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56                "V
1e3b0 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 22 2c  sVersionSuffix",
1e3c0 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
1e3d0 72 73 69 6f 6e 53 75 66 66 69 78 29 29 2c 0d 0a  rsionSuffix)),..
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e400 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e420 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1e430 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1e440 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e460 20 20 20 20 20 20 20 20 22 44 65 62 75 67 46 6f          "DebugFo
1e470 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61  rmat", ForDispla
1e480 79 28 64 65 62 75 67 46 6f 72 6d 61 74 29 29 2c  y(debugFormat)),
1e490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e4a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e4b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e4e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e4f0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e510 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65            "Trace
1e520 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70  Format", ForDisp
1e530 6c 61 79 28 74 72 61 63 65 46 6f 72 6d 61 74 29  lay(traceFormat)
1e540 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e550 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e560 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e580 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e590 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e5a0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e5b0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73              "Ins
1e5d0 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46 6f 72 44  tallFlags", ForD
1e5e0 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 46 6c  isplay(installFl
1e5f0 61 67 73 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ags)),..        
1e600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e610 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e630 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e640 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e650 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e660 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e680 22 44 65 62 75 67 50 72 69 6f 72 69 74 79 22 2c  "DebugPriority",
1e690 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75   ForDisplay(debu
1e6a0 67 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20  gPriority)),..  
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6c0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e6d0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e6f0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e700 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e710 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e730 20 20 20 20 20 20 22 54 72 61 63 65 50 72 69 6f        "TracePrio
1e740 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61  rity", ForDispla
1e750 79 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 29  y(tracePriority)
1e760 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e770 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e780 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7a0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e7b0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e7c0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e7d0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 22 50 65 72              "Per
1e7f0 55 73 65 72 22 2c 20 46 6f 72 44 69 73 70 6c 61  User", ForDispla
1e800 79 28 70 65 72 55 73 65 72 29 29 2c 0d 0a 20 20  y(perUser)),..  
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e820 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e830 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e850 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e860 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e870 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e890 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 22 2c        "Install",
1e8a0 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74   ForDisplay(inst
1e8b0 61 6c 6c 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  all)),..        
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8d0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e8e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e8f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e900 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e910 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e920 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e940 22 57 6f 77 36 34 22 2c 20 46 6f 72 44 69 73 70  "Wow64", ForDisp
1e950 6c 61 79 28 77 6f 77 36 34 29 29 2c 0d 0a 20 20  lay(wow64)),..  
1e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e970 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e980 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e9a0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e9b0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e9c0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9e0 20 20 20 20 20 20 22 4e 6f 52 75 6e 74 69 6d 65        "NoRuntime
1e9f0 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73  Version", ForDis
1ea00 70 6c 61 79 28 6e 6f 52 75 6e 74 69 6d 65 56 65  play(noRuntimeVe
1ea10 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea30 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1ea40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ea50 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ea60 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1ea70 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1ea80 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaa0 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c 20 46    "NoDesktop", F
1eab0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44 65 73 6b  orDisplay(noDesk
1eac0 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  top)),..        
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1eaf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1eb00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1eb10 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1eb20 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1eb30 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb50 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46 6f 72  "NoCompact", For
1eb60 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70 61 63  Display(noCompac
1eb70 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1eb90 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1eba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ebb0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1ebc0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1ebd0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1ebe0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1ec00 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f 72 44 69  oNetFx20", ForDi
1ec10 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32 30 29  splay(noNetFx20)
1ec20 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ec40 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1ec70 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1ec80 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1ec90 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e              "NoN
1ecb0 65 74 46 78 33 35 22 2c 20 46 6f 72 44 69 73 70  etFx35", ForDisp
1ecc0 6c 61 79 28 6e 6f 4e 65 74 46 78 33 35 29 29 2c  lay(noNetFx35)),
1ecd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ece0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1ecf0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed10 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1ed20 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1ed30 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1ed40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ed50 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74            "NoNet
1ed60 46 78 34 30 22 2c 20 46 6f 72 44 69 73 70 6c 61  Fx40", ForDispla
1ed70 79 28 6e 6f 4e 65 74 46 78 34 30 29 29 2c 0d 0a  y(noNetFx40)),..
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed90 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1eda0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1edc0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1edd0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1ede0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee00 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
1ee10 34 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  45", ForDisplay(
1ee20 6e 6f 4e 65 74 46 78 34 35 29 29 2c 0d 0a 20 20  noNetFx45)),..  
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee40 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1ee50 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ee70 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ee80 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1ee90 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eeb0 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35        "NoNetFx45
1eec0 31 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  1", ForDisplay(n
1eed0 6f 4e 65 74 46 78 34 35 31 29 29 2c 0d 0a 20 20  oNetFx451)),..  
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eef0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1ef00 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ef20 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ef30 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1ef40 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef60 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 35 22        "NoVs2005"
1ef70 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1ef80 73 32 30 30 35 29 29 2c 0d 0a 20 20 20 20 20 20  s2005)),..      
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efa0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1efb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1efc0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1efd0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1efe0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1eff0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f010 20 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f    "NoVs2008", Fo
1f020 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30  rDisplay(noVs200
1f030 38 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  8)),..          
1f040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1f050 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1f060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f070 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1f080 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1f090 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1f0a0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1f0c0 6f 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69 73  oVs2010", ForDis
1f0d0 70 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29 2c  play(noVs2010)),
1f0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f0f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f100 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f120 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1f130 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1f140 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1f150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f160 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
1f170 30 31 32 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  012", ForDisplay
1f180 28 6e 6f 56 73 32 30 31 32 29 29 2c 0d 0a 20 20  (noVs2012)),..  
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1f1b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1f1d0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1f1e0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1f1f0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f210 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 33 22        "NoVs2013"
1f220 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1f230 73 32 30 31 33 29 29 2c 0d 0a 20 20 20 20 20 20  s2013)),..      
1f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f250 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1f260 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f270 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1f280 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1f290 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1f2a0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2c0 20 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f 72    "NoTrace", For
1f2d0 44 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65 29  Display(noTrace)
1f2e0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1f300 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1f330 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1f340 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1f350 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1f360 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43              "NoC
1f370 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73 70  onsole", ForDisp
1f380 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c  lay(noConsole)),
1f390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f3a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f3b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1f3e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1f3f0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1f400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f410 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f 67            "NoLog
1f420 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1f430 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  Log)),..        
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f450 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1f460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f470 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1f480 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1f490 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1f4a0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4c0 22 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22  "ThrowOnMissing"
1f4d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 68 72  , ForDisplay(thr
1f4e0 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 29 2c 0d 0a  owOnMissing)),..
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1f510 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f530 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1f540 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1f550 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 20 20 20 20 20 20 20 22 57 68 61 74 49 66 22          "WhatIf"
1f580 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61  , ForDisplay(wha
1f590 74 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  tIf)),..        
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5b0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1f5c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f5d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1f5e0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1f5f0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1f600 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f620 22 44 65 62 75 67 22 2c 20 46 6f 72 44 69 73 70  "Debug", ForDisp
1f630 6c 61 79 28 64 65 62 75 67 29 29 2c 0d 0a 20 20  lay(debug)),..  
1f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f650 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1f660 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1f680 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1f690 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1f6a0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6c0 20 20 20 20 20 20 22 56 65 72 62 6f 73 65 22 2c        "Verbose",
1f6d0 20 46 6f 72 44 69 73 70 6c 61 79 28 76 65 72 62   ForDisplay(verb
1f6e0 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ose)),..        
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f700 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1f710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f720 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1f730 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1f740 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1f750 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1f760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f770 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44 69  "Confirm", ForDi
1f780 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29 2c  splay(confirm)),
1f790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f7a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f7b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7d0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f820 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
1f830 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1f850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f860 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f870 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1f880 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1f890 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8b0 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1f8c0 54 69 74 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20  Title",..       
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8e0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1f8f0 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  GetAssemblyTitle
1f900 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20  (assembly))),.. 
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f920 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1f930 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f950 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1f960 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1f970 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1f980 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9a0 20 20 20 22 41 73 73 65 6d 62 6c 79 43 6f 6e 66     "AssemblyConf
1f9b0 69 67 75 72 61 74 69 6f 6e 22 2c 0d 0a 20 20 20  iguration",..   
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9d0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1f9e0 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79 43  lay(GetAssemblyC
1f9f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 61 73 73  onfiguration(ass
1fa00 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20  embly))),..     
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1fa30 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1fa60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1fa70 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1fa80 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1fa90 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1fae0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1faf0 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
1fb00 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
1fb10 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
1fb20 79 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20  y assembly;..   
1fb30 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1fb40 41 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c  Assembly Assembl
1fb50 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1fb60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fb70 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61    get { return a
1fb80 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20  ssembly; }..    
1fb90 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1fba0 7b 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c  { assembly = val
1fbb0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1fbc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1fbd0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1fbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1fc20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1fc30 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d  tring logFileNam
1fc40 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1fc50 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f  public string Lo
1fc60 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  gFileName..     
1fc70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1fc80 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1fc90 72 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61  return logFileNa
1fca0 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1fcb0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 67         set { log
1fcc0 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
1fcd0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fce0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1fcf0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1fd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd30 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1fd40 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1fd50 69 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a  ing directory;..
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1fd70 69 63 20 73 74 72 69 6e 67 20 44 69 72 65 63 74  ic string Direct
1fd80 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
1fd90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1fda0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1fdb0 20 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20   directory; }.. 
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1fdd0 65 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20 3d  et { directory =
1fde0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1fdf0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fe00 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1fe10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe20 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
1fe50 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1fe60 74 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69  te string coreFi
1fe70 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
1fe80 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1fe90 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d  ng CoreFileName.
1fea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fec0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 72  get { return cor
1fed0 65 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  eFileName; }..  
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1fef0 74 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  t { coreFileName
1ff00 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1ff10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1ff20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1ff30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1ff70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1ff80 76 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e 71  vate string linq
1ff90 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
1ffa0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1ffb0 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d  ring LinqFileNam
1ffc0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
1ffd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ffe0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c    get { return l
1fff0 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  inqFileName; }..
20000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20010 73 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61  set { linqFileNa
20020 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
20030 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
20050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20090 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
200a0 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 65 66  rivate string ef
200b0 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  6FileName;..    
200c0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
200d0 74 72 69 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d  tring Ef6FileNam
200e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
200f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20100 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 65    get { return e
20110 66 36 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  f6FileName; }.. 
20120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20130 65 74 20 7b 20 65 66 36 46 69 6c 65 4e 61 6d 65  et { ef6FileName
20140 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
20150 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20160 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
201b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
201c0 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 73 69  vate string desi
201d0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  gnerFileName;.. 
201e0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
201f0 63 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65  c string Designe
20200 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  rFileName..     
20210 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20220 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20230 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72 46  return designerF
20240 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
20250 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
20260 7b 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  { designerFileNa
20270 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
20280 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20290 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
202a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
202e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
202f0 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 72 65  rivate string re
20300 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a  gistryVersion;..
20310 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20320 69 63 20 73 74 72 69 6e 67 20 52 65 67 69 73 74  ic string Regist
20330 72 79 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  ryVersion..     
20340 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20350 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20360 72 65 74 75 72 6e 20 72 65 67 69 73 74 72 79 56  return registryV
20370 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20  ersion; }..     
20380 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20390 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
203a0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
203b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
203c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
203d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20410 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20420 76 61 74 65 20 73 74 72 69 6e 67 20 63 6f 6e 66  vate string conf
20430 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  igVersion;..    
20440 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
20450 74 72 69 6e 67 20 43 6f 6e 66 69 67 56 65 72 73  tring ConfigVers
20460 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
20470 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20480 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20490 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 20   configVersion; 
204a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
204b0 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 67 56     set { configV
204c0 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20  ersion = value; 
204d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
204e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
204f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20530 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20540 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
20550 67 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  g vsVersionSuffi
20560 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x;..            
20570 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 56 73  public string Vs
20580 56 65 72 73 69 6f 6e 53 75 66 66 69 78 0d 0a 20  VersionSuffix.. 
20590 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
205a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
205b0 74 20 7b 20 72 65 74 75 72 6e 20 76 73 56 65 72  t { return vsVer
205c0 73 69 6f 6e 53 75 66 66 69 78 3b 20 7d 0d 0a 20  sionSuffix; }.. 
205d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
205e0 65 74 20 7b 20 76 73 56 65 72 73 69 6f 6e 53 75  et { vsVersionSu
205f0 66 66 69 78 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ffix = value; }.
20600 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20660 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20670 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
20680 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  debugFormat;..  
20690 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
206a0 20 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72   string DebugFor
206b0 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mat..           
206c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
206d0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
206e0 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d   debugFormat; }.
206f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20700 20 73 65 74 20 7b 20 64 65 62 75 67 46 6f 72 6d   set { debugForm
20710 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  at = value; }.. 
20720 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20730 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
20740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20780 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20790 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 74 72  rivate string tr
207a0 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  aceFormat;..    
207b0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
207c0 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61  tring TraceForma
207d0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
207e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
207f0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
20800 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20  raceFormat; }.. 
20810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20820 65 74 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74  et { traceFormat
20830 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
20840 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20850 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
208a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
208b0 76 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67  vate InstallFlag
208c0 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d  s installFlags;.
208d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
208e0 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  lic InstallFlags
208f0 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20   InstallFlags.. 
20900 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20920 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61  t { return insta
20930 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20  llFlags; }..    
20940 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
20950 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d  { installFlags =
20960 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20970 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20980 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
209d0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
209e0 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  te TracePriority
209f0 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d   debugPriority;.
20a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
20a10 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74  lic TracePriorit
20a20 79 20 44 65 62 75 67 50 72 69 6f 72 69 74 79 0d  y DebugPriority.
20a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a50 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62  get { return deb
20a60 75 67 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20  ugPriority; }.. 
20a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20a80 65 74 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69  et { debugPriori
20a90 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ty = value; }.. 
20aa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20ab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
20ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20b00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20b10 72 69 76 61 74 65 20 54 72 61 63 65 50 72 69 6f  rivate TracePrio
20b20 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
20b30 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
20b40 20 70 75 62 6c 69 63 20 54 72 61 63 65 50 72 69   public TracePri
20b50 6f 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72  ority TracePrior
20b60 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
20b70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20b80 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20b90 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20   tracePriority; 
20ba0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20bb0 20 20 20 73 65 74 20 7b 20 74 72 61 63 65 50 72     set { tracePr
20bc0 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20  iority = value; 
20bd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20c40 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
20c50 70 65 72 55 73 65 72 3b 0d 0a 20 20 20 20 20 20  perUser;..      
20c60 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
20c70 6c 20 50 65 72 55 73 65 72 0d 0a 20 20 20 20 20  l PerUser..     
20c80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20c90 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20ca0 72 65 74 75 72 6e 20 70 65 72 55 73 65 72 3b 20  return perUser; 
20cb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20cc0 20 20 20 73 65 74 20 7b 20 70 65 72 55 73 65 72     set { perUser
20cd0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
20ce0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20cf0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20d50 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61 6c  vate bool instal
20d60 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
20d70 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73 74  public bool Inst
20d80 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  all..           
20d90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20da0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20db0 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20   install; }..   
20dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
20dd0 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61 6c   { install = val
20de0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
20df0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20e00 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20e50 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
20e60 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20  ool wow64;..    
20e70 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
20e80 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20 20 20 20 20  ool Wow64..     
20e90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20ea0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20eb0 72 65 74 75 72 6e 20 77 6f 77 36 34 3b 20 7d 0d  return wow64; }.
20ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20ed0 20 73 65 74 20 7b 20 77 6f 77 36 34 20 3d 20 76   set { wow64 = v
20ee0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20ef0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20f00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20f50 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20f60 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56   bool noRuntimeV
20f70 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ersion;..       
20f80 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
20f90 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   NoRuntimeVersio
20fa0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  n..            {
20fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20fc0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
20fd0 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b  oRuntimeVersion;
20fe0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20ff0 20 20 20 20 73 65 74 20 7b 20 6e 6f 52 75 6e 74      set { noRunt
21000 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c  imeVersion = val
21010 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
21020 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21030 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21070 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21080 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
21090 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a  ool noDesktop;..
210a0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
210b0 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f  ic bool NoDeskto
210c0 70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  p..            {
210d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
210e0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
210f0 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20  oDesktop; }..   
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
21110 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 76   { noDesktop = v
21120 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
21130 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21140 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21180 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21190 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
211a0 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b   bool noCompact;
211b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
211c0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70  blic bool NoComp
211d0 61 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  act..           
211e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
211f0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21200 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20   noCompact; }.. 
21210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21220 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20 3d  et { noCompact =
21230 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
21240 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21250 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
212a0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
212b0 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32  te bool noNetFx2
212c0 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
212d0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
212e0 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20  tFx20..         
212f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21300 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
21310 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d 0d  rn noNetFx20; }.
21320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21330 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32 30   set { noNetFx20
21340 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
21350 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21360 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
213b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
213c0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
213d0 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  x35;..          
213e0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
213f0 4e 65 74 46 78 33 35 0d 0a 20 20 20 20 20 20 20  NetFx35..       
21400 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21410 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
21420 74 75 72 6e 20 6e 6f 4e 65 74 46 78 33 35 3b 20  turn noNetFx35; 
21430 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
21440 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78     set { noNetFx
21450 33 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  35 = value; }.. 
21460 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
21480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
214c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
214d0 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65  rivate bool noNe
214e0 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20  tFx40;..        
214f0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
21500 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20 20 20  NoNetFx40..     
21510 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21520 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
21530 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 30  return noNetFx40
21540 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21550 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74       set { noNet
21560 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Fx40 = value; }.
21570 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
215e0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
215f0 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20  NetFx45;..      
21600 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
21610 6c 20 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20 20  l NoNetFx45..   
21620 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21630 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
21640 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78  { return noNetFx
21650 34 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  45; }..         
21660 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e         set { noN
21670 65 74 46 78 34 35 20 3d 20 76 61 6c 75 65 3b 20  etFx45 = value; 
21680 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21690 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
216a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
216f0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
21700 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20 20 20  noNetFx451;..   
21710 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
21720 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 31 0d  bool NoNetFx451.
21730 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21750 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
21760 65 74 46 78 34 35 31 3b 20 7d 0d 0a 20 20 20 20  etFx451; }..    
21770 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
21780 7b 20 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20 76  { noNetFx451 = v
21790 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
217a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
217b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
217c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21800 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
21810 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 3b 0d   bool noVs2005;.
21820 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21830 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30  lic bool NoVs200
21840 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  5..            {
21850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21860 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
21870 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20 20 20  oVs2005; }..    
21880 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
21890 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20 76 61 6c  { noVs2005 = val
218a0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
218b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
218c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
218d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21900 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21910 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
21920 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20  ool noVs2008;.. 
21930 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
21940 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38 0d  c bool NoVs2008.
21950 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21970 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56  get { return noV
21980 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20 20  s2008; }..      
21990 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
219a0 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75 65  noVs2008 = value
219b0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
219c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
219d0 20 20 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 2f 2f 2f 2f  ////////////////
21a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21a20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
21a30 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20  l noVs2010;..   
21a40 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
21a50 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a 20  bool NoVs2010.. 
21a60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21a80 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32  t { return noVs2
21a90 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  010; }..        
21aa0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
21ab0 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b 20  Vs2010 = value; 
21ac0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21ad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
21b30 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
21b40 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20  noVs2012;..     
21b50 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
21b60 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a 20 20 20  ol NoVs2012..   
21b70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21b80 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
21b90 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31  { return noVs201
21ba0 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  2; }..          
21bb0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
21bc0 32 30 31 32 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2012 = value; }.
21bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c30 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
21c40 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
21c50 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20 20  Vs2013;..       
21c60 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
21c70 20 4e 6f 56 73 32 30 31 33 0d 0a 20 20 20 20 20   NoVs2013..     
21c80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21c90 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
21ca0 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 33 3b  return noVs2013;
21cb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21cc0 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
21cd0 31 33 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  13 = value; }.. 
21ce0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21cf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
21d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21d40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
21d50 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72  rivate bool noTr
21d60 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ace;..          
21d70 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
21d80 54 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  Trace..         
21d90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21da0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
21db0 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20  rn noTrace; }.. 
21dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21dd0 65 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76  et { noTrace = v
21de0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
21df0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21e00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21e50 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
21e60 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b   bool noConsole;
21e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
21e80 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73  blic bool NoCons
21e90 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ole..           
21ea0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21eb0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21ec0 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20   noConsole; }.. 
21ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21ee0 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d  et { noConsole =
21ef0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
21f00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21f10 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21f60 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
21f70 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a  te bool noLog;..
21f80 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
21f90 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20  ic bool NoLog.. 
21fa0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21fc0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67  t { return noLog
21fd0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21fe0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67       set { noLog
21ff0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
22000 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
22010 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
22020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22060 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
22070 76 61 74 65 20 62 6f 6f 6c 20 74 68 72 6f 77 4f  vate bool throwO
22080 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20  nMissing;..     
22090 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
220a0 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol ThrowOnMissin
220b0 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  g..            {
220c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
220d0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
220e0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d  hrowOnMissing; }
220f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22100 20 20 73 65 74 20 7b 20 74 68 72 6f 77 4f 6e 4d    set { throwOnM
22110 69 73 73 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20  issing = value; 
22120 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
22130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22180 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
22190 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
221a0 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20  whatIf;..       
221b0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
221c0 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20   WhatIf..       
221d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
221e0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
221f0 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a  turn whatIf; }..
22200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22210 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20 76  set { whatIf = v
22220 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
22230 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22240 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22280 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22290 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
222a0 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a 20 20   bool debug;..  
222b0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
222c0 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a 20 20 20   bool Debug..   
222d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
222e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
222f0 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 3b 20  { return debug; 
22300 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
22310 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 20 3d     set { debug =
22320 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
22330 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22340 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
22390 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
223a0 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b  te bool verbose;
223b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
223c0 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73  blic bool Verbos
223d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
223e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
223f0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76    get { return v
22400 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20  erbose; }..     
22410 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
22420 20 76 65 72 62 6f 73 65 20 3d 20 76 61 6c 75 65   verbose = value
22430 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
22440 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22450 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22490 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
224a0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
224b0 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20  l confirm;..    
224c0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
224d0 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20  ool Confirm..   
224e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
224f0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
22500 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d  { return confirm
22510 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
22520 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69       set { confi
22530 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  rm = value; }.. 
22540 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
22550 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
22560 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
22570 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
22580 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
22590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
225e0 20 20 23 72 65 67 69 6f 6e 20 46 72 61 6d 65 77    #region Framew
225f0 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  orkList Class.. 
22600 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
22610 65 61 6c 65 64 20 63 6c 61 73 73 20 46 72 61 6d  ealed class Fram
22620 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20  eworkList..     
22630 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22640 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
22650 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
22660 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
22670 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28  c FrameworkList(
22680 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
22690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
226a0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
226b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
226c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
226d0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
226e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
226f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22730 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
22740 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73  n Public Methods
22750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
22760 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
22770 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a  ryKey rootKey;..
22780 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
22790 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
227a0 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
227b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
227c0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
227d0 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
227e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
227f0 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
22800 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
22810 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22820 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
22880 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74  ivate StringList
22890 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20   names;..       
228a0 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
228b0 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20  ngList Names..  
228c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
228e0 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b   { return names;
228f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22900 20 20 20 20 73 65 74 20 7b 20 6e 61 6d 65 73 20      set { names 
22910 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
22920 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22930 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
22940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22980 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
22990 61 74 65 20 56 65 72 73 69 6f 6e 4d 61 70 20 76  ate VersionMap v
229a0 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20  ersions;..      
229b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72        public Ver
229c0 73 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73  sionMap Versions
229d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
229e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
229f0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65   get { return ve
22a00 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20  rsions; }..     
22a10 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
22a20 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75   versions = valu
22a30 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
22a40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22a50 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a90 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22aa0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74        private St
22ab0 72 69 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f 72  ringList platfor
22ac0 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20  mNames;..       
22ad0 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
22ae0 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e  ngList PlatformN
22af0 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
22b00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22b10 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
22b20 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b  n platformNames;
22b30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22b40 20 20 20 20 73 65 74 20 7b 20 70 6c 61 74 66 6f      set { platfo
22b50 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b  rmNames = value;
22b60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22b70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
22b80 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
22b90 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
22ba0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
22bb0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
22bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
22c00 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
22c10 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20  sList Class..   
22c20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
22c30 6c 65 64 20 63 6c 61 73 73 20 56 73 4c 69 73 74  led class VsList
22c40 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
22c50 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
22c60 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
22c70 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
22c80 20 20 70 75 62 6c 69 63 20 56 73 4c 69 73 74 28    public VsList(
22c90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
22ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22cb0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
22cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
22ce0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
22cf0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22d40 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
22d50 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
22d60 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
22d70 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
22d80 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
22d90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
22da0 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
22db0 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20  ryKey RootKey.. 
22dc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
22de0 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b  t { return rootK
22df0 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ey; }..         
22e00 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f         set { roo
22e10 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tKey = value; }.
22e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
22e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
22e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e80 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
22e90 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e   private Version
22ea0 4c 69 73 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a  List versions;..
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
22ec0 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 56  ic VersionList V
22ed0 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  ersions..       
22ee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22ef0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
22f00 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d  turn versions; }
22f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22f20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73    set { versions
22f30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
22f40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
22f50 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
22f60 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
22f70 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
22f80 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  n..        #endr
22f90 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
22fa0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fe0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22ff0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
23000 61 74 65 20 43 6f 6e 73 74 61 6e 74 20 44 61 74  ate Constant Dat
23010 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  a..        priva
23020 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
23030 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22  CoreFileName = "
23040 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
23050 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20  te.dll";..      
23060 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
23070 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e  string LinqFileN
23080 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
23090 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64  ta.SQLite.Linq.d
230a0 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ll";..        pr
230b0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
230c0 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d 65 20 3d  ng Ef6FileName =
230d0 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
230e0 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 22 3b 0d 0a  Lite.EF6.dll";..
230f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23100 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73  const string Des
23110 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
23120 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72  "SQLite.Designer
23130 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20  .dll";..        
23140 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
23150 72 69 6e 67 20 50 72 6f 76 69 64 65 72 4e 61 6d  ring ProviderNam
23160 65 20 3d 20 22 53 51 4c 69 74 65 20 44 61 74 61  e = "SQLite Data
23170 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20 20   Provider";..   
23180 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
23190 73 74 20 73 74 72 69 6e 67 20 50 72 6f 6a 65 63  st string Projec
231a0 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  tName = "System.
231b0 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20  Data.SQLite";.. 
231c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
231d0 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 65 67 61  onst string Lega
231e0 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20  cyProjectName = 
231f0 22 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20  "SQLite";..     
23200 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
23210 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69 61 6e   string Invarian
23220 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  tName = "System.
23230 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20  Data.SQLite";.. 
23240 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
23250 6f 6e 73 74 20 73 74 72 69 6e 67 20 46 61 63 74  onst string Fact
23260 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d 20 22 53  oryTypeName = "S
23270 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
23280 65 2e 53 51 4c 69 74 65 46 61 63 74 6f 72 79 22  e.SQLiteFactory"
23290 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
232a0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
232b0 44 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22 2e  Description = ".
232c0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 44 61  NET Framework Da
232d0 74 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20  ta Provider for 
232e0 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20 20  SQLite";....    
232f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23340 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
23350 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76  onst string CLRv
23360 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  2ImageRuntimeVer
23370 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30 37  sion = "v2.0.507
23380 32 37 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  27";..        pr
23390 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
233a0 6e 67 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e  ng CLRv4ImageRun
233b0 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76  timeVersion = "v
233c0 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a 20  4.0.30319";.... 
233d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
233e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23420 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
23430 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e  e const string N
23440 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
23450 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d  t = "{0}: {1}";.
23460 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23470 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f   const string Lo
23480 67 46 69 6c 65 53 75 66 66 69 78 20 3d 20 22 2e  gFileSuffix = ".
23490 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  log";....       
234a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
234b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
234f0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
23500 74 20 73 74 72 69 6e 67 20 56 73 44 65 76 45 6e  t string VsDevEn
23510 76 53 65 74 75 70 46 6f 72 6d 61 74 20 3d 20 22  vSetupFormat = "
23520 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 0d 0a 20 20  {0}: {1}";....  
23530 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23580 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23590 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 52 6f   const string Ro
235a0 6f 74 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f 66  otKeyName = "Sof
235b0 74 77 61 72 65 22 3b 0d 0a 20 20 20 20 20 20 20  tware";..       
235c0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
235d0 74 72 69 6e 67 20 57 6f 77 36 34 53 75 62 4b 65  tring Wow64SubKe
235e0 79 4e 61 6d 65 20 3d 20 22 57 6f 77 36 34 33 32  yName = "Wow6432
235f0 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  Node";....      
23600 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23640 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23650 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
23660 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e   // NOTE: The .N
23670 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 68 61 73  ET Framework has
23680 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64   both 32-bit and
23690 20 36 34 2d 62 69 74 20 65 64 69 74 69 6f 6e 73   64-bit editions
236a0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
236b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
236c0 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62  tatic readonly b
236d0 6f 6f 6c 20 4e 65 74 46 78 49 73 33 32 42 69 74  ool NetFxIs32Bit
236e0 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  Only = false;...
236f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
23700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ....        //..
23750 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
23760 20 46 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c   For now, Visual
23770 20 53 74 75 64 69 6f 20 69 73 20 61 6c 77 61 79   Studio is alway
23780 73 20 61 20 33 32 2d 62 69 74 20 61 70 70 6c 69  s a 32-bit appli
23790 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
237a0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69   //..        pri
237b0 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
237c0 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33 32  only bool VsIs32
237d0 42 69 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d  BitOnly = true;.
237e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
237f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23830 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
23840 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
23850 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 56 73 49  donly string VsI
23860 64 46 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a  dFormat = "B";..
23870 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
23880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
238d0 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
238e0 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74  only string XPat
238f0 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d  hForAddElement =
23900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 63  ..            "c
23910 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73  onfiguration/sys
23920 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69  tem.data/DbProvi
23930 64 65 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64  derFactories/add
23940 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30  [@invariant=\"{0
23950 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  }\"]";....      
23960 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
23970 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67   readonly string
23980 20 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45   XPathForRemoveE
23990 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20  lement =..      
239a0 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61        "configura
239b0 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61  tion/system.data
239c0 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  /DbProviderFacto
239d0 72 69 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76  ries/remove[@inv
239e0 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22  ariant=\"{0}\"]"
239f0 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
23a00 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
23a10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a50 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
23a60 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
23a70 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61 0d  ate Static Data.
23a80 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23a90 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79   static Assembly
23aa0 20 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20   thisAssembly = 
23ab0 41 73 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63  Assembly.GetExec
23ac0 75 74 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b  utingAssembly();
23ad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
23ae0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
23af0 67 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 20  g traceCategory 
23b00 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
23b10 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
23b20 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f   thisAssembly.Lo
23b30 63 61 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45  cation); /* NOTE
23b40 3a 20 53 61 6d 65 20 66 6f 72 20 64 65 62 75 67  : Same for debug
23b50 20 61 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d 0a   and trace. */..
23b60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
23b70 65 20 73 74 61 74 69 63 20 54 72 61 63 65 43 61  e static TraceCa
23b80 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c  llback debugCall
23b90 62 61 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b  back = AppDebug;
23ba0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
23bb0 65 20 73 74 61 74 69 63 20 54 72 61 63 65 43 61  e static TraceCa
23bc0 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c  llback traceCall
23bd0 62 61 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b  back = AppTrace;
23be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
23c40 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
23c50 72 69 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63  ring systemDirec
23c60 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  tory = null;....
23c70 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20  #if WINDOWS..   
23c80 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
23c90 74 69 63 20 73 74 72 69 6e 67 20 73 79 73 74 65  tic string syste
23ca0 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20  mDirectoryWow64 
23cb0 3d 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d  = null;..#endif.
23cc0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
23cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d10 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
23d20 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
23d30 20 66 69 6c 65 73 43 72 65 61 74 65 64 20 3d 20   filesCreated = 
23d40 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  0;..        priv
23d50 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66  ate static int f
23d60 69 6c 65 73 4d 6f 64 69 66 69 65 64 20 3d 20 30  ilesModified = 0
23d70 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
23d80 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69  te static int fi
23d90 6c 65 73 44 65 6c 65 74 65 64 20 3d 20 30 3b 0d  lesDeleted = 0;.
23da0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
23db0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
23dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23e10 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20    #region Trace 
23e20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
23e30 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
23e40 20 73 74 72 69 6e 67 20 47 65 74 4c 6f 67 46 69   string GetLogFi
23e50 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  leName(..       
23e60 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
23e70 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
23e80 20 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d    ) /* throw */.
23e90 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
23ea0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
23eb0 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47  ileName = Path.G
23ec0 65 74 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29  etTempFileName()
23ed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ;..            s
23ee0 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
23ef0 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65 63 74  = Path.GetDirect
23f00 6f 72 79 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65  oryName(fileName
23f10 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
23f20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f  string fileNameO
23f30 6e 6c 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69  nly = Path.GetFi
23f40 6c 65 4e 61 6d 65 57 69 74 68 6f 75 74 45 78 74  leNameWithoutExt
23f50 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29  ension(fileName)
23f60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23f70 20 73 74 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e   string newFileN
23f80 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
23f90 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 53 74  ne(directory, St
23fa0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
23fc0 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65  0}{1}{2}", trace
23fd0 43 61 74 65 67 6f 72 79 2c 20 21 53 74 72 69 6e  Category, !Strin
23fe0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
23ff0 74 79 70 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  typeName) ?..   
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 20 22 2e 22 20 2b 20 74 79 70 65 4e 61 6d 65 20   "." + typeName 
24020 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20  : String.Empty, 
24030 22 2e 22 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e  "." + fileNameOn
24040 6c 79 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20  ly +..          
24050 20 20 20 20 20 20 20 20 20 20 4c 6f 67 46 69 6c            LogFil
24060 65 53 75 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20  eSuffix));....  
24070 20 20 20 20 20 20 20 20 20 20 46 69 6c 65 2e 4d            File.M
24080 6f 76 65 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65  ove(fileName, ne
24090 77 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  wFileName);.... 
240a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
240b0 6e 20 6e 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a  n newFileName;..
240c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
240d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
240e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24120 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24130 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70 44  static void AppD
24140 65 62 75 67 28 0d 0a 20 20 20 20 20 20 20 20 20  ebug(..         
24150 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
24160 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
24170 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d  string category.
24180 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
24190 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
241a0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
241b0 44 65 62 75 67 43 6f 72 65 28 53 74 72 69 6e 67  DebugCore(String
241c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
241d0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
241e0 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20  ps.DebugFormat, 
241f0 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 44 65 62  TraceOps.NextDeb
24200 75 67 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20  ugId(),..       
24210 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
24220 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65  s.TimeStamp(Date
24230 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65  Time.UtcNow), me
24240 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79  ssage), category
24250 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
24260 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
24270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
242c0 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
242d0 41 70 70 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AppTrace(..     
242e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
242f0 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
24300 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
24310 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
24320 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
24330 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
24340 4f 70 73 2e 54 72 61 63 65 43 6f 72 65 28 53 74  Ops.TraceCore(St
24350 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
24360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
24370 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d  aceOps.TraceForm
24380 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78  at, TraceOps.Nex
24390 74 54 72 61 63 65 49 64 28 29 2c 0d 0a 20 20 20  tTraceId(),..   
243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
243b0 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28  ceOps.TimeStamp(
243c0 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29  DateTime.UtcNow)
243d0 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65  , message), cate
243e0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
243f0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
24400 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
24410 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24450 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24460 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65      #region Gene
24470 72 69 63 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e  ric Platform Han
24480 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
24490 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
244a0 6f 6c 20 49 73 36 34 42 69 74 50 72 6f 63 65 73  ol Is64BitProces
244b0 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s()..        {..
244c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
244d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
244e0 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 72 75  OTE: Returns tru
244f0 65 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  e if the current
24500 20 70 72 6f 63 65 73 73 20 69 73 20 36 34 2d 62   process is 64-b
24510 69 74 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20  it.  If this..  
24520 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
24530 20 20 20 69 73 20 74 72 75 65 2c 20 77 65 20 2a     is true, we *
24540 6b 6e 6f 77 2a 20 74 68 61 74 20 77 65 20 6d 75  know* that we mu
24550 73 74 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e  st be running on
24560 20 61 20 36 34 2d 62 69 74 0d 0a 20 20 20 20 20   a 64-bit..     
24570 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
24580 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
24590 20 61 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76   as well.  Howev
245a0 65 72 2c 20 69 66 20 74 68 69 73 20 69 73 20 66  er, if this is f
245b0 61 6c 73 65 2c 20 77 65 0d 0a 20 20 20 20 20 20  alse, we..      
245c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
245d0 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c  o not necessaril
245e0 79 20 6b 6e 6f 77 20 74 68 61 74 20 77 65 20 61  y know that we a
245f0 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20  re running on a 
24600 33 32 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20  32-bit..        
24610 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65      //       ope
24620 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2c 20 64  rating system, d
24630 75 65 20 74 6f 20 57 6f 57 36 34 20 28 57 69 6e  ue to WoW64 (Win
24640 33 32 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74  32-on-Win64), et
24650 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c...            
24660 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
24670 72 65 74 75 72 6e 20 28 49 6e 74 50 74 72 2e 53  return (IntPtr.S
24680 69 7a 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f  ize == sizeof(lo
24690 6e 67 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50  ng)); // NOTE: P
246a0 6f 69 6e 74 65 72 20 69 73 20 36 34 2d 62 69 74  ointer is 64-bit
246b0 73 3f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  s?..        }...
246c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
246d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
24720 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
24730 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b  IsSupportedRootK
24740 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
24750 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65   MockRegistry re
24760 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
24770 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
24780 79 4b 65 79 20 72 6f 6f 74 4b 65 79 0d 0a 20 20  yKey rootKey..  
24790 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
247a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
247b0 20 20 20 20 72 65 74 75 72 6e 20 4f 62 6a 65 63      return Objec
247c0 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c  t.ReferenceEqual
247d0 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73  s(rootKey, regis
247e0 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29  try.CurrentUser)
247f0 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
24800 20 20 20 20 20 4f 62 6a 65 63 74 2e 52 65 66 65       Object.Refe
24810 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
24820 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f  Key, registry.Lo
24830 63 61 6c 4d 61 63 68 69 6e 65 29 3b 0d 0a 20 20  calMachine);..  
24840 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24850 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
248a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
248b0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 52  atic string GetR
248c0 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ootKeyName(..   
248d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
248e0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
248f0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
24900 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
24910 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24920 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
24930 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a        // BUGFIX:
24940 20 41 70 70 61 72 65 6e 74 6c 79 2c 20 74 68 65   Apparently, the
24950 20 70 65 72 2d 75 73 65 72 20 72 65 67 69 73 74   per-user regist
24960 72 79 20 68 69 76 65 20 64 6f 65 73 20 6e 6f 74  ry hive does not
24970 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20   use..          
24980 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74 68 65    //         the
24990 20 22 57 6f 77 36 34 33 32 4e 6f 64 65 22 20 6e   "Wow6432Node" n
249a0 6f 64 65 20 74 6f 20 73 74 6f 72 65 20 73 65 74  ode to store set
249b0 74 69 6e 67 73 20 66 6f 72 20 33 32 2d 62 69 74  tings for 32-bit
249c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
249d0 20 20 20 20 20 20 20 20 20 61 70 70 6c 69 63 61           applica
249e0 74 69 6f 6e 73 20 72 75 6e 6e 69 6e 67 20 6f 6e  tions running on
249f0 20 61 20 36 34 2d 62 69 74 20 6f 70 65 72 61 74   a 64-bit operat
24a00 69 6e 67 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20  ing system...   
24a10 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
24a20 20 20 20 20 54 69 63 6b 65 74 20 5b 61 30 36 37      Ticket [a067
24a30 37 33 30 39 66 30 5d 20 68 61 73 20 66 75 72 74  7309f0] has furt
24a40 68 65 72 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20  her details...  
24a50 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
24a60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24a70 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
24a80 7b 30 7d 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65 79  {0}{1}", RootKey
24a90 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
24aa0 20 20 20 20 20 20 20 21 70 65 72 55 73 65 72 20         !perUser 
24ab0 26 26 20 77 6f 77 36 34 20 26 26 20 49 73 36 34  && wow64 && Is64
24ac0 42 69 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a  BitProcess() ?..
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ae0 20 20 20 20 22 5c 5c 22 20 2b 20 57 6f 77 36 34      "\\" + Wow64
24af0 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20 53 74 72  SubKeyName : Str
24b00 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20  ing.Empty);..   
24b10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24b20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
24b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
24b70 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
24b80 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53 79  tic string GetSy
24b90 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 0d 0a  stemDirectory(..
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
24bb0 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
24bc0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
24bd0 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
24be0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77             if (w
24bf0 6f 77 36 34 29 0d 0a 20 20 20 20 20 20 20 20 20  ow64)..         
24c00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24c10 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65 6d        if (system
24c20 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d  DirectoryWow64 =
24c30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
24c40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c60 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57  systemDirectoryW
24c70 6f 77 36 34 20 3d 0d 0a 20 20 20 20 20 20 20 20  ow64 =..        
24c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c90 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
24ca0 6f 64 73 2e 47 65 74 53 79 73 74 65 6d 44 69 72  ods.GetSystemDir
24cb0 65 63 74 6f 72 79 28 29 3b 0d 0a 20 20 20 20 20  ectory();..     
24cc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ce0 72 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69 72  return systemDir
24cf0 65 63 74 6f 72 79 57 6f 77 36 34 3b 0d 0a 20 20  ectoryWow64;..  
24d00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
24d10 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23           else..#
24d20 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
24d30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24d40 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65 6d        if (system
24d50 44 69 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75 6c  Directory == nul
24d60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
24d70 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 44 69          systemDi
24d80 72 65 63 74 6f 72 79 20 3d 20 45 6e 76 69 72 6f  rectory = Enviro
24d90 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44 69 72 65  nment.SystemDire
24da0 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  ctory;....      
24db0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24dc0 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
24dd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
24de0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
24df0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
24e00 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
24e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e50 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
24e60 65 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 53 74  egion Generic St
24e70 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  ring Handling.. 
24e80 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
24e90 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f 72  tatic string For
24ea0 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
24eb0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
24ec0 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
24ed0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
24ee0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
24ef0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24f10 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a  turn "<null>";..
24f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
24f30 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20  ring result;..  
24f40 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 74            Type t
24f50 79 70 65 20 3d 20 76 61 6c 75 65 2e 47 65 74 54  ype = value.GetT
24f60 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ype();....      
24f70 20 20 20 20 20 20 69 66 20 28 74 79 70 65 20 3d        if (type =
24f80 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d  = typeof(XmlElem
24f90 65 6e 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ent))..         
24fa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24fb0 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
24fc0 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45   element = (XmlE
24fd0 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d  lement)value;...
24fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24ff0 20 72 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e   result = elemen
25000 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20  t.OuterXml;..   
25010 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25020 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
25030 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28  (type == typeof(
25040 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20  Version))..     
25050 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25060 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
25070 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28 56 65 72  n version = (Ver
25080 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  sion)value;.... 
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
250a0 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46  esult = String.F
250b0 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 76 65  ormat("v{0}", ve
250c0 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20  rsion);..       
250d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
250e0 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70      else if (typ
250f0 65 20 3d 3d 20 74 79 70 65 6f 66 28 50 72 6f 63  e == typeof(Proc
25100 65 73 73 53 74 61 72 74 49 6e 66 6f 29 29 0d 0a  essStartInfo))..
25110 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
25130 72 6f 63 65 73 73 53 74 61 72 74 49 6e 66 6f 20  rocessStartInfo 
25140 73 74 61 72 74 49 6e 66 6f 20 3d 20 28 50 72 6f  startInfo = (Pro
25150 63 65 73 73 53 74 61 72 74 49 6e 66 6f 29 76 61  cessStartInfo)va
25160 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
25170 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
25180 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
25190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
251a0 20 20 20 20 20 22 66 69 6c 65 4e 61 6d 65 20 3d       "fileName =
251b0 20 7b 30 7d 2c 20 61 72 67 75 6d 65 6e 74 73 20   {0}, arguments 
251c0 3d 20 7b 31 7d 2c 20 77 6f 72 6b 69 6e 67 44 69  = {1}, workingDi
251d0 72 65 63 74 6f 72 79 20 3d 20 7b 32 7d 2c 20 22  rectory = {2}, "
251e0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
251f0 20 20 20 20 20 20 20 20 22 75 73 65 53 68 65 6c          "useShel
25200 6c 45 78 65 63 75 74 65 20 3d 20 7b 33 7d 2c 20  lExecute = {3}, 
25210 72 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64  redirectStandard
25220 4f 75 74 70 75 74 20 3d 20 7b 34 7d 2c 20 22 20  Output = {4}, " 
25230 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
25240 20 20 20 20 20 20 20 22 72 65 64 69 72 65 63 74         "redirect
25250 53 74 61 6e 64 61 72 64 45 72 72 6f 72 20 3d 20  StandardError = 
25260 7b 35 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {5}", ForDisplay
25270 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
25280 20 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f         startInfo
25290 2e 46 69 6c 65 4e 61 6d 65 29 2c 20 46 6f 72 44  .FileName), ForD
252a0 69 73 70 6c 61 79 28 73 74 61 72 74 49 6e 66 6f  isplay(startInfo
252b0 2e 41 72 67 75 6d 65 6e 74 73 29 2c 0d 0a 20 20  .Arguments),..  
252c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252d0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 73 74 61    ForDisplay(sta
252e0 72 74 49 6e 66 6f 2e 57 6f 72 6b 69 6e 67 44 69  rtInfo.WorkingDi
252f0 72 65 63 74 6f 72 79 29 2c 20 46 6f 72 44 69 73  rectory), ForDis
25300 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
25310 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
25320 49 6e 66 6f 2e 55 73 65 53 68 65 6c 6c 45 78 65  Info.UseShellExe
25330 63 75 74 65 29 2c 20 46 6f 72 44 69 73 70 6c 61  cute), ForDispla
25340 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
25350 20 20 20 20 20 20 20 20 73 74 61 72 74 49 6e 66          startInf
25360 6f 2e 52 65 64 69 72 65 63 74 53 74 61 6e 64 61  o.RedirectStanda
25370 72 64 4f 75 74 70 75 74 29 2c 20 46 6f 72 44 69  rdOutput), ForDi
25380 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
25390 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
253a0 74 49 6e 66 6f 2e 52 65 64 69 72 65 63 74 53 74  tInfo.RedirectSt
253b0 61 6e 64 61 72 64 45 72 72 6f 72 29 29 3b 20 2f  andardError)); /
253c0 2a 20 52 45 43 55 52 53 49 56 45 20 2a 2f 0d 0a  * RECURSIVE */..
253d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
253e0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
253f0 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
25400 6f 66 28 50 72 6f 63 65 73 73 29 29 0d 0a 20 20  of(Process))..  
25410 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
25430 63 65 73 73 20 70 72 6f 63 65 73 73 20 3d 20 28  cess process = (
25440 50 72 6f 63 65 73 73 29 76 61 6c 75 65 3b 0d 0a  Process)value;..
25450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25460 20 20 72 65 73 75 6c 74 20 3d 20 70 72 6f 63 65    result = proce
25470 73 73 2e 49 64 2e 54 6f 53 74 72 69 6e 67 28 29  ss.Id.ToString()
25480 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
254a0 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74  se if (type == t
254b0 79 70 65 6f 66 28 44 61 74 61 52 65 63 65 69 76  ypeof(DataReceiv
254c0 65 64 45 76 65 6e 74 41 72 67 73 29 29 0d 0a 20  edEventArgs)).. 
254d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61                Da
254f0 74 61 52 65 63 65 69 76 65 64 45 76 65 6e 74 41  taReceivedEventA
25500 72 67 73 20 65 76 65 6e 74 41 72 67 73 20 3d 20  rgs eventArgs = 
25510 28 44 61 74 61 52 65 63 65 69 76 65 64 45 76 65  (DataReceivedEve
25520 6e 74 41 72 67 73 29 76 61 6c 75 65 3b 0d 0a 0d  ntArgs)value;...
25530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25540 20 72 65 73 75 6c 74 20 3d 20 46 6f 72 44 69 73   result = ForDis
25550 70 6c 61 79 28 65 76 65 6e 74 41 72 67 73 2e 44  play(eventArgs.D
25560 61 74 61 29 3b 20 2f 2a 20 52 45 43 55 52 53 49  ata); /* RECURSI
25570 56 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  VE */..         
25580 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25590 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
255a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
255b0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
255c0 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29  value.ToString()
255d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
255e0 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e       if (result.
255f0 4c 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20  Length == 0)..  
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25610 20 20 72 65 74 75 72 6e 20 22 3c 65 6d 70 74 79    return "<empty
25620 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  >";....         
25630 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
25640 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
25650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25660 20 20 20 20 74 79 70 65 2e 49 73 53 75 62 63 6c      type.IsSubcl
25670 61 73 73 4f 66 28 74 79 70 65 6f 66 28 56 61 6c  assOf(typeof(Val
25680 75 65 54 79 70 65 29 29 20 3f 20 22 7b 30 7d 22  ueType)) ? "{0}"
25690 20 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20   : "\"{0}\"",.. 
256a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256b0 20 20 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20     result);..   
256c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
256d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
256e0 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
256f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
25700 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
25710 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25760 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73        #region As
25770 73 65 6d 62 6c 79 20 41 74 74 72 69 62 75 74 65  sembly Attribute
25780 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
25790 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
257a0 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d   string GetAssem
257b0 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
257c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  (..            A
257d0 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
257e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
257f0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
25800 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
25810 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly != null).. 
25820 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25840 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
25850 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25860 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
25870 73 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64  sembly.IsDefined
25880 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
25890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
258a0 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f  ypeof(AssemblyCo
258b0 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69  nfigurationAttri
258c0 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a  bute), false))..
258d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
25900 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
25910 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 63 6f  tionAttribute co
25920 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20  nfiguration =.. 
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25940 20 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65             (Asse
25950 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
25960 6e 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20  nAttribute)..   
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25980 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
25990 79 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69  y.GetCustomAttri
259a0 62 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20  butes(..        
259b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259c0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41          typeof(A
259d0 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
259e0 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 0d  tionAttribute),.
259f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a10 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20   false)[0];.... 
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
25a40 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66  nfiguration.Conf
25a50 69 67 75 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20  iguration;..    
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
25a80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25a90 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ac0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
25ad0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
25ae0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
25af0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
25b00 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
25b10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
25b20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
25b70 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
25b80 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
25b90 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
25ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
25bb0 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d  sembly assembly.
25bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
25bd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25be0 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
25bf0 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly != null)..  
25c00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
25c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25c40 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
25c50 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28  embly.IsDefined(
25c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
25c80 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74  peof(AssemblyTit
25c90 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20 66 61  leAttribute), fa
25ca0 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lse))..         
25cb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cd0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 54 69        AssemblyTi
25ce0 74 6c 65 41 74 74 72 69 62 75 74 65 20 74 69 74  tleAttribute tit
25cf0 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  le =..          
25d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d10 20 20 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65    (AssemblyTitle
25d20 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20  Attribute)..    
25d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d40 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79          assembly
25d50 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62  .GetCustomAttrib
25d60 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  utes(..         
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d80 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
25d90 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
25da0 62 75 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d  bute), false)[0]
25db0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25dd0 75 72 6e 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b  urn title.Title;
25de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25df0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
25e00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25e10 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
25e20 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
25e30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25e40 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
25e50 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
25e60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25e70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25e80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25e90 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
25ea0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
25eb0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
25ec0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
25f10 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
25f20 20 46 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c   Framework Handl
25f30 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
25f40 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
25f50 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52  ng GetFrameworkR
25f60 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ootKeyName(..   
25f70 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
25f80 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
25f90 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
25fa0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
25fb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25fc0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
25fd0 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c  ing.Format("{0}\
25fe0 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54  \Microsoft\\.NET
25ff0 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20  Framework",..   
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
26010 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55  RootKeyName(perU
26020 73 65 72 2c 20 77 6f 77 36 34 29 29 3b 0d 0a 20  ser, wow64));.. 
26030 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26040 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
26050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
26090 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
260a0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
260b0 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65  FrameworkKeyName
260c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
260d0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
260e0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
260f0 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
26100 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
26110 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
26120 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
26130 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
26140 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
26150 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
26160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
26170 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
26180 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
26190 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e  ormat = !String.
261a0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c  IsNullOrEmpty(pl
261b0 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20  atformName) ?.. 
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
261d0 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
261e0 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20  {1}\\v{2}\\{3}" 
261f0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
26200 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
26210 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d  ft\\{1}\\v{2}";.
26220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
26230 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
26240 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52  mat(format, GetR
26250 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73  ootKeyName(perUs
26260 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20  er, wow64),..   
26270 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
26280 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
26290 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
262a0 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20  atformName);..  
262b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
262c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
262d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26310 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
26320 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 49  atic string GetI
26330 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
26340 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
26350 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
26360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
26370 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
26380 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
26390 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
263a0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
263b0 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 0d  mbly assembly =.
263c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
263d0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 2e 52 65       Assembly.Re
263e0 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64  flectionOnlyLoad
263f0 46 72 6f 6d 28 66 69 6c 65 4e 61 6d 65 29 3b 20  From(fileName); 
26400 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26420 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e  f (assembly != n
26430 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
26440 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
26450 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52   assembly.ImageR
26460 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a  untimeVersion;..
26470 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
26480 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
26490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
264a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
264b0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
264c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
264d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
264e0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
264f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26500 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26540 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26550 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
26560 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61  ic string GetFra
26570 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
26580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
26590 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
265a0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
265b0 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
265c0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
265d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
265e0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
265f0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
26600 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
26610 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
26620 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
26630 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
26640 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
26650 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
26660 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
26670 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
26680 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
26690 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
266a0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
266b0 79 2c 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52  y, GetFrameworkR
266c0 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73  ootKeyName(perUs
266d0 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20  er, wow64),..   
266e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266f0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
26700 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
26710 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26720 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
26730 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
26740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26750 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
26760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26770 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52  object value = R
26780 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65  egistryHelper.Ge
26790 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
267b0 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c  , "InstallRoot",
267c0 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76   null, whatIf, v
267d0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
267e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
267f0 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
26800 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
26810 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26820 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
26830 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26840 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26860 20 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65     (string)value
26870 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
26880 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72  "v{0}", framewor
26890 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20  kVersion));..   
268a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
268b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
268c0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
268d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
268e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
26920 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
26930 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c  Per-Framework/Pl
26940 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d  atform Handling.
26950 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
26960 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69   static void Ini
26970 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b  tializeFramework
26980 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20  List(..         
26990 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
269a0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
269b0 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
269c0 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
269d0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
269e0 20 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b     ref Framework
269f0 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69  List frameworkLi
26a00 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..            
26a10 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
26a20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
26a30 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e  ameworkList == n
26a40 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
26a50 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
26a60 69 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77  ist = new Framew
26a70 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  orkList();....  
26a80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
26a90 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74  ameworkList.Root
26aa0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
26ac0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74  ameworkList.Root
26ad0 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a  Key = rootKey;..
26ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b30 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
26b40 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
26b50 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  st.Names == null
26b60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
26b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26b80 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
26b90 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69  Names = new Stri
26ba0 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
26bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26bc0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
26bd0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
26be0 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
26bf0 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
26c00 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
26c10 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41  workList.Names.A
26c20 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  dd(".NETFramewor
26c30 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  k");....        
26c40 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
26c50 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
26c60 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
26c70 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
26c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26c90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26ca0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
26cb0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64  rkList.Names.Add
26cc0 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61  (".NETCompactFra
26cd0 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20  mework");..     
26ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26cf0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
26d00 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70  es.Add(".NETComp
26d10 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d  actFramework");.
26d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26d30 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
26d40 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e  st.Names.Add(".N
26d50 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
26d60 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rk");..         
26d70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
26d80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26d90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26de0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
26df0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
26e00 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
26e10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
26e30 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
26e40 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69  ions = new Versi
26e50 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20  onMap();....    
26e60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26e70 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
26e80 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
26e90 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b  iguration.NoDesk
26ea0 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20  top)..          
26eb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
26ed0 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f 70  sionList desktop
26ee0 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65  VersionList = ne
26ef0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
26f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26f10 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
26f20 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
26f30 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
26f40 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29  ation.NoNetFx20)
26f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26f60 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
26f70 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  pVersionList.Add
26f80 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20  (new Version(2, 
26f90 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20  0, 50727));.... 
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fb0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
26fc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
26fd0 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61  TE: The .NET Fra
26fe0 6d 65 77 6f 72 6b 20 33 2e 35 20 64 6f 65 73 20  mework 3.5 does 
26ff0 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e  not have its own
27000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27010 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
27020 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65  irectory; howeve
27030 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20  r, it still may 
27040 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20  have assembly.. 
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64     //       fold
27070 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56  ers for use in V
27080 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74  isual Studio, et
27090 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c...            
270a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
270b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270c0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
270d0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
270e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
270f0 4e 65 74 46 78 33 35 29 0d 0a 20 20 20 20 20 20  NetFx35)..      
27100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27110 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
27120 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
27130 73 69 6f 6e 28 33 2c 20 35 29 29 3b 0d 0a 0d 0a  sion(3, 5));....
27140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27150 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
27160 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
27170 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
27180 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20  n.NoNetFx40)..  
27190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271a0 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
271b0 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
271c0 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33   Version(4, 0, 3
271d0 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  0319));....     
271e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
271f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
27200 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
27210 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  The .NET Framewo
27220 72 6b 20 34 2e 35 20 64 6f 65 73 20 6e 6f 74 20  rk 4.5 does not 
27230 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20  have its own..  
27240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27250 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63    //       direc
27260 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69  tory; however, i
27270 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65  t still may have
27280 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
272a0 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20  /       folders 
272b0 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61  for use in Visua
272c0 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a  l Studio, etc...
272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
272f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27300 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
27310 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
27320 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
27330 78 34 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x45)..          
27340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
27350 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
27360 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
27370 28 34 2c 20 35 2c 20 35 30 37 30 39 29 29 3b 0d  (4, 5, 50709));.
27380 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27390 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
273b0 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
273c0 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 2e 31   Framework 4.5.1
273d0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69   does not have i
273e0 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  ts own..        
273f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
27400 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20       directory; 
27410 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c  however, it stil
27420 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d  l may have assem
27430 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bly..           
27440 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
27450 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73    folders for us
27460 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64  e in Visual Stud
27470 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  io, etc...      
27480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
27490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
274a0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
274b0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
274c0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
274d0 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 31 29 0d  ion.NoNetFx451).
274e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
274f0 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
27500 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
27510 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35  new Version(4, 5
27520 2c 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  , 1));....      
27530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
27540 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
27550 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46 72  ions.Add(".NETFr
27560 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20  amework",..     
27570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27580 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
27590 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20  nList);..       
275a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
275b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
275c0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
275d0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
275e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f  nfiguration.NoCo
275f0 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
27600 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
27620 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
27630 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 43  sions.Add(".NETC
27640 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
27650 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27660 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
27670 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56  ersionList(new V
27680 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20  ersion[] {..    
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276a0 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28      new Version(
276b0 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65 77  2, 0, 0, 0), new
276c0 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 30   Version(3, 5, 0
276d0 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  , 0)..          
276e0 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b 0d 0a            }));..
276f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27700 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27760 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
27770 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
27780 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
27790 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
277a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
277b0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
277c0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
277d0 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74  rmNames = new St
277e0 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
277f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27800 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
27810 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
27820 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
27830 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
27840 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
27850 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
27860 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75 6c  ormNames.Add(nul
27870 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
27880 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
27890 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
278a0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
278b0 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
278c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
278d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
278e0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
278f0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
27900 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65 74 50  mes.Add("PocketP
27910 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  C");..          
27920 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
27930 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
27940 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61 72 74  Names.Add("Smart
27950 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20 20  phone");..      
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
27970 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
27980 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 57  formNames.Add("W
27990 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20  indowsCE");..   
279a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
279b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
279c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
279d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
279e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
27a20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
27a30 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46  tatic bool HaveF
27a40 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
27a50 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
27a60 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
27a70 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
27a80 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
27a90 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
27aa0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
27ab0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
27ac0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
27ad0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
27ae0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
27af0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
27b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
27b10 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
27b20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
27b30 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
27b40 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
27b50 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
27b60 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72  tring installDir
27b70 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..        
27b80 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
27b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
27ba0 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
27bb0 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61  etFrameworkKeyNa
27bc0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
27bd0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
27be0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
27bf0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
27c00 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  me, perUser,..  
27c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f                wo
27c20 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
27c30 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
27c40 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
27c50 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
27c60 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
27c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c80 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
27c90 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
27ca0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
27cb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
27cd0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
27ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cf0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
27d00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27d10 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
27d20 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f  Name != null) //
27d30 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d   NOTE: Skip non-
27d40 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20  desktop...      
27d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27d60 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  turn true;....  
27d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
27d80 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
27d90 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
27da0 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
27dc0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56  tKey, frameworkV
27dd0 65 72 73 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c  ersion, perUser,
27de0 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d   wow64, whatIf,.
27df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e00 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
27e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27e20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
27e30 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63  ullOrEmpty(direc
27e40 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
27e50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27e60 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
27e70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
27e80 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73  (!Directory.Exis
27e90 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ts(directory))..
27ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27eb0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
27ec0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27ed0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
27ee0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
27ef0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
27f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27f10 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
27f20 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
27f30 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
27f40 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
27f50 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
27f60 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e  amework {0} foun
27f70 64 20 76 69 61 20 64 69 72 65 63 74 6f 72 79 20  d via directory 
27f80 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
27f90 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
27fa0 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
27fb0 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73  Version), ForDis
27fc0 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
27fd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27fe0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
27ff0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
28000 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c            instal
28010 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72  lDirectory = dir
28020 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
28030 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28040 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
28050 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
28060 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
28070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
280c0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
280d0 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 52  l HaveFrameworkR
280e0 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
280f0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
28100 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
28110 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
28120 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
28130 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
28140 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
28150 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
28160 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
28170 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
28180 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
28190 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
281a0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
281b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
281c0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
281d0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
281e0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
281f0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
28200 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
28210 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72   keyName = GetFr
28220 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d  ameworkKeyName(.
28230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28240 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
28250 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
28260 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
28270 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
28280 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29            wow64)
28290 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
282a0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
282b0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
282c0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
282d0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
282e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
282f0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
28300 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
28310 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
28320 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28330 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
28340 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
28350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28360 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
28370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28380 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  if (platformName
28390 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54   != null) // NOT
283a0 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b  E: Skip non-desk
283b0 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  top...          
283c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
283d0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
283e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
283f0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
28400 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
28410 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
28420 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
28430 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
28440 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
28450 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
28460 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
28470 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
28480 20 66 6f 75 6e 64 20 76 69 61 20 72 65 67 69 73   found via regis
28490 74 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20  try {1}.",..    
284a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284b0 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
284c0 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f  workVersion), Fo
284d0 72 44 69 73 70 6c 61 79 28 6b 65 79 4e 61 6d 65  rDisplay(keyName
284e0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
284f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
28500 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
28510 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28520 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
28530 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
28540 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28590 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
285a0 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
285b0 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
285c0 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
285d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
285e0 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68  tic bool ForEach
285f0 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28  FrameworkConfig(
28600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
28610 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73  ckRegistry regis
28620 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
28630 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    FrameworkList 
28640 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a  frameworkList,..
28650 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
28660 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62  eworkConfigCallb
28670 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ack callback,.. 
28680 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
28690 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f  g version, /* NO
286a0 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f  TE: Optional. */
286b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
286c0 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
286d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
286e0 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
286f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
28700 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  scription,..    
28710 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
28720 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
28730 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
28740 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
28750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
28760 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
28770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28780 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
28790 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
287a0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
287b0 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
287c0 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
287d0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
287e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
287f0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
28800 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f           ref boo
28810 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20  l saved,..      
28820 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
28830 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
28840 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
28850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28860 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75   (registry == nu
28870 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28880 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28890 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
288a0 61 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d  alid registry";.
288b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
288c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
288d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
288e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
288f0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d  (frameworkList =
28900 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
28910 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28920 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
28930 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f  "invalid framewo
28940 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20  rk list";..     
28950 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28960 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
28970 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28980 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
28990 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d  tryKey rootKey =
289a0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52   frameworkList.R
289b0 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
289c0 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
289d0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
289e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
289f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
28a00 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f  r = "invalid roo
28a10 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20  t key";..       
28a20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28a30 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
28a40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28a50 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70       if (!IsSupp
28a60 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67  ortedRootKey(reg
28a70 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29  istry, rootKey))
28a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28aa0 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b   error = "root k
28ab0 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75  ey must be per-u
28ac0 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69  ser or per-machi
28ad0 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne";..          
28ae0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
28af0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
28b00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28b10 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
28b20 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  ist.Names == nul
28b30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
28b40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28b50 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66     error = "no f
28b60 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66  ramework names f
28b70 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
28b80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
28b90 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
28ba0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28bb0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
28bc0 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  kList.Versions =
28bd0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
28be0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28bf0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
28c00 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65  "no framework ve
28c10 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a  rsions found";..
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c30 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
28c40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28c50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28c60 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
28c70 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e  atformNames == n
28c80 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
28c90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28ca0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
28cb0 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20   platform names 
28cc0 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
28cd0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28ce0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
28cf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28d00 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
28d10 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
28d20 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  nt != frameworkL
28d30 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
28d40 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20  s.Count)..      
28d50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28d60 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
28d70 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
28d80 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63  framework name c
28d90 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f  ount {0} does no
28da0 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  t " +..         
28db0 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63             "matc
28dc0 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20  h platform name 
28dd0 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d  count {1}", fram
28de0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
28df0 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  Count,..        
28e00 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
28e10 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
28e20 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d  rmNames.Count);.
28e30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28e40 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
28e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28e60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
28e70 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
28e80 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65  0; index < frame
28e90 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
28ea0 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ount; index++)..
28eb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28ed0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
28ee0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
28ef0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
28f00 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e   framework (e.g.
28f10 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22   ".NETFramework"
28f20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28f30 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20     //       and 
28f40 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
28f50 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22  platform (e.g. "
28f60 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20  WindowsCE")...  
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
28f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28f90 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
28fa0 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f  rkName = framewo
28fb0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64  rkList.Names[ind
28fc0 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex];..          
28fd0 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
28fe0 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d  tformName = fram
28ff0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
29000 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d  rmNames[index];.
29010 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29020 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
29030 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
29040 53 6b 69 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73  Skip all non-des
29050 6b 74 6f 70 20 66 72 61 6d 65 77 6f 72 6b 73 20  ktop frameworks 
29060 28 69 2e 65 2e 20 69 66 20 74 68 65 20 70 6c 61  (i.e. if the pla
29070 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  tform..         
29080 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
29090 6e 61 6d 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c  name is not null
290a0 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
290b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
290c0 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74          if (plat
290d0 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  formName != null
290e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
290f0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
29100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29110 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
29120 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
29130 20 47 72 61 62 20 74 68 65 20 73 75 70 70 6f 72   Grab the suppor
29140 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ted versions of 
29150 74 68 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d  this particular.
29160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29170 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77   //       framew
29180 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ork...          
29190 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
291a0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
291b0 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56  nList frameworkV
291c0 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20  ersionList;.... 
291d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
291e0 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75  f (version != nu
291f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29200 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
29220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29230 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e      // NOTE: Man
29240 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20  ual override of 
29250 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77  the *ONE* framew
29260 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20  ork version..   
29270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29280 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f   //       to pro
29290 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
292a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
292b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292c0 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73     frameworkVers
292d0 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65  ionList = new Ve
292e0 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20  rsionList();..  
292f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29300 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69    frameworkVersi
29310 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
29320 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29  ersion(version))
29330 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29340 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
29350 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
29360 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29380 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72     if (!framewor
29390 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54  kList.Versions.T
293a0 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  ryGetValue(..   
293b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293c0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
293d0 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d  rkName, out fram
293e0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
293f0 29 20 7c 7c 0d 0a 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 28 66                (f
29410 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
29420 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ist == null)).. 
29430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29440 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
29460 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
29470 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29490 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
294a0 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65       foreach (Ve
294b0 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
294c0 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77  ersion in framew
294d0 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d  orkVersionList).
294e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
294f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29500 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
29510 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
29520 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
29530 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
29550 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
29560 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
29570 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
29580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29590 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d     "frameworkNam
295a0 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f  e = {0}, framewo
295b0 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c  rkVersion = {1},
295c0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
295d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70                "p
295e0 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32  latformName = {2
295f0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  }", ForDisplay(f
29600 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a  rameworkName),..
29610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29620 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
29630 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
29640 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
29650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
29660 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f  orDisplay(platfo
29670 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  rmName)), traceC
29680 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296a0 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44   string installD
296b0 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b  irectory = null;
296c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
296d0 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
296e0 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74  eFrameworkDirect
296f0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
29700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29710 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
29720 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
29730 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
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 70 6c 61 74 66 6f 72           platfor
29760 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20  mName, perUser, 
29770 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76  wow64, whatIf, v
29780 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
29790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297a0 20 20 20 20 20 72 65 66 20 69 6e 73 74 61 6c 6c       ref install
297b0 44 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  Directory))..   
297c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
297e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
297f0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
29800 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
29810 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
29820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29830 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
29840 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
29850 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
29860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29870 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
29880 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
29890 20 64 69 72 65 63 74 6f 72 79 20 6e 6f 74 20 66   directory not f
298a0 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20  ound, " +..     
298b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298c0 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67         "skipping
298d0 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
298e0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
298f0 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
29900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29910 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
29920 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29930 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
29940 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
29950 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
29960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29970 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
29980 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
29990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299a0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
299b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
299c0 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
299d0 63 74 6f 72 79 20 3d 20 69 6e 73 74 61 6c 6c 44  ctory = installD
299e0 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20  irectory;....   
299f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a00 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
29a10 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74  llOrEmpty(direct
29a20 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
29a30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a50 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
29a60 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
29a70 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
29a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29a90 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
29aa0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
29ab0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
29ac0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
29ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ae0 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
29af0 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63  mework {0} direc
29b00 74 6f 72 79 20 69 73 20 69 6e 76 61 6c 69 64 2c  tory is invalid,
29b10 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
29b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b30 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
29b40 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
29b50 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d  eworkVersion)),.
29b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
29b80 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
29b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ba0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
29bb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29bc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29be0 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68  directory = Path
29bf0 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
29c00 72 79 2c 20 22 43 6f 6e 66 69 67 22 29 3b 0d 0a  ry, "Config");..
29c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29c20 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63        if (!Direc
29c30 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65  tory.Exists(dire
29c40 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
29c50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
29c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c70 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
29c80 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
29c90 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
29ca0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
29cc0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
29cd0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
29ce0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
29d10 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72  ramework {0} dir
29d20 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f 65 73 20  ectory {1} does 
29d30 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  not " +..       
29d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d50 20 20 20 20 20 22 65 78 69 73 74 2c 20 73 6b 69       "exist, ski
29d60 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
29d70 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
29d80 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
29d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29da0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
29db0 28 64 69 72 65 63 74 6f 72 79 29 29 2c 20 74 72  (directory)), tr
29dc0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
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 63 6f 6e 74 69 6e 75           continu
29df0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
29e00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
29e30 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
29e40 64 69 72 65 63 74 6f 72 79 2c 20 22 6d 61 63 68  directory, "mach
29e50 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b 0d 0a 0d  ine.config");...
29e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29e70 20 20 20 20 20 69 66 20 28 21 46 69 6c 65 2e 45       if (!File.E
29e80 78 69 73 74 73 28 66 69 6c 65 4e 61 6d 65 29 29  xists(fileName))
29e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ea0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ec0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
29ed0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
29ee0 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
29ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f00 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
29f10 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
29f20 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
29f30 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
29f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f50 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
29f60 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31 7d 20 64  k {0} file {1} d
29f70 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22  oes not exist, "
29f80 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
29f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fa0 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46  "skipping...", F
29fb0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
29fc0 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
29fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fe0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
29ff0 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65 29 29 2c  play(fileName)),
2a000 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2a010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a020 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
2a030 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
2a040 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2a050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a060 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61      bool localSa
2a070 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ved = false;....
2a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a090 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63      if (!callbac
2a0a0 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0c0 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
2a0d0 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72  ant, name, descr
2a0e0 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65  iption, typeName
2a0f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2a110 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 69 6e 73  ssemblyName, ins
2a120 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 2c 20 63  tallDirectory, c
2a130 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a150 20 20 20 20 20 20 20 20 70 65 72 55 73 65 72 2c          perUser,
2a160 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d   wow64, throwOnM
2a170 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20  issing, whatIf, 
2a180 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1a0 20 20 20 20 20 20 72 65 66 20 6c 6f 63 61 6c 53        ref localS
2a1b0 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29  aved, ref error)
2a1c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a1d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2a200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a210 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2a220 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2a230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a240 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a260 20 69 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20   if (localSaved 
2a270 26 26 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20  && !saved)..    
2a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a290 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20          saved = 
2a2a0 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
2a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2c0 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
2a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2e0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2a2f0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2a300 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2a310 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
2a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a330 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2a340 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2a350 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2a360 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a380 20 20 20 20 20 20 20 22 6c 6f 63 61 6c 53 61 76         "localSav
2a390 65 64 20 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20  ed = {0}, saved 
2a3a0 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {1}",..       
2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3c0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
2a3d0 6c 61 79 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c  lay(localSaved),
2a3e0 20 46 6f 72 44 69 73 70 6c 61 79 28 73 61 76 65   ForDisplay(save
2a3f0 64 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d)),..          
2a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a410 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2a420 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
2a430 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2a450 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2a460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2a470 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2a480 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a490 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2a4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2a4e0 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2a4f0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2a500 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2a510 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2a520 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
2a530 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  achFrameworkRegi
2a540 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
2a550 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20     MockRegistry 
2a560 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
2a570 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
2a580 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69  List frameworkLi
2a590 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
2a5a0 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74   FrameworkRegist
2a5b0 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62  ryCallback callb
2a5c0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
2a5d0 20 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e    string version
2a5e0 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f  , /* NOTE: Optio
2a5f0 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  nal. */..       
2a600 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
2a610 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
2a620 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2a630 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2a640 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2a650 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
2a660 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2a670 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a680 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2a690 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2a6a0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2a6b0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2a6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2a6d0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2a6e0 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
2a6f0 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
2a700 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2a720 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
2a730 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
2a740 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a750 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2a760 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a770 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
2a780 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  workList == null
2a790 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2a7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a7b0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2a7c0 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73  id framework lis
2a7d0 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
2a7e0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2a7f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2a800 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a810 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2a820 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65   rootKey = frame
2a830 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  workList.RootKey
2a840 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a850 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
2a860 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2a870 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a880 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2a890 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
2a8a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2a8b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2a8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a8d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2a8e0 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52  f (!IsSupportedR
2a8f0 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c  ootKey(registry,
2a900 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20   rootKey))..    
2a910 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a920 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2a930 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
2a940 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
2a950 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
2a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a970 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2a980 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2a990 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a9a0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
2a9b0 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
2a9c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2a9e0 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
2a9f0 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rk names found";
2aa00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aa10 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2aa20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2aa30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2aa40 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
2aa50 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
2aa60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2aa70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aa80 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
2aa90 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
2aaa0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
2aab0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2aac0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2aad0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2aae0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
2aaf0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
2ab00 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
2ab10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2ab30 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66  rror = "no platf
2ab40 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  orm names found"
2ab50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ab60 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2ab70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ab80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2ab90 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
2aba0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20  .Names.Count != 
2abb0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
2abc0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
2abd0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
2abe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2abf0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2ac00 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77  g.Format("framew
2ac10 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  ork name count {
2ac20 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d  0} does not " +.
2ac30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ac40 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74       "match plat
2ac50 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20  form name count 
2ac60 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c  {1}", frameworkL
2ac70 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c  ist.Names.Count,
2ac80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ac90 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
2aca0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2acb0 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  s.Count);....   
2acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2acd0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2ace0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2acf0 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
2ad00 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
2ad10 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ex < frameworkLi
2ad20 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20  st.Names.Count; 
2ad30 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
2ad40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ad50 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2ad70 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
2ad80 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
2ad90 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
2ada0 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
2adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2adc0 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
2add0 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
2ade0 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
2adf0 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
2ae00 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2ae10 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2ae20 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2ae30 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
2ae40 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  .Names[index];..
2ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae60 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
2ae70 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
2ae80 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2ae90 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
2aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2aeb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aec0 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
2aed0 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72  he supported ver
2aee0 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61  sions of this pa
2aef0 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20  rticular..      
2af00 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2af10 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20     framework... 
2af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2af30 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2af40 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66     VersionList f
2af50 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2af60 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
2af70 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73          if (vers
2af80 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion != null)..  
2af90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2afa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2afb0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2afd0 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65  NOTE: Manual ove
2afe0 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e  rride of the *ON
2aff0 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  E* framework ver
2b000 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
2b010 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2b020 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a     to process...
2b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b040 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2b050 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2b060 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
2b070 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
2b080 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  st();..         
2b090 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2b0a0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e  workVersionList.
2b0b0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2b0c0 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20  version));..    
2b0d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2b0f0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2b100 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b110 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b120 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  !frameworkList.V
2b130 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61  ersions.TryGetVa
2b140 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b160 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
2b170 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65   out frameworkVe
2b180 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20  rsionList) ||.. 
2b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1a0 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72         (framewor
2b1b0 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20  kVersionList == 
2b1c0 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1f0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2b200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b210 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2b220 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
2b240 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66  reach (Version f
2b250 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
2b260 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  in frameworkVers
2b270 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20  ionList)..      
2b280 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2a0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2b2b0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2b2c0 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
2b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2e0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2b2f0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2b300 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
2b310 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2b320 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61              "fra
2b330 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d  meworkName = {0}
2b340 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2b350 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20  on = {1}, " +.. 
2b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b370 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d         "platform
2b380 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72  Name = {2}", For
2b390 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
2b3a0 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  kName),..       
2b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3c0 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
2b3d0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
2b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3f0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2b400 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ay(platformName)
2b410 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
2b420 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b430 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48            if (!H
2b440 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  aveFrameworkRegi
2b450 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
2b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b470 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
2b480 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
2b490 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4b0 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
2b4c0 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c  rmName, perUser,
2b4d0 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
2b4e0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2b500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b510 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2b520 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2b530 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
2b540 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
2b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b560 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2b570 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2b580 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5a0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
2b5b0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 72   Framework {0} r
2b5c0 65 67 69 73 74 72 79 20 6e 6f 74 20 66 6f 75 6e  egistry not foun
2b5d0 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  d, " +..        
2b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5f0 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e      "skipping...
2b600 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
2b610 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29  ameworkVersion))
2b620 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2b640 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2b650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b660 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2b670 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2b680 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6a0 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d    if (callback =
2b6b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6d0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
2b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6f0 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
2b700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2b720 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
2b730 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2b740 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b760 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
2b770 65 2c 20 6e 75 6c 6c 2c 20 63 6c 69 65 6e 74 44  e, null, clientD
2b780 61 74 61 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20  ata, perUser,.. 
2b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7a0 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34             wow64
2b7b0 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
2b7c0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2b7d0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7f0 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
2b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b810 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b820 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b830 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b860 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2b870 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b880 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2b890 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2b8a0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2b8b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2b8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2b910 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20 53  ion Per-Visual S
2b920 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61  tudio Version Ha
2b930 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
2b940 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
2b950 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73  oid InitializeVs
2b960 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20  List(..         
2b970 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2b980 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2b990 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
2b9a0 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
2b9b0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
2b9c0 20 20 20 72 65 66 20 56 73 4c 69 73 74 20 76 73     ref VsList vs
2b9d0 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  List..          
2b9e0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2b9f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ba00 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  vsList == null).
2ba10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ba20 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56 73   vsList = new Vs
2ba30 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
2ba40 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73         if (vsLis
2ba50 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c  t.RootKey == nul
2ba60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ba70 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b      vsList.RootK
2ba80 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d  ey = rootKey;...
2ba90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2baa0 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  (vsList.Versions
2bab0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2bac0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2bad0 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
2bae0 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20  .Versions = new 
2baf0 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a  VersionList();..
2bb00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bb10 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2bb20 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2bb30 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2bb40 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20 20 20  NoVs2005)..     
2bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2bb60 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2bb70 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38  dd(new Version(8
2bb80 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d 0a  , 0)); // 2005..
2bb90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bba0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2bbb0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2bbc0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2bbd0 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20  NoVs2008)..     
2bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2bbf0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2bc00 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39  dd(new Version(9
2bc10 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d 0a  , 0)); // 2008..
2bc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bc30 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2bc40 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2bc50 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2bc60 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20  NoVs2010)..     
2bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2bc80 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2bc90 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31  dd(new Version(1
2bca0 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d 0a  0, 0));// 2010..
2bcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bcc0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2bcd0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2bce0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2bcf0 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20 20 20  NoVs2012)..     
2bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2bd10 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2bd20 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31  dd(new Version(1
2bd30 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d 0a  1, 0));// 2012..
2bd40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bd50 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2bd60 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2bd70 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2bd80 4e 6f 56 73 32 30 31 33 29 0d 0a 20 20 20 20 20  NoVs2013)..     
2bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2bda0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2bdb0 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31  dd(new Version(1
2bdc0 32 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33 0d 0a  2, 0));// 2013..
2bdd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2bde0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2bdf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2be00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2be40 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2be50 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56  tatic bool HaveV
2be60 73 56 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72  sVersionDirector
2be70 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2be80 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2be90 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2bea0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2beb0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2bec0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
2bed0 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
2bee0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2bef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2bf00 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2bf10 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2bf20 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2bf30 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2bf40 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2bf50 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72  tring installDir
2bf60 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..        
2bf70 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2bf80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2bf90 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
2bfa0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2bfb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2bfc0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
2bfd0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
2bfe0 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
2bff0 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
2c000 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ix, perUser, wow
2c010 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
2c020 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2c030 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
2c040 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2c050 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c070 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2c080 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
2c090 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2c0a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c0b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2c0c0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2c0f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c100 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
2c110 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2c120 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .GetValue(..    
2c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c140 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72  key, "InstallDir
2c150 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  ", null, whatIf,
2c160 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2c180 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72   (!(value is str
2c190 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ing))..         
2c1a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c1b0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
2c1c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2c1d0 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28  ng directory = (
2c1e0 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d  string)value;...
2c1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c200 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
2c210 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74  llOrEmpty(direct
2c220 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
2c230 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c240 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
2c250 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2c260 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74  !Directory.Exist
2c270 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  s(directory)).. 
2c280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c290 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2c2a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c2b0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2c2c0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2c2d0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
2c2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c2f0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2c300 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2c310 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2c320 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c330 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53         "Visual S
2c340 74 75 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20  tudio {0} found 
2c350 69 6e 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d  in directory {1}
2c360 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
2c370 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
2c380 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20  lay(vsVersion), 
2c390 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
2c3a0 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  tory)),..       
2c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2c3c0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3e0 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
2c3f0 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20   = directory;.. 
2c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c410 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2c420 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2c430 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c440 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c480 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2c490 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2c4a0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2c4b0 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2c4c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2c4d0 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
2c4e0 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
2c4f0 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
2c500 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20     MockRegistry 
2c510 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
2c520 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73         VsList vs
2c530 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
2c540 20 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52     VisualStudioR
2c550 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20  egistryCallback 
2c560 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
2c570 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
2c580 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
2c590 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
2c5a0 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
2c5b0 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
2c5c0 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
2c5d0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2c5f0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2c600 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2c610 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2c620 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2c630 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2c640 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2c650 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2c660 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2c670 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2c680 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c690 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79      if (registry
2c6a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2c6b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c6c0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2c6d0 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73  = "invalid regis
2c6e0 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  try";..         
2c6f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2c700 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2c710 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2c720 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d     if (vsList ==
2c730 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2c740 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c750 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2c760 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22  invalid VS list"
2c770 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c780 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2c790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c7a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
2c7b0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2c7c0 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e  ootKey = vsList.
2c7d0 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  RootKey;....    
2c7e0 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
2c7f0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2c800 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c810 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2c820 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f  or = "invalid ro
2c830 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20  ot key";..      
2c840 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c850 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2c860 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c870 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70        if (!IsSup
2c880 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65  portedRootKey(re
2c890 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29  gistry, rootKey)
2c8a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c8c0 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20    error = "root 
2c8d0 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d  key must be per-
2c8e0 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68  user or per-mach
2c8f0 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ine";..         
2c900 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2c910 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2c920 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2c930 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65     if (vsList.Ve
2c940 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
2c950 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c970 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76  error = "no VS v
2c980 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d  ersions found";.
2c990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c9a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2c9b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c9c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
2c9d0 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73  each (Version vs
2c9e0 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73  Version in vsLis
2c9f0 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20  t.Versions)..   
2ca00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2ca20 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2ca30 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2ca40 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
2ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2ca60 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2ca70 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2ca80 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2caa0 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22  vsVersion = {0}"
2cab0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56  , ForDisplay(vsV
2cac0 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
2cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2cae0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2caf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cb00 20 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c    string install
2cb10 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c  Directory = null
2cb20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2cb30 20 20 20 20 20 69 66 20 28 21 48 61 76 65 56 73       if (!HaveVs
2cb40 56 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79  VersionDirectory
2cb50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2cb60 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2cb70 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
2cb80 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20  uffix, perUser, 
2cb90 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a  wow64, whatIf,..
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbb0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
2cbc0 20 72 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65   ref installDire
2cbd0 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
2cbe0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc00 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2cc10 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2cc20 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
2cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc40 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2cc50 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2cc60 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2cc70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cc80 20 20 20 20 20 20 20 20 20 22 56 69 73 75 61 6c           "Visual
2cc90 20 53 74 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20   Studio {0} not 
2cca0 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e  found, skipping.
2ccb0 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2ccd0 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69  rDisplay(vsVersi
2cce0 6f 6e 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  on)), traceCateg
2ccf0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2cd10 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
2cd20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2cd40 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c  (callback == nul
2cd50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2cd60 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
2cd70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2cd80 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61       if (!callba
2cd90 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
2cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2cdb0 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
2cdc0 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
2cdd0 2c 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f  , installDirecto
2cde0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
2cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 69               cli
2ce00 65 6e 74 44 61 74 61 2c 20 70 65 72 55 73 65 72  entData, perUser
2ce10 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e  , wow64, throwOn
2ce20 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c  Missing, whatIf,
2ce30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ce40 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
2ce50 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  e, ref error))..
2ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ce80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ce90 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2cea0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2ceb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2cec0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2ced0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
2cee0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2cef0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
2cf00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2cf50 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72  #region Configur
2cf60 61 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64 6c  ation File Handl
2cf70 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  ing..        [Me
2cf80 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2cf90 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2cfa0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2cfb0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2cfc0 62 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76 69 64  bool AddDbProvid
2cfd0 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
2cfe0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2cff0 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
2d000 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
2d010 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20  ariant,..       
2d020 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
2d030 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2d040 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f  tring descriptio
2d050 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2d060 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c  string typeName,
2d070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
2d080 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
2d090 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  blyName,..      
2d0a0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2d0b0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2d0c0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2d0d0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
2d0e0 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
2d0f0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2d100 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2d110 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2d120 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d130 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c  bool dirty = fal
2d140 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2d150 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63   XmlDocument doc
2d160 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44  ument = new XmlD
2d170 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20  ocument();....  
2d180 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
2d190 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74 65  nt.PreserveWhite
2d1a0 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20  space = true;.. 
2d1b0 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
2d1c0 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d  ent.Load(fileNam
2d1d0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2d1e0 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61 64     XmlElement ad
2d1f0 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d  dElement = docum
2d200 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
2d210 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
2d220 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
2d230 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41 64 64  rmat(XPathForAdd
2d240 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61  Element, invaria
2d250 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65  nt)) as XmlEleme
2d260 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  nt;....         
2d270 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e     if (addElemen
2d280 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
2d290 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d2a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2d2b0 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73  g[] elementNames
2d2c0 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   = {..          
2d2d0 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65            "syste
2d2e0 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76  m.data", "DbProv
2d2f0 69 64 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a  iderFactories"..
2d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d310 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
2d320 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
2d330 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
2d340 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
2d350 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
2d360 2e 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74  .DocumentElement
2d370 3b 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69  ; /* configurati
2d380 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  on */....       
2d390 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
2d3a0 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74   (string element
2d3b0 4e 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e  Name in elementN
2d3c0 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ames)..         
2d3d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2d3f0 64 45 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76 69  dElement = previ
2d400 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65 63  ousElement.Selec
2d410 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20  tSingleNode(..  
2d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d430 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d        elementNam
2d440 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74  e) as XmlElement
2d450 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d460 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64           if (add
2d470 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  Element == null)
2d480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d490 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4b0 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
2d4c0 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65  cument.CreateEle
2d4d0 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  ment(..         
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4f0 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20     elementName, 
2d500 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
2d510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d520 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
2d530 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64  usElement.Append
2d540 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74  Child(addElement
2d550 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2d560 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2d570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d580 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
2d590 20 3d 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a   = addElement;..
2d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2d5c0 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20       addElement 
2d5d0 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74  = document.Creat
2d5e0 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20  eElement(..     
2d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2d600 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70  add", String.Emp
2d610 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
2d620 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73          previous
2d630 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68  Element.AppendCh
2d640 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b  ild(addElement);
2d650 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d660 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
2d670 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d690 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
2d6a0 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65  ls(addElement.Ge
2d6b0 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65  tAttribute("name
2d6c0 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
2d6d0 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53           name, S
2d6e0 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
2d6f0 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20  Ordinal))..     
2d700 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d710 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
2d720 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74  ment.SetAttribut
2d730 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b  e("name", name);
2d740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d750 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
2d760 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2d770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2d780 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
2d790 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
2d7a0 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69  ttribute("invari
2d7b0 61 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ant"),..        
2d7c0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 76 61              inva
2d7d0 72 69 61 6e 74 2c 20 53 74 72 69 6e 67 43 6f 6d  riant, StringCom
2d7e0 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29  parison.Ordinal)
2d7f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2d800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d810 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74    addElement.Set
2d820 41 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72  Attribute("invar
2d830 69 61 6e 74 22 2c 20 69 6e 76 61 72 69 61 6e 74  iant", invariant
2d840 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2d850 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
2d860 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d870 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d880 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
2d890 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65  ls(addElement.Ge
2d8a0 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63  tAttribute("desc
2d8b0 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20  ription"),..    
2d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8d0 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53 74 72  description, Str
2d8e0 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
2d8f0 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20  dinal))..       
2d900 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d910 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
2d920 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28  nt.SetAttribute(
2d930 22 64 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64  "description", d
2d940 65 73 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20  escription);..  
2d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2d960 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2d970 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d980 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2d990 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20   fullTypeName = 
2d9a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
2d9b0 30 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}, {1}",..     
2d9c0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 4e             typeN
2d9d0 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d  ame, assemblyNam
2d9e0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2d9f0 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
2da00 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74  quals(addElement
2da10 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22 74  .GetAttribute("t
2da20 79 70 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ype"),..        
2da30 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c              full
2da40 54 79 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67  TypeName, String
2da50 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
2da60 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
2da70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2da80 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e       addElement.
2da90 53 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79  SetAttribute("ty
2daa0 70 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d  pe", fullTypeNam
2dab0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2dac0 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75       dirty = tru
2dad0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2dae0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2daf0 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68   if (dirty || wh
2db00 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2db10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2db20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
2db30 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2db40 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2db50 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2db60 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
2db70 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
2db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2db90 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2dba0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2dbb0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbd0 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74       "addElement
2dbe0 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70   = {0}", ForDisp
2dbf0 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 29  lay(addElement))
2dc00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2dc10 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2dc20 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2dc40 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
2dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc60 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69  document.Save(fi
2dc70 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
2dc80 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
2dc90 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a  sModified++;....
2dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcb0 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  saved = true;.. 
2dcc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2dcd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2dce0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
2dcf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2dd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2dd50 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
2dd60 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
2dd70 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
2dd80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2dd90 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
2dda0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
2ddb0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2ddc0 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
2ddd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2dde0 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
2ddf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2de00 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
2de10 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
2de20 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
2de30 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64    ref bool saved
2de40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2de50 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
2de60 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2de70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2de80 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74         bool dirt
2de90 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  y = false;..    
2dea0 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d          XmlDocum
2deb0 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e  ent document = n
2dec0 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29  ew XmlDocument()
2ded0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2dee0 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72   document.Preser
2def0 76 65 57 68 69 74 65 73 70 61 63 65 20 3d 20 74  veWhitespace = t
2df00 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2df10 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28    document.Load(
2df20 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
2df30 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65            XmlEle
2df40 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74 20  ment addElement 
2df50 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63  = document.Selec
2df60 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20  tSingleNode(..  
2df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
2df80 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74  ring.Format(XPat
2df90 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20  hForAddElement, 
2dfa0 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20 58  invariant)) as X
2dfb0 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
2dfc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64            if (ad
2dfd0 64 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c  dElement != null
2dfe0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2dff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e000 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61 72    addElement.Par
2e010 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68  entNode.RemoveCh
2e020 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b  ild(addElement);
2e030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e040 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
2e050 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
2e070 6c 45 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65 45  lElement removeE
2e080 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
2e090 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
2e0a0 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de(..           
2e0b0 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
2e0c0 61 74 28 58 50 61 74 68 46 6f 72 52 65 6d 6f 76  at(XPathForRemov
2e0d0 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  eElement, invari
2e0e0 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d  ant)) as XmlElem
2e0f0 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ent;....        
2e100 20 20 20 20 69 66 20 28 72 65 6d 6f 76 65 45 6c      if (removeEl
2e110 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ement != null)..
2e120 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e140 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2e 50 61 72  emoveElement.Par
2e150 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68  entNode.RemoveCh
2e160 69 6c 64 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  ild(removeElemen
2e170 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
2e180 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75       dirty = tru
2e190 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e1a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e1b0 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68   if (dirty || wh
2e1c0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2e1d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e1e0 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
2e1f0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2e200 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2e210 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2e220 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
2e230 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
2e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2e250 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2e260 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2e270 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e290 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74       "addElement
2e2a0 20 3d 20 7b 30 7d 2c 20 72 65 6d 6f 76 65 45 6c   = {0}, removeEl
2e2b0 65 6d 65 6e 74 20 3d 20 7b 31 7d 22 2c 0d 0a 20  ement = {1}",.. 
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2d0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2e2e0 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 2c 20 46  y(addElement), F
2e2f0 6f 72 44 69 73 70 6c 61 79 28 72 65 6d 6f 76 65  orDisplay(remove
2e300 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20  Element)),..    
2e310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e320 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2e330 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2e340 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
2e350 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
2e360 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
2e370 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29  t.Save(fileName)
2e380 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e390 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69       filesModifi
2e3a0 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed++;....       
2e3b0 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d           saved =
2e3c0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2e3d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e3e0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2e3f0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2e400 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2e450 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2e460 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
2e470 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65 72  rocessDbProvider
2e480 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
2e490 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
2e4a0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
2e4b0 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72      string invar
2e4c0 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  iant,..         
2e4d0 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
2e4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2e4f0 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  ing description,
2e500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2e510 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a  ring typeName,..
2e520 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
2e530 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c  mblyName assembl
2e540 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
2e550 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
2e560 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
2e570 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
2e580 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
2e590 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
2e5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2e5b0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
2e5c0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
2e5d0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
2e5e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2e5f0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2e600 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2e610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2e620 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
2e630 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2e640 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
2e650 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2e660 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e670 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
2e680 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
2e690 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
2e6a0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
2e6b0 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
2e6c0 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
2e6d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e6e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e6f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2e700 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
2e710 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b   config callback
2e720 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
2e730 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e740 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2e750 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e760 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
2e770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e790 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62   return RemoveDb
2e7a0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
2e7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e7c0 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
2e7d0 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49  invariant, whatI
2e7e0 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
2e7f0 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
2e800 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2e810 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20  error) &&..     
2e820 20 20 20 20 20 20 20 20 20 20 20 41 64 64 44 62             AddDb
2e830 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
2e840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e850 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
2e860 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c  invariant, name,
2e870 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79   description, ty
2e880 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
2e890 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
2e8a0 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49  emblyName, whatI
2e8b0 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
2e8c0 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72  saved, ref error
2e8d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2e8e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
2e8f0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2e900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e910 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
2e920 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
2e930 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2e940 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
2e950 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68  e, invariant, wh
2e960 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
2e970 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ef saved,..     
2e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e990 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
2e9a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2e9b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2e9c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2e9d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2e9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2ea20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41         #region A
2ea30 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20  ssembly Folders 
2ea40 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
2ea50 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2ea60 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d   string GetAssem
2ea70 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
2ea80 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2ea90 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
2eaa0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2eab0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
2eac0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2ead0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2eae0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2eaf0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2eb00 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2eb10 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2eb20 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
2eb30 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2eb40 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2eb50 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2eb60 3a 20 54 68 69 73 20 72 65 67 69 73 74 72 79 20  : This registry 
2eb70 6b 65 79 20 61 70 70 65 61 72 73 20 74 6f 20 61  key appears to a
2eb80 6c 77 61 79 73 20 62 65 20 33 32 2d 62 69 74 20  lways be 32-bit 
2eb90 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  only..          
2eba0 20 20 2f 2f 20 20 20 20 20 20 20 28 69 2e 65 2e    //       (i.e.
2ebb0 20 70 72 6f 62 61 62 6c 79 20 62 65 63 61 75 73   probably becaus
2ebc0 65 20 69 74 20 69 73 20 6f 6e 6c 79 20 75 73 65  e it is only use
2ebd0 64 20 62 79 20 56 69 73 75 61 6c 0d 0a 20 20 20  d by Visual..   
2ebe0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2ebf0 20 20 53 74 75 64 69 6f 2c 20 77 68 69 63 68 20    Studio, which 
2ec00 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6c 77  is currently alw
2ec10 61 79 73 20 33 32 2d 62 69 74 20 6f 6e 6c 79 29  ays 32-bit only)
2ec20 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2ec30 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  /..            s
2ec40 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21  tring format = !
2ec50 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
2ec60 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  mpty(platformNam
2ec70 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  e) ?..          
2ec80 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72        "{0}\\Micr
2ec90 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d  osoft\\{1}\\v{2}
2eca0 5c 5c 7b 33 7d 5c 5c 41 73 73 65 6d 62 6c 79 46  \\{3}\\AssemblyF
2ecb0 6f 6c 64 65 72 73 45 78 22 20 3a 0d 0a 20 20 20  oldersEx" :..   
2ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
2ecd0 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31  }\\Microsoft\\{1
2ece0 7d 5c 5c 76 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c  }\\v{2}\\Assembl
2ecf0 79 46 6f 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a  yFoldersEx";....
2ed00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ed10 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
2ed20 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74  (format, GetRoot
2ed30 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c  KeyName(perUser,
2ed40 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20   wow64),..      
2ed50 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2ed60 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
2ed70 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
2ed80 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ormName);..     
2ed90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2eda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2edb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2edc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2edd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ede0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2edf0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2ee00 63 20 62 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65  c bool AddToAsse
2ee10 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
2ee20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2ee30 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2ee40 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2ee50 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
2ee60 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2ee70 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
2ee80 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2ee90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2eea0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2eeb0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2eec0 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
2eed0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2eee0 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
2eef0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2ef00 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2ef10 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2ef20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2ef30 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2ef40 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2ef50 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2ef60 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2ef70 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2ef80 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2ef90 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2efa0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
2efb0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b  AssemblyFoldersK
2efc0 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
2efd0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2efe0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2eff0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2f000 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c  rmName, perUser,
2f010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f020 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20    wow64);....   
2f030 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2f040 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2f050 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
2f060 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
2f070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f080 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2f090 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68  eyName, true, wh
2f0a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2f0b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0d0 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
2f0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f0f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f100 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2f110 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2f120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f130 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2f140 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2f150 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
2f160 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f170 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2f180 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
2f190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f1a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2f1b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2f1c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2f1d0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2f1e0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2f1f0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2f200 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
2f210 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2f230 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
2f240 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2f250 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f260 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f270 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
2f280 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
2f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2f2c0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2f2d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2f0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
2f300 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
2f310 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
2f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f330 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
2f340 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ubKeyName);.... 
2f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f360 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2f370 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2f380 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3a0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2f3b0 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3d0 20 20 20 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c       subKey, nul
2f3e0 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68  l, directory, wh
2f3f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2f400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f410 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2f420 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f430 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2f440 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f450 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2f4a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2f4b0 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
2f4c0 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c  eFromAssemblyFol
2f4d0 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
2f4e0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2f4f0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2f500 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f510 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
2f520 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2f530 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
2f540 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2f550 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
2f560 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2f570 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
2f580 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
2f590 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2f5a0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2f5b0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2f5c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
2f5d0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2f5e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2f5f0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2f600 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2f610 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2f620 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2f630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2f640 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2f650 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2f660 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65  eyName = GetAsse
2f670 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
2f680 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2f690 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
2f6a0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2f6b0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2f6c0 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  me, perUser,..  
2f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f                wo
2f6e0 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
2f6f0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2f700 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
2f710 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2f720 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f740 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2f750 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  me, true, whatIf
2f760 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2f770 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f780 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f790 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2f7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f7c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2f7d0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7f0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2f800 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
2f810 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
2f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f830 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2f840 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
2f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f860 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f880 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f890 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2f8a0 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
2f8b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2f8c0 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
2f8d0 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d  eyName, throwOnM
2f8e0 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20  issing, whatIf, 
2f8f0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2f900 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f910 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2f920 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2f930 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2f940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f980 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2f990 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2f9a0 6c 20 50 72 6f 63 65 73 73 41 73 73 65 6d 62 6c  l ProcessAssembl
2f9b0 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
2f9c0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2f9d0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2f9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2f9f0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
2fa00 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2fa10 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
2fa20 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
2fa30 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
2fa40 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
2fa50 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2fa60 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
2fa70 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
2fa80 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2fa90 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2faa0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2fab0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2fac0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2fad0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2fae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2faf0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2fb00 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2fb10 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2fb20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2fb30 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2fb40 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2fb50 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
2fb60 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
2fb70 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
2fb80 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
2fb90 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
2fba0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2fbb0 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
2fbc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2fbe0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
2fbf0 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63  ramework callbac
2fc00 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
2fc10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2fc20 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2fc30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2fc40 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
2fc50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2fc60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fc70 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46    return RemoveF
2fc80 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  romAssemblyFolde
2fc90 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
2fca0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2fcb0 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
2fcc0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2fcd0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
2fce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fcf0 20 20 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a        LegacyProj
2fd00 65 63 74 4e 61 6d 65 2c 20 70 65 72 55 73 65 72  ectName, perUser
2fd10 2c 20 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20  , wow64, false, 
2fd20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2fd30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fd40 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2fd50 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
2fd60 20 20 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62       AddToAssemb
2fd70 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
2fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd90 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
2fda0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2fdb0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2fdc0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
2fde0 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58  jectName, pair.X
2fdf0 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2fe00 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2fe10 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2fe20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
2fe30 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2fe40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2fe50 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2fe60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2fe70 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
2fe80 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f  veFromAssemblyFo
2fe90 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
2fea0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2feb0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
2fec0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2fed0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2fee0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2fef0 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74           Project
2ff00 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77  Name, perUser, w
2ff10 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  ow64, throwOnMis
2ff20 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 0d 0a 20  sing, whatIf,.. 
2ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff40 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20     verbose, ref 
2ff50 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
2ff60 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ff70 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2ff80 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2ff90 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffd0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2ffe0 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75      #region Visu
2fff0 61 6c 20 53 74 75 64 69 6f 20 48 61 6e 64 6c 69  al Studio Handli
30000 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
30010 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
30020 67 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61  g GetVsRootKeyNa
30030 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
30040 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
30050 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
30060 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
30070 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
30080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
30090 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
300a0 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f  at("{0}\\Microso
300b0 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f  ft\\VisualStudio
300c0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
300d0 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61      GetRootKeyNa
300e0 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
300f0 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  4));..        }.
30100 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
30110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30150 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
30160 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
30170 69 6e 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  ing GetVsKeyName
30180 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  (..            V
30190 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
301a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
301b0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
301c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
301d0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
301e0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
301f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
30200 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
30210 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
30220 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
30230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30240 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
30250 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30260 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
30270 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30280 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d 22     "{0}\\{1}{2}"
30290 2c 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61  , GetVsRootKeyNa
302a0 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
302b0 34 29 2c 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  4), vsVersion,..
302c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302d0 73 75 66 66 69 78 29 3b 0d 0a 20 20 20 20 20 20  suffix);..      
302e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
302f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30330 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
30340 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c    #region Visual
30350 20 53 74 75 64 69 6f 20 44 61 74 61 20 53 6f 75   Studio Data Sou
30360 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  rce Handling..  
30370 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
30380 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44  atic bool AddVsD
30390 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
303a0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
303b0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
303c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
303d0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
303e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
303f0 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
30400 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
30410 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
30420 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
30430 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
30440 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
30450 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
30460 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
30470 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
30480 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
30490 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
304a0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
304b0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
304c0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
304d0 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
304e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
304f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30500 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
30510 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
30520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30530 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
30540 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
30550 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
30560 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
30570 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
30580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30590 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
305a0 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
305b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
305c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
305d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
305e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
305f0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
30600 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
30610 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55  on, suffix, perU
30620 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ser, wow64);....
30630 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
30640 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
30650 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
30660 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
30670 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
30680 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
30690 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
306a0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
306b0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
306c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
306d0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
306e0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
306f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30700 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
30710 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
30720 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
30730 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
30740 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
30750 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
30760 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
30770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30780 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
30790 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
307a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
307b0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
307c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
307d0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
307e0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
307f0 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
30800 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
30810 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
30820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30830 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63   key, "DataSourc
30840 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
30850 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
30870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30880 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
30890 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
308a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
308b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
308c0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
308d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
308e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
308f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
30900 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
30910 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
30920 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20  DataSources",.. 
30930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30940 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
30950 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30960 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30970 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
30980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
30990 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
309a0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
309b0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
309c0 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a  ataSourceKey =..
309d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309e0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
309f0 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
30a00 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d  eSubKey(subKey,.
30a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30a20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
30a30 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
30a40 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
30a50 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
30a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a70 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
30a80 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
30a90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ab0 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61 53         if (dataS
30ac0 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c  ourceKey == null
30ad0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30ae0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b00 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
30b10 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
30b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b40 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
30b50 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
30b60 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79  : {0}\\{1}", key
30b70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b90 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53     package.DataS
30ba0 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  ourceId.ToString
30bb0 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
30bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30be0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
30bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
30c30 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
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 64 61 74 61 53 6f 75 72          dataSour
30c60 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72  ceKey, null, Str
30c70 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
30c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c90 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61           "{0} Da
30ca0 74 61 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72  tabase File", Pr
30cb0 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74  ojectName), what
30cc0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
30cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ce0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
30cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d00 20 20 20 20 20 20 2f 2f 0d 0a 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 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
30d30 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20  value is new as 
30d40 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20  of 1.0.83.0...  
30d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d60 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
30d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d80 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
30d90 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
30da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30db0 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75 72          dataSour
30dc0 63 65 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 50  ceKey, "DefaultP
30dd0 72 6f 76 69 64 65 72 22 2c 0d 0a 20 20 20 20 20  rovider",..     
30de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30df0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
30e00 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
30e10 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
30e20 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
30e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e40 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
30e50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
30e70 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
30e80 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 53 6f  ateSubKey(dataSo
30e90 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20  urceKey,..      
30ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30eb0 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
30ec0 6d 61 74 28 22 53 75 70 70 6f 72 74 69 6e 67 50  mat("SupportingP
30ed0 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d  roviders\\{0}",.
30ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
30f00 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
30f10 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
30f20 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20  dFormat)),..    
30f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f40 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
30f50 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
30f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
30f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30f80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
30f90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
30fa0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
30fb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
30fc0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
30fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
31010 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
31020 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
31030 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  veVsDataSource(.
31040 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
31050 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
31060 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
31070 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
31080 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
31090 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
310a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
310b0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
310c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
310d0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
310e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
310f0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
31100 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
31110 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
31120 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
31130 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
31140 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
31150 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
31160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
31170 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
31180 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
31190 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
311a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
311b0 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e  valid VS version
311c0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
311d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
311e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
311f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31200 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
31210 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
31220 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31230 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
31240 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
31250 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
31260 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
31270 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
31280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31290 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
312a0 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
312b0 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
312c0 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29   perUser, wow64)
312d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
312e0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
312f0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
31300 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
31310 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
31320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
31330 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
31340 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
31350 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
31360 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31370 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
31380 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
31390 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
313a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313b0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
313c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
313d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313e0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
313f0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
31400 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
31410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31420 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
31430 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
31440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
31450 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
31460 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31480 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
31490 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
314a0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
314b0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
314c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314d0 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
314e0 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20  Sources", true, 
314f0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
31500 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31510 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31520 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
31530 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
31540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31550 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
31570 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
31580 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
31590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315a0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
315b0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
315c0 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73  {0}\\DataSources
315d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
315e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315f0 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
31600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31610 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
31620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31630 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
31640 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
31650 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
31660 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
31670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31680 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
31690 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
316a0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
316b0 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
316c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316d0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
316e0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
316f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
31700 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31710 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
31720 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
31730 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
31740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
31790 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
317a0 50 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75  ProcessVsDataSou
317b0 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
317c0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
317d0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
317e0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
317f0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
31800 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
31810 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
31820 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
31830 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
31840 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
31850 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
31860 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
31870 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
31880 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
31890 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
318a0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
318b0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
318c0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
318d0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
318e0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
318f0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
31900 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
31910 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
31920 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
31930 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31940 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
31950 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
31960 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31970 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
31980 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
31990 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
319a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
319b0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
319c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
319d0 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
319e0 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
319f0 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
31a00 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
31a10 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
31a20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
31a30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
31a40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31a50 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
31a60 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62  invalid VS callb
31a70 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
31a80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
31a90 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
31aa0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31ab0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
31ac0 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
31ad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31ae0 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73      return AddVs
31af0 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20  DataSource(..   
31b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b10 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
31b20 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63  ion, suffix, pac
31b30 6b 61 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77  kage, perUser, w
31b40 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
31b50 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
31b60 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
31b70 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
31b80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
31b90 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
31ba0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31bb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
31bc0 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72  RemoveVsDataSour
31bd0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
31be0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
31bf0 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  , vsVersion, suf
31c00 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65  fix, package, pe
31c10 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20  rUser, wow64,.. 
31c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c30 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
31c40 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
31c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
31c60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
31c70 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
31c80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
31c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
31ce0 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
31cf0 6f 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20  o Data Provider 
31d00 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
31d10 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
31d20 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 50   bool AddVsDataP
31d30 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
31d40 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
31d50 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
31d60 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
31d70 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
31d80 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
31d90 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
31da0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
31db0 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
31dc0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
31dd0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
31de0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
31df0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
31e00 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
31e10 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
31e20 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
31e30 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
31e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
31e50 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
31e60 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
31e70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31e80 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
31e90 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
31ea0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
31ec0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
31ed0 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
31ee0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31ef0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
31f00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31f10 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
31f20 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
31f30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31f40 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
31f50 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
31f60 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
31f70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31f80 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
31f90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31fa0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
31fb0 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
31fc0 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
31fd0 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c  suffix, perUser,
31fe0 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
31ff0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
32000 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
32010 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
32020 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
32030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32040 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
32050 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
32060 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
32070 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32090 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
320a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
320b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
320c0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
320d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
320e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
320f0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
32100 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
32110 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
32120 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32130 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
32140 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
32150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32160 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32170 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32180 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32190 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
321a0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
321b0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
321c0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
321d0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
321e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
321f0 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73  , "DataProviders
32200 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
32210 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
32220 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32240 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
32250 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
32260 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 65 72 72 6f 72 20 3d 20 53         error = S
32290 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322b0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
322c0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
322d0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
322e0 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20  taProviders",.. 
322f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32300 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
32310 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32320 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32330 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
32340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32360 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
32370 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
32380 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d  ataProviderKey =
32390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
323a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
323b0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
323c0 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
323d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
323e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
323f0 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
32400 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
32410 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
32420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32430 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
32440 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
32450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32470 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
32480 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d  ataProviderKey =
32490 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
324a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
324c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324d0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
324e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
324f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32500 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
32510 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
32520 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
32530 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ", key,..       
32540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32550 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
32560 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
32570 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
32580 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mat));....      
32590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
325b0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
325c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
325d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
325e0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
325f0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
32600 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
32610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32620 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
32630 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69   null, Descripti
32640 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  on, whatIf,..   
32650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32660 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
32670 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
326a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
326b0 45 3a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73  E: This value is
326c0 20 6e 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38   new as of 1.0.8
326d0 33 2e 30 2e 20 20 48 6f 77 65 76 65 72 2c 0d 0a  3.0.  However,..
326e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
32700 20 69 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20   it should only 
32710 62 65 20 73 65 74 20 69 66 20 74 68 65 20 70 61  be set if the pa
32720 63 6b 61 67 65 20 61 73 73 65 6d 62 6c 79 0d 0a  ckage assembly..
32730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32740 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
32750 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 61 73 73   and all the ass
32760 65 6d 62 6c 69 65 73 20 69 74 20 72 65 66 65 72  emblies it refer
32770 73 20 74 6f 20 61 72 65 20 62 65 69 6e 67 0d 0a  s to are being..
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32790 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
327a0 20 70 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65   placed into the
327b0 20 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79   global assembly
327c0 20 63 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20   cache...       
327d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327e0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
327f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
32800 28 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41  (package.GlobalA
32810 73 73 65 6d 62 6c 79 43 61 63 68 65 29 0d 0a 20  ssemblyCache).. 
32820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32830 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32850 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
32860 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
32870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32890 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
328a0 20 22 41 73 73 65 6d 62 6c 79 22 2c 0d 0a 20 20   "Assembly",..  
328b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
328d0 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61  ckage.AssemblyNa
328e0 6d 65 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a  me.ToString(),..
328f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32910 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
32920 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
32930 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32950 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
32960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32970 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
32980 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61  s value is new a
32990 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a  s of 1.0.83.0...
329a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
329c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329d0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
329e0 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
329f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a00 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
32a10 6f 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73 6f  oviderKey, "Asso
32a20 63 69 61 74 65 64 53 6f 75 72 63 65 22 2c 0d 0a  ciatedSource",..
32a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a40 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
32a50 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64  age.DataSourceId
32a60 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
32a70 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
32a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a90 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
32aa0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
32ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ac0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
32ad0 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
32ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32af0 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
32b00 64 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61  derKey, "Invaria
32b10 6e 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61  ntName", Invaria
32b20 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ntName,..       
32b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b40 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
32b50 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
32b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b70 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
32b80 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
32b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ba0 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
32bb0 69 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f  iderKey, "Techno
32bc0 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20  logy",..        
32bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32be0 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e      package.AdoN
32bf0 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54  etTechnologyId.T
32c00 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
32c10 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
32c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c30 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
32c40 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
32c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
32c60 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
32c70 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
32c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c90 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
32ca0 72 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22  rKey, "CodeBase"
32cb0 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74  , fileName, what
32cc0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
32cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ce0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
32cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d00 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
32d10 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
32d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d30 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
32d40 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61  ProviderKey, "Fa
32d50 63 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a  ctoryService",..
32d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d70 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
32d80 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f  age.ServiceId.To
32d90 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
32da0 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
32db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32dc0 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
32dd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
32df0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
32e00 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
32e10 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
32e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e30 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
32e40 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43  edObjects\\DataC
32e50 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72  onnectionUIContr
32e60 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ol",..          
32e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e80 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
32e90 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
32ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
32eb0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
32ec0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
32ed0 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
32ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ef0 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
32f00 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
32f10 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72  ConnectionProper
32f20 74 69 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ties",..        
32f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f40 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
32f50 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
32f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f70 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
32f80 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
32f90 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
32fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fb0 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
32fc0 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
32fd0 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70  taConnectionSupp
32fe0 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ort", whatIf,.. 
32ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33000 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
33010 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
33020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33030 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
33040 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
33050 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
33060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33070 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
33080 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
33090 61 4f 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c  aObjectSupport",
330a0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
330b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330c0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
330d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
330e0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
330f0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
33100 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
33110 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
33120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33130 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
33140 62 6a 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77  bjects\\DataView
33150 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66  Support", whatIf
33160 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
33180 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
33190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
331a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
331b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
331c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
331d0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
331e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
331f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
33240 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
33250 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
33260 65 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28  eVsDataProvider(
33270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
33280 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
33290 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
332a0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
332b0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
332c0 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
332d0 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
332e0 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
332f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
33300 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
33310 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
33320 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
33330 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
33340 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
33350 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
33360 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
33370 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
33380 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
33390 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
333a0 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
333b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
333c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
333d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
333e0 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
333f0 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
33400 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
33410 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
33420 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
33430 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
33440 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
33450 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
33460 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
33470 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
33480 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
33490 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
334a0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
334b0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
334c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
334d0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
334e0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
334f0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
33500 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33510 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
33520 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
33530 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
33540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33550 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
33560 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
33570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33580 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
33590 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
335a0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335c0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
335d0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
335e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
335f0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
33600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
33610 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33620 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
33630 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
33640 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
33650 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
33660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33670 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74         key, "Dat
33680 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75  aProviders", tru
33690 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
336a0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
336b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
336c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
336d0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
336e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
336f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33710 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
33720 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
33730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33740 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
33750 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
33760 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76  y: {0}\\DataProv
33770 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20  iders",..       
33780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33790 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
337a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
337c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
337d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
337e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337f0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
33800 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65  .DeleteSubKeyTre
33810 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
33820 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
33830 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61  ey, package.Data
33840 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72  ProviderId.ToStr
33850 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
33860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33870 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
33880 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
33890 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
338a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
338b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
338c0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
338d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
338e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
338f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33920 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
33930 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
33940 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73  c bool ProcessVs
33950 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20  DataProvider(.. 
33960 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
33970 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
33980 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
33990 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
339a0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
339b0 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
339c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
339d0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
339e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
339f0 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
33a00 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
33a10 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
33a20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
33a30 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
33a40 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
33a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
33a60 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
33a70 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
33a80 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
33a90 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
33aa0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
33ab0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
33ac0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
33ad0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
33ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
33af0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
33b00 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
33b10 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
33b20 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
33b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
33b40 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
33b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
33b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b70 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
33b80 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74   VS callback dat
33b90 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
33ba0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
33bb0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
33bc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
33bd0 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
33be0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
33bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
33c00 75 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f  urn AddVsDataPro
33c10 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
33c20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
33c30 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
33c40 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
33c50 20 70 61 69 72 2e 58 2c 20 70 65 72 55 73 65 72   pair.X, perUser
33c60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33c70 20 20 20 20 20 20 20 77 6f 77 36 34 2c 20 77 68         wow64, wh
33c80 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
33c90 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
33ca0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
33cb0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
33cc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33cd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
33ce0 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50  rn RemoveVsDataP
33cf0 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
33d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
33d10 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
33d20 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67  , suffix, packag
33d30 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  e, perUser, wow6
33d40 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
33d50 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
33d60 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
33d70 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
33d80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
33d90 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
33da0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
33db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33df0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
33e00 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20   #region Visual 
33e10 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48  Studio Package H
33e20 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
33e30 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
33e40 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56  void InitializeV
33e50 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
33e60 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
33e70 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
33e80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
33e90 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62  ool globalAssemb
33ea0 6c 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20 20  lyCache,..      
33eb0 20 20 20 20 20 20 72 65 66 20 50 61 63 6b 61 67        ref Packag
33ec0 65 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  e package..     
33ed0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
33ee0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33ef0 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
33f00 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
33f10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33f20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20        package = 
33f30 6e 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a  new Package();..
33f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33f50 20 20 70 61 63 6b 61 67 65 2e 41 73 73 65 6d 62    package.Assemb
33f60 6c 79 4e 61 6d 65 20 3d 20 61 73 73 65 6d 62 6c  lyName = assembl
33f70 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
33f80 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
33f90 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
33fa0 63 68 65 20 3d 20 67 6c 6f 62 61 6c 41 73 73 65  che = globalAsse
33fb0 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 0d 0a 20 20  mblyCache;....  
33fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
33fd0 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68  ckage.AdoNetTech
33fe0 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20 47  nologyId = new G
33ff0 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
34000 20 20 20 20 20 20 20 20 20 20 22 37 37 41 42 39            "77AB9
34010 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39 31  A9D-78B9-4BA7-91
34020 41 43 2d 38 37 33 46 35 33 33 38 46 31 44 32 22  AC-873F5338F1D2"
34030 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34040 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61        package.Pa
34050 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47 75  ckageId = new Gu
34060 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
34070 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43           "DCBE6C
34080 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38  8D-0E57-4099-A18
34090 33 2d 39 38 46 46 37 34 43 36 34 44 39 43 22 29  3-98FF74C64D9C")
340a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
340b0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72       package.Ser
340c0 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69  viceId = new Gui
340d0 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
340e0 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38          "DCBE6C8
340f0 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33  D-0E57-4099-A183
34100 2d 39 38 46 46 37 34 43 36 34 44 39 44 22 29 3b  -98FF74C64D9D");
34110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34120 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
34130 53 6f 75 72 63 65 49 64 20 3d 20 6e 65 77 20 47  SourceId = new G
34140 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
34150 20 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41            "0EBAA
34160 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44  B6E-CA80-4B4A-8D
34170 44 46 2d 43 42 45 36 42 46 30 35 38 43 37 31 22  DF-CBE6BF058C71"
34180 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34190 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
341a0 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 6e  taProviderId = n
341b0 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20  ew Guid(..      
341c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30                "0
341d0 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34  EBAAB6E-CA80-4B4
341e0 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38  A-8DDF-CBE6BF058
341f0 43 37 30 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  C70");..        
34200 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
34210 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
34220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34260 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
34270 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
34280 6f 6c 20 41 64 64 56 73 50 61 63 6b 61 67 65 28  ol AddVsPackage(
34290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
342a0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
342b0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
342c0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
342d0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
342e0 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
342f0 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
34300 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
34310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
34320 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
34330 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
34340 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
34350 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
34360 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
34370 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
34380 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
34390 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
343a0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
343b0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
343c0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
343d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
343e0 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
343f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
34400 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34410 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
34420 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
34430 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34440 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
34460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
34470 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
34480 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
34490 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
344a0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
344b0 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
344c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
344d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
344e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
344f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
34500 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
34510 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
34520 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
34530 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b  perUser, wow64);
34540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34550 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
34560 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
34570 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
34580 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
34590 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
345a0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
345b0 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
345c0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
345d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
345e0 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
345f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
34600 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34620 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
34630 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
34640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34650 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
34660 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
34670 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
34680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34690 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
346a0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
346b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
346c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
346d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
346e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
346f0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
34700 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
34710 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
34720 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
34730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34740 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61       key, "Packa
34750 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ges", true, what
34760 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
34770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
34780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34790 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
347a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
347b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
347c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
347d0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
347e0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
347f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
34810 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
34820 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
34830 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20  \Packages",..   
34840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34850 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
34860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34870 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34880 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
34890 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
348a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
348b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
348c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
348d0 20 4e 4f 54 45 3a 20 2a 57 41 52 4e 49 4e 47 2a   NOTE: *WARNING*
348e0 20 43 68 61 6e 67 69 6e 67 20 61 6e 79 20 6f 66   Changing any of
348f0 20 74 68 65 73 65 20 76 61 6c 75 65 73 20 77 69   these values wi
34900 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20 20 20 20 20  ll likely..     
34910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
34920 2f 20 20 20 20 20 20 20 72 65 71 75 69 72 65 20  /       require 
34930 61 20 6e 65 77 20 22 70 61 63 6b 61 67 65 20 6c  a new "package l
34940 6f 61 64 20 6b 65 79 22 20 28 50 4c 4b 29 20 74  oad key" (PLK) t
34950 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  o be..          
34960 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
34970 20 20 20 67 65 6e 65 72 61 74 65 64 20 69 6e 20     generated in 
34980 6f 72 64 65 72 20 74 6f 20 70 72 6f 70 65 72 6c  order to properl
34990 79 20 73 75 70 70 6f 72 74 20 6c 6f 61 64 69 6e  y support loadin
349a0 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  g the..         
349b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
349c0 20 20 20 20 70 61 63 6b 61 67 65 20 69 6e 74 6f      package into
349d0 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32   Visual Studio 2
349e0 30 30 38 20 61 6e 64 20 65 61 72 6c 69 65 72 20  008 and earlier 
349f0 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20  without..       
34a00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
34a10 20 20 20 20 20 20 74 68 65 20 6d 61 74 63 68 69        the matchi
34a20 6e 67 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  ng Visual Studio
34a30 20 53 44 4b 20 62 65 69 6e 67 20 69 6e 73 74 61   SDK being insta
34a40 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  lled...         
34a50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
34a60 20 20 20 20 50 6c 65 61 73 65 20 72 65 66 65 72      Please refer
34a70 20 74 6f 20 74 68 65 20 22 53 51 4c 69 74 65 2e   to the "SQLite.
34a80 44 65 73 69 67 6e 65 72 5c 70 6c 6b 2e 74 78 74  Designer\plk.txt
34a90 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  " file..        
34aa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
34ab0 20 20 20 20 20 66 6f 72 20 74 68 65 20 65 78 69       for the exi
34ac0 73 74 69 6e 67 20 6f 66 66 69 63 69 61 6c 20 76  sting official v
34ad0 61 6c 75 65 73 20 61 6e 64 20 75 70 64 61 74 65  alues and update
34ae0 20 74 68 65 6d 20 69 66 0d 0a 20 20 20 20 20 20   them if..      
34af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
34b00 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79         necessary
34b10 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 6e 65 77  .  Also, the new
34b20 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70 61 63  ly generated pac
34b30 6b 61 67 65 20 6c 6f 61 64 0d 0a 20 20 20 20 20  kage load..     
34b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
34b50 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74 73 65  /       key itse
34b60 6c 66 2c 20 77 68 69 63 68 20 69 73 20 61 20 31  lf, which is a 1
34b70 32 38 20 63 68 61 72 61 63 74 65 72 20 61 6c 70  28 character alp
34b80 68 61 6e 75 6d 65 72 69 63 0d 0a 20 20 20 20 20  hanumeric..     
34b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
34ba0 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20  /       string, 
34bb0 6d 75 73 74 20 62 65 20 70 6c 61 63 65 64 20 69  must be placed i
34bc0 6e 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 73  n the resource s
34bd0 74 72 69 6e 67 20 6e 61 6d 65 64 0d 0a 20 20 20  tring named..   
34be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34bf0 20 2f 2f 20 20 20 20 20 20 20 22 34 30 30 22 20   //       "400" 
34c00 69 6e 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44  in the "SQLite.D
34c10 65 73 69 67 6e 65 72 5c 56 53 50 61 63 6b 61 67  esigner\VSPackag
34c20 65 2e 72 65 73 78 22 20 66 69 6c 65 0d 0a 20 20  e.resx" file..  
34c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c40 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74    //       and t
34c50 68 65 6e 20 74 68 65 20 64 65 73 69 67 6e 65 72  hen the designer
34c60 20 61 73 73 65 6d 62 6c 79 20 69 74 73 65 6c 66   assembly itself
34c70 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20   must be..      
34c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
34c90 20 20 20 20 20 20 20 72 65 63 6f 6d 70 69 6c 65         recompile
34ca0 64 2e 20 20 41 73 20 6f 66 20 74 68 69 73 20 77  d.  As of this w
34cb0 72 69 74 69 6e 67 20 28 69 6e 20 46 65 62 72 75  riting (in Febru
34cc0 61 72 79 20 32 30 31 32 29 2c 0d 0a 20 20 20 20  ary 2012),..    
34cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ce0 2f 2f 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c  //       the fol
34cf0 6c 6f 77 69 6e 67 20 55 52 4c 20 69 73 20 74 68  lowing URL is th
34d00 65 20 70 72 6f 70 65 72 20 70 6c 61 63 65 20 74  e proper place t
34d10 6f 20 67 65 6e 65 72 61 74 65 0d 0a 20 20 20 20  o generate..    
34d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d30 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65  //       package
34d40 20 6c 6f 61 64 20 6b 65 79 73 3a 0d 0a 20 20 20   load keys:..   
34d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d60 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
34d70 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
34d80 20 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69    http://msdn.mi
34d90 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75  crosoft.com/en-u
34da0 73 2f 76 73 74 75 64 69 6f 2f 63 63 36 35 35 37  s/vstudio/cc6557
34db0 39 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  95..            
34dc0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
34dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34de0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
34df0 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b 65  tryKey packageKe
34e00 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
34e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
34e30 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
34e40 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e60 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67    package.Packag
34e70 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
34e80 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
34e90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
34eb0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
34ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
34ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34ee0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
34ef0 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  kageKey == null)
34f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34f10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f30 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
34f40 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
34f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f70 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
34f80 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
34f90 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
34fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
34fc0 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67  , package.Packag
34fd0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
34fe0 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
34ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35000 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35010 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
35020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35030 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
35040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
35050 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
35060 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
35070 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
35080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35090 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
350a0 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72  at("{0} Designer
350b0 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65   Package", Proje
350c0 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  ctName),..      
350d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350e0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
350f0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
35100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35110 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
35120 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
35130 67 65 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d  geKey, "Class",.
35140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35150 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
35160 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 53 51  Lite.Designer.SQ
35170 4c 69 74 65 50 61 63 6b 61 67 65 22 2c 20 77 68  LitePackage", wh
35180 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
35190 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
351a0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
351b0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
351c0 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
351d0 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20 20 20  CodeBase",..    
351e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351f0 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
35200 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
35210 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
35220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
35230 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
35240 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
35250 79 2c 20 22 49 44 22 2c 20 34 30 30 2c 20 77 68  y, "ID", 400, wh
35260 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
35270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35280 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
35290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
352b0 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 53 79  irectory = GetSy
352c0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 77 6f  stemDirectory(wo
352d0 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
352e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352f0 20 69 66 20 28 64 69 72 65 63 74 6f 72 79 20 3d   if (directory =
35300 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
35310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35320 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d       directory =
35330 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
35340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35350 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
35360 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
35370 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49  e(packageKey, "I
35380 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c 0d  nprocServer32",.
35390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
353a0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61 74               Pat
353b0 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
353c0 6f 72 79 2c 20 22 6d 73 63 6f 72 65 65 2e 64 6c  ory, "mscoree.dl
353d0 6c 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  l"),..          
353e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353f0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
35400 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
35410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
35420 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
35430 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
35440 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22  y, "CompanyName"
35450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
35470 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61  http://system.da
35480 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c  ta.sqlite.org/",
35490 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
354a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
354b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
354c0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
354d0 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
354e0 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d  , "MinEdition",.
354f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35500 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 74               "st
35510 61 6e 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c  andard", whatIf,
35520 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
35530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35540 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
35550 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
35560 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75  ckageKey, "Produ
35570 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20  ctName",..      
35580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35590 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
355a0 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65  mat("{0} Designe
355b0 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a  r Package", Proj
355c0 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  ectName),..     
355d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355e0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
355f0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
35600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35610 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
35620 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
35630 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74  ageKey, "Product
35640 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20  Version",..     
35650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35660 20 20 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68         "1.0", wh
35670 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
35680 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35690 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
356a0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
356b0 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a  y toolboxKey =..
356c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356e0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
356f0 72 65 61 74 65 53 75 62 4b 65 79 28 70 61 63 6b  reateSubKey(pack
35700 61 67 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ageKey,..       
35710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35720 20 20 20 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f           "Toolbo
35730 78 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  x", whatIf, verb
35740 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
35750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
35760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
35780 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20   (toolboxKey == 
35790 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
357a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
357c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
357e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
357f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35810 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
35820 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
35830 3a 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  : " +..         
35840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35850 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
35860 5c 54 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61  \Toolbox", packa
35870 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  geKey);....     
35880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35890 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
358a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
358b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
358d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358e0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
358f0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
35900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35920 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65   toolboxKey, "De
35930 66 61 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c  fault Items", 3,
35940 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
35950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35960 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
35970 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
35980 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
35990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
359b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
359c0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
359d0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
359e0 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
359f0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
35a00 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
35a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a20 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72  key, "Menus", tr
35a30 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
35a40 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
35a50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
35a70 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
35a80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
35a90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ab0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
35ac0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
35ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ae0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
35af0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
35b00 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c  ey: {0}\\Menus",
35b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
35b30 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
35b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35b50 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
35b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
35b80 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
35b90 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
35ba0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
35bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
35bc0 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  Key, package.Pac
35bd0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
35be0 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
35bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c00 20 20 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33        ", 1000, 3
35c10 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
35c20 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
35c30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35c40 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
35c50 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
35c60 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
35c70 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
35c80 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
35c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
35ca0 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20  ey, "Services", 
35cb0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
35cc0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
35cd0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cf0 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
35d00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
35d10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d30 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
35d40 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
35d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d60 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
35d70 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
35d80 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69   key: {0}\\Servi
35d90 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
35da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35db0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
35dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35dd0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
35de0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
35df0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
35e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e10 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
35e20 74 72 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65  tryKey serviceKe
35e30 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
35e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e50 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
35e60 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
35e70 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
35e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e90 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63    package.Servic
35ea0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
35eb0 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
35ec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
35ee0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
35ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
35f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35f10 20 20 20 20 20 20 20 20 20 69 66 20 28 73 65 72           if (ser
35f20 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  viceKey == null)
35f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35f40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f60 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
35f70 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
35f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fa0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
35fb0 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
35fc0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
35ff0 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63  , package.Servic
36000 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
36010 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
36020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36030 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
36040 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
36050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36060 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
36080 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
36090 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79  Value(serviceKey
360a0 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
360b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360c0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63       package.Pac
360d0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
360e0 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
360f0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
36100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36110 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
36120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36130 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
36140 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73  elper.SetValue(s
36150 65 72 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65  erviceKey, "Name
36160 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
36170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36180 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
36190 30 7d 20 44 65 73 69 67 6e 65 72 20 53 65 72 76  0} Designer Serv
361a0 69 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d  ice", ProjectNam
361b0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
361c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
361e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
361f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
36200 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
36210 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
36220 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
36230 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
36240 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
36250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36290 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
362a0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
362b0 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61 63  bool RemoveVsPac
362c0 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
362d0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
362e0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
362f0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
36300 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
36310 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
36320 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
36330 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
36340 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
36350 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
36360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
36370 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
36380 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
36390 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
363a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
363b0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
363c0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
363d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
363e0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
363f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
36400 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36410 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
36420 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
36430 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
36440 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
36450 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
36460 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
36470 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
36480 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
36490 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
364a0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
364b0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
364c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
364d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
364e0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
364f0 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
36500 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
36510 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
36520 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
36530 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
36540 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
36550 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
36560 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72   suffix, perUser
36570 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
36580 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
36590 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
365a0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
365b0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
365c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
365d0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
365e0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
365f0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
36600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
36610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36620 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
36630 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
36640 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36650 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
36660 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
36670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36680 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
36690 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
366a0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
366b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
366c0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
366d0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
366e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
366f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
36700 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
36710 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
36720 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
36730 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
36740 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
36750 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
36760 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
36770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
36780 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74  y, "Packages", t
36790 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
367a0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
367b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
367c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
367d0 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
367e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
367f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36810 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
36820 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
36830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36840 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
36850 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
36860 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67  key: {0}\\Packag
36870 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
36880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36890 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
368a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
368c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
368d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
368e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
368f0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
36900 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
36910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36920 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
36930 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
36940 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
36950 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
36960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36970 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
36980 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
36990 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
369a0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
369b0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
369c0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
369d0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
369e0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
369f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
36a00 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65  y, "Menus", true
36a10 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
36a20 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
36a30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36a40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
36a50 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
36a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36a70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a90 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
36aa0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
36ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ac0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
36ad0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
36ae0 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a  : {0}\\Menus",..
36af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b00 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
36b10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36b20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
36b30 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
36b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
36b60 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
36b70 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61  yHelper.DeleteVa
36b80 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
36b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
36ba0 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61  bKey, package.Pa
36bb0 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
36bc0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
36bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36be0 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69         throwOnMi
36bf0 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76  ssing, whatIf, v
36c00 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
36c10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
36c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
36c30 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
36c40 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
36c50 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
36c60 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
36c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c80 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65     key, "Service
36c90 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
36ca0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
36cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
36cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cd0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
36ce0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
36cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
36d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d10 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
36d20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d40 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
36d50 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
36d60 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53  stry key: {0}\\S
36d70 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20  ervices",..     
36d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d90 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
36da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36db0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
36dc0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
36dd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
36de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36df0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
36e00 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  er.DeleteSubKeyT
36e10 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
36e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
36e30 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65  bKey, package.Se
36e40 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  rviceId.ToString
36e50 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
36e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e70 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
36e80 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
36e90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
36ea0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
36eb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
36ec0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
36ed0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
36ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
36f30 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
36f40 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63  ool ProcessVsPac
36f50 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
36f60 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
36f70 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
36f80 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
36f90 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
36fa0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
36fb0 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
36fc0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
36fd0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
36fe0 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
36ff0 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
37000 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
37010 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
37020 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
37030 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
37040 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
37050 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
37060 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
37070 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
37080 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
37090 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
370a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
370b0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
370c0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
370d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
370e0 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
370f0 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
37100 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
37110 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
37120 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
37130 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
37140 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
37150 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37160 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
37170 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
37180 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
37190 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
371a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
371b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
371c0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
371d0 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
371e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
371f0 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
37200 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
37210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
37220 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
37230 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
37240 67 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55  ge, pair.X, perU
37250 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
37260 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c            wow64,
37270 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
37280 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
37290 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
372a0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
372b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
372c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
372d0 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 61  eturn RemoveVsPa
372e0 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
372f0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
37300 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
37310 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
37320 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
37330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37340 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73        throwOnMis
37350 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
37360 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
37370 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
37380 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
37390 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
373a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
373b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
37400 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
37410 75 64 69 6f 20 53 65 74 75 70 20 48 61 6e 64 6c  udio Setup Handl
37420 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
37430 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
37440 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 4f 75   VsDevEnvSetupOu
37450 74 70 75 74 44 61 74 61 52 65 63 65 69 76 65 64  tputDataReceived
37460 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  (..            o
37470 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 0d 0a 20  bject sender,.. 
37480 20 20 20 20 20 20 20 20 20 20 20 44 61 74 61 52             DataR
37490 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67 73  eceivedEventArgs
374a0 20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   e..            
374b0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
374c0 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65 73            Proces
374d0 73 20 70 72 6f 63 65 73 73 20 3d 20 73 65 6e 64  s process = send
374e0 65 72 20 61 73 20 50 72 6f 63 65 73 73 3b 0d 0a  er as Process;..
374f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
37500 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
37510 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
37520 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20  ty.Medium,..    
37530 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
37540 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
37550 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
37560 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
37570 20 20 20 20 20 20 20 20 20 20 56 73 44 65 76 45            VsDevE
37580 6e 76 53 65 74 75 70 46 6f 72 6d 61 74 2c 20 46  nvSetupFormat, F
37590 6f 72 44 69 73 70 6c 61 79 28 70 72 6f 63 65 73  orDisplay(proces
375a0 73 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s),..           
375b0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
375c0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
375d0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
375e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
375f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37630 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
37640 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
37650 64 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 45  d VsDevEnvSetupE
37660 72 72 6f 72 44 61 74 61 52 65 63 65 69 76 65 64  rrorDataReceived
37670 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  (..            o
37680 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 0d 0a 20  bject sender,.. 
37690 20 20 20 20 20 20 20 20 20 20 20 44 61 74 61 52             DataR
376a0 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67 73  eceivedEventArgs
376b0 20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   e..            
376c0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
376d0 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65 73            Proces
376e0 73 20 70 72 6f 63 65 73 73 20 3d 20 73 65 6e 64  s process = send
376f0 65 72 20 61 73 20 50 72 6f 63 65 73 73 3b 0d 0a  er as Process;..
37700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
37710 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
37720 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
37730 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20  ty.Medium,..    
37740 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
37750 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
37760 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
37770 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
37780 20 20 20 20 20 20 20 20 20 20 56 73 44 65 76 45            VsDevE
37790 6e 76 53 65 74 75 70 46 6f 72 6d 61 74 2c 20 46  nvSetupFormat, F
377a0 6f 72 44 69 73 70 6c 61 79 28 70 72 6f 63 65 73  orDisplay(proces
377b0 73 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s),..           
377c0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
377d0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
377e0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
377f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
37800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37840 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
37850 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
37860 6c 20 41 64 64 56 73 44 65 76 45 6e 76 53 65 74  l AddVsDevEnvSet
37870 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  up(..           
37880 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
37890 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
378a0 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
378b0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
378c0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
378d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
378e0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
378f0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
37900 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
37910 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
37920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
37930 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
37940 20 20 20 20 20 20 20 20 69 66 20 28 70 65 72 55          if (perU
37950 73 65 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ser)..          
37960 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37970 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
37980 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
37990 3a 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  : Visual Studio 
379a0 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
379b0 20 72 75 6e 6e 69 6e 67 20 69 6e 20 27 73 65 74   running in 'set
379c0 75 70 27 0d 0a 20 20 20 20 20 20 20 20 20 20 20  up'..           
379d0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f       //       mo
379e0 64 65 20 6f 6e 20 61 20 70 65 72 2d 75 73 65 72  de on a per-user
379f0 20 62 61 73 69 73 3b 20 74 68 65 72 65 66 6f 72   basis; therefor
37a00 65 2c 20 73 6b 69 70 20 72 75 6e 6e 69 6e 67 0d  e, skip running.
37a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37a20 20 2f 2f 20 20 20 20 20 20 20 69 74 20 69 6e 20   //       it in 
37a30 74 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 20 20  that case...    
37a40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
37a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
37a70 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
37a80 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
37a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37aa0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
37ab0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
37ac0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
37ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ae0 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 75 64      "Visual Stud
37af0 69 6f 20 7b 30 7d 20 27 73 65 74 75 70 27 20 6d  io {0} 'setup' m
37b00 6f 64 65 20 69 73 20 70 65 72 2d 6d 61 63 68 69  ode is per-machi
37b10 6e 65 20 6f 6e 6c 79 2c 20 22 20 2b 0d 0a 20 20  ne only, " +..  
37b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b30 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
37b40 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
37b50 72 73 69 6f 6e 29 29 2c 20 74 72 61 63 65 43 61  rsion)), traceCa
37b60 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
37b70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
37b80 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
37b90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
37ba0 20 20 20 20 20 20 20 50 72 6f 63 65 73 73 53 74         ProcessSt
37bb0 61 72 74 49 6e 66 6f 20 73 74 61 72 74 49 6e 66  artInfo startInf
37bc0 6f 20 3d 20 6e 65 77 20 50 72 6f 63 65 73 73 53  o = new ProcessS
37bd0 74 61 72 74 49 6e 66 6f 28 29 3b 0d 0a 0d 0a 20  tartInfo();.... 
37be0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
37bf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
37c00 54 45 3a 20 53 65 74 20 74 68 65 20 63 6f 72 65  TE: Set the core
37c10 20 70 72 6f 70 65 72 74 69 65 73 20 66 6f 72 20   properties for 
37c20 74 68 65 20 70 72 6f 63 65 73 73 20 74 6f 20 73  the process to s
37c30 74 61 72 74 2e 20 20 49 6e 20 74 68 69 73 0d 0a  tart.  In this..
37c40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
37c50 20 20 20 20 20 63 61 73 65 2c 20 77 65 20 61 72       case, we ar
37c60 65 20 73 74 61 72 74 69 6e 67 20 74 68 65 20 70  e starting the p
37c70 72 69 6d 61 72 79 20 56 69 73 75 61 6c 20 53 74  rimary Visual St
37c80 75 64 69 6f 20 65 78 65 63 75 74 61 62 6c 65 0d  udio executable.
37c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
37ca0 20 20 20 20 20 20 28 64 65 76 65 6e 76 2e 65 78        (devenv.ex
37cb0 65 29 20 69 6e 20 22 73 65 74 75 70 22 20 6d 6f  e) in "setup" mo
37cc0 64 65 2c 20 73 6f 20 74 68 61 74 20 69 74 20 63  de, so that it c
37cd0 61 6e 20 72 65 66 72 65 73 68 20 69 74 73 0d 0a  an refresh its..
37ce0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
37cf0 20 20 20 20 20 6c 69 73 74 20 6f 66 20 69 6e 73       list of ins
37d00 74 61 6c 6c 65 64 20 70 61 63 6b 61 67 65 73 20  talled packages 
37d10 61 6e 64 20 74 68 65 69 72 20 61 73 73 6f 63 69  and their associ
37d20 61 74 65 64 20 72 65 73 6f 75 72 63 65 73 2e 0d  ated resources..
37d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
37d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61  .            sta
37d50 72 74 49 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65 20  rtInfo.FileName 
37d60 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
37d70 69 72 65 63 74 6f 72 79 2c 20 22 64 65 76 65 6e  irectory, "deven
37d80 76 2e 65 78 65 22 29 3b 0d 0a 20 20 20 20 20 20  v.exe");..      
37d90 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e        startInfo.
37da0 41 72 67 75 6d 65 6e 74 73 20 3d 20 22 2f 73 65  Arguments = "/se
37db0 74 75 70 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  tup";..         
37dc0 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 57 6f 72     startInfo.Wor
37dd0 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 20 3d 20  kingDirectory = 
37de0 64 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20  directory;....  
37df0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
37e00 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
37e10 45 3a 20 53 65 74 20 74 68 65 20 62 6f 6f 6c 65  E: Set the boole
37e20 61 6e 20 66 6c 61 67 20 70 72 6f 70 65 72 74 69  an flag properti
37e30 65 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20  es that require 
37e40 6e 6f 6e 2d 64 65 66 61 75 6c 74 0d 0a 20 20 20  non-default..   
37e50 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
37e60 20 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65    values for the
37e70 20 70 72 6f 63 65 73 73 20 74 6f 20 73 74 61 72   process to star
37e80 74 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  t.  In this case
37e90 2c 20 77 65 20 64 6f 20 6e 6f 74 0d 0a 20 20 20  , we do not..   
37ea0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
37eb0 20 20 77 61 6e 74 20 74 68 65 20 73 68 65 6c 6c    want the shell
37ec0 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
37ed0 73 74 61 72 74 69 6e 67 20 74 68 65 20 70 72 6f  starting the pro
37ee0 63 65 73 73 2e 20 20 49 6e 0d 0a 20 20 20 20 20  cess.  In..     
37ef0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
37f00 61 64 64 69 74 69 6f 6e 2c 20 62 6f 74 68 20 73  addition, both s
37f10 74 61 6e 64 61 72 64 20 6f 75 74 70 75 74 20 61  tandard output a
37f20 6e 64 20 65 72 72 6f 72 20 64 61 74 61 20 73 68  nd error data sh
37f30 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 20  ould be..       
37f40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
37f50 64 69 72 65 63 74 65 64 2c 20 73 6f 20 69 74 20  directed, so it 
37f60 63 61 6e 20 62 65 20 6c 6f 67 67 65 64 20 70 72  can be logged pr
37f70 6f 70 65 72 6c 79 2e 0d 0a 20 20 20 20 20 20 20  operly...       
37f80 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
37f90 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 55       startInfo.U
37fa0 73 65 53 68 65 6c 6c 45 78 65 63 75 74 65 20 3d  seShellExecute =
37fb0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
37fc0 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 52       startInfo.R
37fd0 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 4f  edirectStandardO
37fe0 75 74 70 75 74 20 3d 20 74 72 75 65 3b 0d 0a 20  utput = true;.. 
37ff0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
38000 49 6e 66 6f 2e 52 65 64 69 72 65 63 74 53 74 61  Info.RedirectSta
38010 6e 64 61 72 64 45 72 72 6f 72 20 3d 20 74 72 75  ndardError = tru
38020 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
38030 20 20 50 72 6f 63 65 73 73 20 70 72 6f 63 65 73    Process proces
38040 73 20 3d 20 6e 65 77 20 50 72 6f 63 65 73 73 28  s = new Process(
38050 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
38060 20 20 70 72 6f 63 65 73 73 2e 53 74 61 72 74 49    process.StartI
38070 6e 66 6f 20 3d 20 73 74 61 72 74 49 6e 66 6f 3b  nfo = startInfo;
38080 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38090 70 72 6f 63 65 73 73 2e 4f 75 74 70 75 74 44 61  process.OutputDa
380a0 74 61 52 65 63 65 69 76 65 64 20 2b 3d 20 6e 65  taReceived += ne
380b0 77 20 44 61 74 61 52 65 63 65 69 76 65 64 45 76  w DataReceivedEv
380c0 65 6e 74 48 61 6e 64 6c 65 72 28 0d 0a 20 20 20  entHandler(..   
380d0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73 44               VsD
380e0 65 76 45 6e 76 53 65 74 75 70 4f 75 74 70 75 74  evEnvSetupOutput
380f0 44 61 74 61 52 65 63 65 69 76 65 64 29 3b 0d 0a  DataReceived);..
38100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
38110 6f 63 65 73 73 2e 45 72 72 6f 72 44 61 74 61 52  ocess.ErrorDataR
38120 65 63 65 69 76 65 64 20 2b 3d 20 6e 65 77 20 44  eceived += new D
38130 61 74 61 52 65 63 65 69 76 65 64 45 76 65 6e 74  ataReceivedEvent
38140 48 61 6e 64 6c 65 72 28 0d 0a 20 20 20 20 20 20  Handler(..      
38150 20 20 20 20 20 20 20 20 20 20 56 73 44 65 76 45            VsDevE
38160 6e 76 53 65 74 75 70 45 72 72 6f 72 44 61 74 61  nvSetupErrorData
38170 52 65 63 65 69 76 65 64 29 3b 0d 0a 0d 0a 20 20  Received);....  
38180 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
38190 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
381a0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
381b0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
381c0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
381d0 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
381e0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
381f0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
38200 61 6c 6c 62 61 63 6b 2c 20 46 6f 72 44 69 73 70  allback, ForDisp
38210 6c 61 79 28 73 74 61 72 74 49 6e 66 6f 29 2c 0d  lay(startInfo),.
38220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38230 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
38240 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
38250 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
38260 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20      // NOTE: In 
38270 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 2c 20  'what-if' mode, 
38280 64 6f 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  do not actually 
38290 73 74 61 72 74 20 74 68 65 20 70 72 6f 63 65 73  start the proces
382a0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
382b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
382c0 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
382d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
382e0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f               pro
382f0 63 65 73 73 2e 53 74 61 72 74 28 29 3b 0d 0a 0d  cess.Start();...
38300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38310 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
38320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38330 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
38340 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
38350 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
38360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38370 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
38380 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
38390 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
383a0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
383b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383c0 22 70 72 6f 63 65 73 73 20 3d 20 7b 30 7d 22 2c  "process = {0}",
383d0 20 46 6f 72 44 69 73 70 6c 61 79 28 70 72 6f 63   ForDisplay(proc
383e0 65 73 73 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ess)),..        
383f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38400 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
38410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
38420 20 20 20 70 72 6f 63 65 73 73 2e 42 65 67 69 6e     process.Begin
38430 4f 75 74 70 75 74 52 65 61 64 4c 69 6e 65 28 29  OutputReadLine()
38440 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
38450 20 20 20 70 72 6f 63 65 73 73 2e 42 65 67 69 6e     process.Begin
38460 45 72 72 6f 72 52 65 61 64 4c 69 6e 65 28 29 3b  ErrorReadLine();
38470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38480 20 20 70 72 6f 63 65 73 73 2e 57 61 69 74 46 6f    process.WaitFo
38490 72 45 78 69 74 28 29 3b 0d 0a 20 20 20 20 20 20  rExit();..      
384a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
384b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
384c0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
384d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
384e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38520 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
38530 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
38540 20 52 65 6d 6f 76 65 56 73 44 65 76 45 6e 76 53   RemoveVsDevEnvS
38550 65 74 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20  etup(..         
38560 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
38570 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
38580 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
38590 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
385a0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
385b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
385c0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
385d0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
385e0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
385f0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
38600 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
38610 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
38620 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
38630 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
38640 45 3a 20 53 69 6e 63 65 20 56 69 73 75 61 6c 20  E: Since Visual 
38650 53 74 75 64 69 6f 20 64 6f 65 73 20 6e 6f 74 20  Studio does not 
38660 68 61 76 65 20 61 6e 20 27 75 6e 64 6f 27 20 6f  have an 'undo' o
38670 70 65 72 61 74 69 6f 6e 20 66 6f 72 0d 0a 20 20  peration for..  
38680 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
38690 20 20 20 69 74 73 20 27 73 65 74 75 70 27 20 6d     its 'setup' m
386a0 6f 64 65 2c 20 73 69 6d 70 6c 79 20 65 78 65 63  ode, simply exec
386b0 75 74 65 20 74 68 65 20 73 61 6d 65 20 63 6f 6d  ute the same com
386c0 6d 61 6e 64 20 61 67 61 69 6e 2e 0d 0a 20 20 20  mand again...   
386d0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
386e0 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 66 6f    This should fo
386f0 72 63 65 20 69 74 20 74 6f 20 72 65 66 72 65 73  rce it to refres
38700 68 20 69 74 73 20 6c 69 73 74 20 6f 66 20 69 6e  h its list of in
38710 73 74 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20  stalled..       
38720 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 61       //       pa
38730 63 6b 61 67 65 73 20 61 6e 64 20 74 68 65 69 72  ckages and their
38740 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 73 6f   associated reso
38750 75 72 63 65 73 20 28 69 2e 65 2e 20 74 68 69 73  urces (i.e. this
38760 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20   will..         
38770 20 20 20 2f 2f 20 20 20 20 20 20 20 65 66 66 65     //       effe
38780 63 74 69 76 65 6c 79 20 27 72 65 6d 6f 76 65 27  ctively 'remove'
38790 20 74 68 65 20 70 61 63 6b 61 67 65 20 62 65 69   the package bei
387a0 6e 67 20 70 72 6f 63 65 73 73 65 64 20 73 69 6e  ng processed sin
387b0 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
387c0 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20 69 73  //       this is
387d0 20 62 65 69 6e 67 20 64 6f 6e 65 20 61 66 74 65   being done afte
387e0 72 20 61 6c 6c 20 74 68 65 20 6f 74 68 65 72 20  r all the other 
387f0 63 68 61 6e 67 65 73 20 66 6f 72 20 74 68 65 0d  changes for the.
38800 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
38810 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65        package re
38820 6d 6f 76 61 6c 20 68 61 76