System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 56ca10cf43afbb0309beeeaa68c2e435d06a964f:


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 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b  {0} @ {1}: {2}";
2740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2750: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
2760: 6e 67 20 44 65 66 61 75 6c 74 54 72 61 63 65 46  ng DefaultTraceF
2770: 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20 40 20  ormat = "#{0} @ 
2780: 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a 20 20  {1}: {2}";....  
2790: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
27a0: 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49  e const string I
27b0: 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75  so8601DateTimeOu
27c0: 74 70 75 74 46 6f 72 6d 61 74 20 3d 0d 0a 20 20  tputFormat =..  
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 79                "y
27e0: 79 79 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d 6d 3a  yyy.MM.ddTHH:mm:
27f0: 73 73 2e 66 66 66 66 66 66 66 22 3b 0d 0a 20 20  ss.fffffff";..  
2800: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
2810: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2820: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2870: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2880: 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44 61  rivate Static Da
2890: 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
28a0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f  private static o
28b0: 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d  bject syncRoot =
28c0: 20 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a   new object();..
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
28e0: 61 74 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20  ate static long 
28f0: 6e 65 78 74 44 65 62 75 67 49 64 3b 0d 0a 20 20  nextDebugId;..  
2900: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2910: 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65  e static long ne
2920: 78 74 54 72 61 63 65 49 64 3b 0d 0a 20 20 20 20  xtTraceId;..    
2930: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2940: 73 74 61 74 69 63 20 49 4c 69 73 74 3c 54 72 61  static IList<Tra
2950: 63 65 4c 69 73 74 65 6e 65 72 3e 20 64 65 62 75  ceListener> debu
2960: 67 4c 69 73 74 65 6e 65 72 73 3b 0d 0a 20 20 20  gListeners;..   
2970: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2980: 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69   static TracePri
2990: 6f 72 69 74 79 20 64 65 62 75 67 50 72 69 6f 72  ority debugPrior
29a0: 69 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72  ity = TracePrior
29b0: 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20  ity.Default;..  
29c0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
29d0: 65 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72  e static TracePr
29e0: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
29f0: 72 69 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f  rity = TracePrio
2a00: 72 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20  rity.Default;.. 
2a10: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2a20: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2a30: 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 44   debugFormat = D
2a40: 65 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61  efaultDebugForma
2a50: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
2a60: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
2a70: 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61  tring traceForma
2a80: 74 20 3d 20 44 65 66 61 75 6c 74 54 72 61 63 65  t = DefaultTrace
2a90: 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
2aa0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2ab0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2ac0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2b10: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
2b20: 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74 69   Static Properti
2b30: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
2b40: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72  public static Tr
2b50: 61 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75  acePriority Debu
2b60: 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  gPriority..     
2b70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b80: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
2b90: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
2ba0: 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 50 72  { return debugPr
2bb0: 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20  iority; } }..   
2bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2bd0: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
2be0: 74 29 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69  t) { debugPriori
2bf0: 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d  ty = value; } }.
2c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c20: 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2c70: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 54   public static T
2c80: 72 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61  racePriority Tra
2c90: 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20  cePriority..    
2ca0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cb0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2cc0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
2cd0: 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50   { return traceP
2ce0: 72 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20  riority; } }..  
2cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2d00: 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f  t { lock (syncRo
2d10: 6f 74 29 20 7b 20 74 72 61 63 65 50 72 69 6f 72  ot) { tracePrior
2d20: 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  ity = value; } }
2d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2d40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2d50: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2da0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
2db0: 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d  string DebugForm
2dc0: 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  at..            
2dd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2de0: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
2df0: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
2e00: 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d  n debugFormat; }
2e10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2e20: 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28      set { lock (
2e30: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75  syncRoot) { debu
2e40: 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  gFormat = value;
2e50: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
2e60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2e70: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2ec0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
2ed0: 74 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65  tic string Trace
2ee0: 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20  Format..        
2ef0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f00: 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63         get { loc
2f10: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72  k (syncRoot) { r
2f20: 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61  eturn traceForma
2f30: 74 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20  t; } }..        
2f40: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f          set { lo
2f50: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
2f60: 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61  traceFormat = va
2f70: 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  lue; } }..      
2f80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2f90: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2fa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2fb0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
3000: 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 61    #region Intera
3010: 63 74 69 76 65 20 53 75 70 70 6f 72 74 20 4d 65  ctive Support Me
3020: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
3030: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
3040: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
3050: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
3060: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
3070: 63 20 73 74 61 74 69 63 20 44 69 61 6c 6f 67 52  c static DialogR
3080: 65 73 75 6c 74 20 53 68 6f 77 4d 65 73 73 61 67  esult ShowMessag
3090: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
30a0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
30b0: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  y tracePriority,
30c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30d0: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
30e0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
30f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3100: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
3110: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
3130: 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c  sembly assembly,
3140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3150: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
3160: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3170: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
3180: 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
3190: 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 42       MessageBoxB
31a0: 75 74 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c 0d  uttons buttons,.
31b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31c0: 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 20   MessageBoxIcon 
31d0: 69 63 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  icon..          
31e0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
31f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3200: 20 20 20 20 20 20 20 20 44 69 61 6c 6f 67 52 65          DialogRe
3210: 73 75 6c 74 20 72 65 73 75 6c 74 20 3d 20 44 69  sult result = Di
3220: 61 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a  alogResult.OK;..
3230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3240: 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28    DebugAndTrace(
3250: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
3260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3270: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
3280: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
3290: 2c 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67  , message, categ
32a0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
32b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 79 73           if (Sys
32c0: 74 65 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e 55  temInformation.U
32d0: 73 65 72 49 6e 74 65 72 61 63 74 69 76 65 29 0d  serInteractive).
32e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3300: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
3310: 69 74 6c 65 20 3d 20 47 65 74 41 73 73 65 6d 62  itle = GetAssemb
3320: 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79  lyTitle(assembly
3330: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
3340: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 69            if (ti
3350: 74 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  tle == null)..  
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3370: 20 20 20 20 20 20 74 69 74 6c 65 20 3d 20 41 70        title = Ap
3380: 70 6c 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75 63  plication.Produc
3390: 74 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tName;....      
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
33b0: 73 75 6c 74 20 3d 20 4d 65 73 73 61 67 65 42 6f  sult = MessageBo
33c0: 78 2e 53 68 6f 77 28 6d 65 73 73 61 67 65 2c 20  x.Show(message, 
33d0: 74 69 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c 20  title, buttons, 
33e0: 69 63 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  icon);....      
33f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
3400: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
3410: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
3420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3430: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
3440: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
3450: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
3460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3470: 20 20 20 20 20 20 20 20 20 20 22 55 73 65 72 20            "User 
3480: 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c  choice of {0}.",
3490: 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75   ForDisplay(resu
34a0: 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  lt)),..         
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
34c0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
34f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3500: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3510: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72        DebugAndTr
3520: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
3530: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
3540: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
3550: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
3560: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
3570: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
3580: 20 20 20 20 20 20 20 20 20 20 22 44 65 66 61 75            "Defau
3590: 6c 74 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d  lt choice of {0}
35a0: 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72  .", ForDisplay(r
35b0: 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20  esult)),..      
35c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
35d0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
35f0: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
3600: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3610: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
3620: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
3630: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3680: 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63      #region Trac
3690: 69 6e 67 20 53 75 70 70 6f 72 74 20 4d 65 74 68  ing Support Meth
36a0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
36b0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
36c0: 6f 69 64 20 53 65 74 75 70 44 65 62 75 67 4c 69  oid SetupDebugLi
36d0: 73 74 65 6e 65 72 73 28 29 0d 0a 20 20 20 20 20  steners()..     
36e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 65            if (de
3700: 62 75 67 4c 69 73 74 65 6e 65 72 73 20 3d 3d 20  bugListeners == 
3710: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3720: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
3730: 4c 69 73 74 65 6e 65 72 73 20 3d 20 6e 65 77 20  Listeners = new 
3740: 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e  List<TraceListen
3750: 65 72 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er>();....      
3760: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 4c            debugL
3770: 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77  isteners.Add(new
3780: 20 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73   ConsoleTraceLis
3790: 74 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20  tener());..     
37a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
37b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
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 0d 0a 0d 0a 20  ///////////.... 
3800: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
3810: 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65  c static long Ne
3820: 78 74 44 65 62 75 67 49 64 28 29 0d 0a 20 20 20  xtDebugId()..   
3830: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3840: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3850: 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49  rn Interlocked.I
3860: 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78  ncrement(ref nex
3870: 74 44 65 62 75 67 49 64 29 3b 0d 0a 20 20 20 20  tDebugId);..    
3880: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3890: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
38a0: 2f 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 0d 0a 0d 0a  ////////////....
38e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
38f0: 69 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e  ic static long N
3900: 65 78 74 54 72 61 63 65 49 64 28 29 0d 0a 20 20  extTraceId()..  
3910: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3930: 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e  urn Interlocked.
3940: 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65  Increment(ref ne
3950: 78 74 54 72 61 63 65 49 64 29 3b 0d 0a 20 20 20  xtTraceId);..   
3960: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3970: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3980: 2f 2f 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 0d 0a 0d  /////////////...
39c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
39d0: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
39e0: 67 20 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65  g TimeStamp(Date
39f0: 54 69 6d 65 20 64 61 74 65 54 69 6d 65 29 0d 0a  Time dateTime)..
3a00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3a20: 65 74 75 72 6e 20 64 61 74 65 54 69 6d 65 2e 54  eturn dateTime.T
3a30: 6f 53 74 72 69 6e 67 28 49 73 6f 38 36 30 31 44  oString(Iso8601D
3a40: 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72  ateTimeOutputFor
3a50: 6d 61 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  mat);..         
3a60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3a70: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3ac0: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
3ad0: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
3ae0: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
3af0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
3b00: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
3b10: 72 69 6e 67 20 47 65 74 4d 65 74 68 6f 64 4e 61  ring GetMethodNa
3b20: 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
3b30: 20 20 20 20 20 53 74 61 63 6b 54 72 61 63 65 20       StackTrace 
3b40: 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20  stackTrace,..   
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
3b60: 20 6c 65 76 65 6c 0d 0a 20 20 20 20 20 20 20 20   level..        
3b70: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
3b80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3b90: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
3bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3bc0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3be0: 20 4e 4f 54 45 3a 20 49 66 20 61 20 76 61 6c 69   NOTE: If a vali
3bf0: 64 20 73 74 61 63 6b 20 74 72 61 63 65 20 77 61  d stack trace wa
3c00: 73 20 6e 6f 74 20 73 75 70 70 6c 69 65 64 20 62  s not supplied b
3c10: 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  y the..         
3c20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
3c30: 20 20 20 20 63 61 6c 6c 65 72 2c 20 63 72 65 61      caller, crea
3c40: 74 65 20 6f 6e 65 20 6e 6f 77 20 62 61 73 65 64  te one now based
3c50: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0d   on the current.
3c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3c70: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
3c80: 65 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a  ecution stack...
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ca0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3cc0: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75  stackTrace == nu
3cd0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3ce0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d00: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d20: 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
3d30: 65 20 63 75 72 72 65 6e 74 20 65 78 65 63 75 74  e current execut
3d40: 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20  ion stack...    
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d60: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d80: 73 74 61 63 6b 54 72 61 63 65 20 3d 20 6e 65 77  stackTrace = new
3d90: 20 53 74 61 63 6b 54 72 61 63 65 28 29 3b 0d 0a   StackTrace();..
3da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3db0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dd0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
3de0: 6c 77 61 79 73 20 73 6b 69 70 20 74 68 69 73 20  lways skip this 
3df0: 63 61 6c 6c 20 66 72 61 6d 65 20 77 68 65 6e 20  call frame when 
3e00: 77 65 20 63 61 70 74 75 72 65 0d 0a 20 20 20 20  we capture..    
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e20: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
3e30: 20 73 74 61 63 6b 20 74 72 61 63 65 2e 0d 0a 20   stack trace... 
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e50: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e70: 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 20 20 20     level++;..   
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3ea0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ec0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74    // NOTE: Get t
3ed0: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74 61  he specified sta
3ee0: 63 6b 20 66 72 61 6d 65 20 28 61 6c 77 61 79 73  ck frame (always
3ef0: 20 61 64 64 20 6f 6e 65 20 74 6f 0d 0a 20 20 20   add one to..   
3f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f10: 20 2f 2f 20 20 20 20 20 20 20 73 6b 69 70 20 74   //       skip t
3f20: 68 69 73 20 6d 65 74 68 6f 64 29 2e 0d 0a 20 20  his method)...  
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f40: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3f50: 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b 46            StackF
3f60: 72 61 6d 65 20 73 74 61 63 6b 46 72 61 6d 65 20  rame stackFrame 
3f70: 3d 20 73 74 61 63 6b 54 72 61 63 65 2e 47 65 74  = stackTrace.Get
3f80: 46 72 61 6d 65 28 6c 65 76 65 6c 29 3b 0d 0a 0d  Frame(level);...
3f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3fa0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3fc0: 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6d 65  NOTE: Get the me
3fd0: 74 68 6f 64 20 66 6f 72 20 74 68 65 20 73 74 61  thod for the sta
3fe0: 63 6b 20 66 72 61 6d 65 2e 0d 0a 20 20 20 20 20  ck frame...     
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4000: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4010: 20 20 20 20 20 20 20 4d 65 74 68 6f 64 42 61 73         MethodBas
4020: 65 20 6d 65 74 68 6f 64 42 61 73 65 20 3d 20 73  e methodBase = s
4030: 74 61 63 6b 46 72 61 6d 65 2e 47 65 74 4d 65 74  tackFrame.GetMet
4040: 68 6f 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  hod();....      
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4070: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
4080: 65 74 20 74 68 65 20 74 79 70 65 20 66 6f 72 20  et the type for 
4090: 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20  the method...   
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
40c0: 20 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79           Type ty
40d0: 70 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e  pe = methodBase.
40e0: 44 65 63 6c 61 72 69 6e 67 54 79 70 65 3b 0d 0a  DeclaringType;..
40f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4100: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4120: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6e   NOTE: Get the n
4130: 61 6d 65 20 6f 66 20 74 68 65 20 6d 65 74 68 6f  ame of the metho
4140: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
4150: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4170: 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 6d 65  string name = me
4180: 74 68 6f 64 42 61 73 65 2e 4e 61 6d 65 3b 0d 0a  thodBase.Name;..
4190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
41a0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
41c0: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68   NOTE: Return th
41d0: 65 20 70 72 6f 70 65 72 6c 79 20 66 6f 72 6d 61  e properly forma
41e0: 74 74 65 64 20 72 65 73 75 6c 74 2e 0d 0a 20 20  tted result...  
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4210: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4220: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
4230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4240: 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d           "{0}{1}
4250: 7b 32 7d 22 2c 20 74 79 70 65 2e 4e 61 6d 65 2c  {2}", type.Name,
4260: 20 54 79 70 65 2e 44 65 6c 69 6d 69 74 65 72 2c   Type.Delimiter,
4270: 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20   name);..       
4280: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4290: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
42a0: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
42b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
42c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
42d0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
42e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
42f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4300: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
4310: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4320: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
4330: 2f 2f 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 0d 0a 0d  /////////////...
4370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
4380: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
4390: 44 65 62 75 67 43 6f 72 65 28 0d 0a 20 20 20 20  DebugCore(..    
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
43b0: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
43d0: 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
43f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4410: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
4420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4440: 20 20 20 20 20 20 20 20 69 66 20 28 64 65 62 75          if (debu
4450: 67 4c 69 73 74 65 6e 65 72 73 20 21 3d 20 6e 75  gListeners != nu
4460: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4470: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4490: 20 20 20 20 66 6f 72 65 61 63 68 20 28 54 72 61      foreach (Tra
44a0: 63 65 4c 69 73 74 65 6e 65 72 20 6c 69 73 74 65  ceListener liste
44b0: 6e 65 72 20 69 6e 20 64 65 62 75 67 4c 69 73 74  ner in debugList
44c0: 65 6e 65 72 73 29 0d 0a 20 20 20 20 20 20 20 20  eners)..        
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
4500: 69 73 74 65 6e 65 72 2e 57 72 69 74 65 4c 69 6e  istener.WriteLin
4510: 65 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67  e(message, categ
4520: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 20 20 6c 69 73 74 65 6e 65 72 2e 46 6c 75 73     listener.Flus
4550: 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  h();..          
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4580: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
45a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
45b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
45c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4600: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
4610: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 54 72  c static void Tr
4620: 61 63 65 43 6f 72 65 28 0d 0a 20 20 20 20 20 20  aceCore(..      
4630: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4640: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
4650: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4660: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
4670: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
4680: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
46a0: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  ck (syncRoot).. 
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
46c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
46d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
46f0: 20 4e 4f 54 45 3a 20 57 72 69 74 65 20 74 68 65   NOTE: Write the
4700: 20 6d 65 73 73 61 67 65 20 74 6f 20 61 6c 6c 20   message to all 
4710: 74 68 65 20 61 63 74 69 76 65 20 74 72 61 63 65  the active trace
4720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4730: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
4740: 69 73 74 65 6e 65 72 73 2e 0d 0a 20 20 20 20 20  isteners...     
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4760: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4770: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
4780: 74 65 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20  teLine(message, 
4790: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  category);..    
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47b0: 54 72 61 63 65 2e 46 6c 75 73 68 28 29 3b 0d 0a  Trace.Flush();..
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
47e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
47f0: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4840: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
4850: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
4860: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
4870: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
4880: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
4890: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48b0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
48c0: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
48e0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75  aceCallback debu
48f0: 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
4900: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4910: 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
4920: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4930: 20 20 20 20 20 20 20 20 20 20 45 78 63 65 70 74            Except
4940: 69 6f 6e 20 65 78 63 65 70 74 69 6f 6e 2c 0d 0a  ion exception,..
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4960: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d  string category.
4970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4980: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4990: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
49a0: 20 20 20 69 66 20 28 65 78 63 65 70 74 69 6f 6e     if (exception
49b0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
49d0: 65 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72  eturn DebugAndTr
49e0: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
49f0: 79 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  y, debugCallback
4a00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4a10: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
4a20: 43 61 6c 6c 62 61 63 6b 2c 20 6e 65 77 20 53 74  Callback, new St
4a30: 61 63 6b 54 72 61 63 65 28 65 78 63 65 70 74 69  ackTrace(excepti
4a40: 6f 6e 2c 20 74 72 75 65 29 2c 20 30 2c 0d 0a 20  on, true), 0,.. 
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a60: 20 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e         exception
4a70: 2e 54 6f 53 74 72 69 6e 67 28 29 2c 20 63 61 74  .ToString(), cat
4a80: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
4a90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4aa0: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
4ab0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4ac0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4b10: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
4b20: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
4b30: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
4b40: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
4b50: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
4b60: 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72  tring DebugAndTr
4b70: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
4b80: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
4b90: 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74  ity tracePriorit
4ba0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
4bb0: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
4bc0: 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  k debugCallback,
4bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4be0: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
4bf0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
4c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c10: 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
4c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4c30: 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
4c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c50: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
4c60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4c70: 20 20 20 20 72 65 74 75 72 6e 20 44 65 62 75 67      return Debug
4c80: 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
4ca0: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65  racePriority, de
4cb0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
4cc0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c  ceCallback, null
4cd0: 2c 20 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  , 1,..          
4ce0: 20 20 20 20 20 20 20 20 20 20 6d 65 73 73 61 67            messag
4cf0: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  e, category);.. 
4d00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
4d20: 2f 2f 2f 2f 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 0d  ///////////////.
4d60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
4d70: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
4d80: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
4d90: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
4da0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
4db0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 62  tatic string Deb
4dc0: 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
4de0: 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65  cePriority trace
4df0: 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20  Priority,..     
4e00: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
4e10: 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61  Callback debugCa
4e20: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
4e30: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
4e40: 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c  llback traceCall
4e50: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
4e60: 20 20 20 20 20 20 20 53 74 61 63 6b 54 72 61 63         StackTrac
4e70: 65 20 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20  e stackTrace,.. 
4e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4e90: 6e 74 20 6c 65 76 65 6c 2c 0d 0a 20 20 20 20 20  nt level,..     
4ea0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4eb0: 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20  g message,..    
4ec0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
4ed0: 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20  ng category..   
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4f10: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4f20: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61     // NOTE: Alwa
4f30: 79 73 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c  ys skip this cal
4f40: 6c 20 66 72 61 6d 65 20 69 66 20 74 68 65 20 73  l frame if the s
4f50: 74 61 63 6b 20 74 72 61 63 65 20 69 73 0d 0a 20  tack trace is.. 
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4f70: 2f 20 20 20 20 20 20 20 67 6f 69 6e 67 20 74 6f  /       going to
4f80: 20 62 65 20 63 61 70 74 75 72 65 64 20 62 79 20   be captured by 
4f90: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 2e 0d 0a  GetMethodName...
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fb0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4fc0: 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61      if (stackTra
4fd0: 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ce == null)..   
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ff0: 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20   level++;....   
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
5010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5020: 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 6d 61 74   // NOTE: Format
5030: 20 74 68 65 20 6d 65 73 73 61 67 65 20 66 6f 72   the message for
5040: 20 64 69 73 70 6c 61 79 20 28 6f 6e 63 65 29 2e   display (once).
5050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5060: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5070: 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72        string for
5080: 6d 61 74 74 65 64 20 3d 20 53 74 72 69 6e 67 2e  matted = String.
5090: 46 6f 72 6d 61 74 28 22 7b 30 7d 3a 20 7b 31 7d  Format("{0}: {1}
50a0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
50b0: 20 20 20 20 20 20 20 20 47 65 74 4d 65 74 68 6f          GetMetho
50c0: 64 4e 61 6d 65 28 73 74 61 63 6b 54 72 61 63 65  dName(stackTrace
50d0: 2c 20 6c 65 76 65 6c 29 2c 20 6d 65 73 73 61 67  , level), messag
50e0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
50f0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5100: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
5110: 54 45 3a 20 49 66 20 74 68 65 20 64 65 62 75 67  TE: If the debug
5120: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76   callback is inv
5130: 61 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61 63  alid or the trac
5140: 65 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20  e priority..    
5150: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
5160: 20 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73       of this mes
5170: 73 61 67 65 20 69 73 20 6c 65 73 73 20 74 68 61  sage is less tha
5180: 6e 20 77 68 61 74 20 77 65 20 63 75 72 72 65 6e  n what we curren
5190: 74 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20  tly want to..   
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
51b0: 20 20 20 20 20 20 64 65 62 75 67 2c 20 73 6b 69        debug, ski
51c0: 70 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  p it...         
51d0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
51e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
51f0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 21 3d  debugCallback !=
5200: 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20   null) &&..     
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
5220: 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d  tracePriority >=
5230: 20 44 65 62 75 67 50 72 69 6f 72 69 74 79 29 29   DebugPriority))
5240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5250: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5260: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
5270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5280: 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65   // NOTE: Invoke
5290: 20 74 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62   the debug callb
52a0: 61 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72  ack with the for
52b0: 6d 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20  matted..        
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
52d0: 20 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64       message and
52e0: 20 74 68 65 20 63 61 74 65 67 6f 72 79 20 73 70   the category sp
52f0: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a  ecified by the..
5300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5310: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c      //       cal
5320: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ler...          
5330: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5350: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 28    debugCallback(
5360: 66 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67  formatted, categ
5370: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
5380: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53b0: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
53c0: 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 69  trace callback i
53d0: 73 20 69 6e 76 61 6c 69 64 20 6f 72 20 74 68 65  s invalid or the
53e0: 20 74 72 61 63 65 20 70 72 69 6f 72 69 74 79 0d   trace priority.
53f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5400: 20 2f 2f 20 20 20 20 20 20 20 6f 66 20 74 68 69   //       of thi
5410: 73 20 6d 65 73 73 61 67 65 20 69 73 20 6c 65 73  s message is les
5420: 73 20 74 68 61 6e 20 77 68 61 74 20 77 65 20 63  s than what we c
5430: 75 72 72 65 6e 74 6c 79 20 77 61 6e 74 20 74 6f  urrently want to
5440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5450: 20 20 2f 2f 20 20 20 20 20 20 20 74 72 61 63 65    //       trace
5460: 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20 20  , skip it...    
5470: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
5480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5490: 69 66 20 28 28 74 72 61 63 65 43 61 6c 6c 62 61  if ((traceCallba
54a0: 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  ck != null) &&..
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54c0: 20 20 20 20 28 74 72 61 63 65 50 72 69 6f 72 69      (tracePriori
54d0: 74 79 20 3e 3d 20 54 72 61 63 65 50 72 69 6f 72  ty >= TracePrior
54e0: 69 74 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ity))..         
54f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5520: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
5530: 6e 76 6f 6b 65 20 74 68 65 20 74 72 61 63 65 20  nvoke the trace 
5540: 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68  callback with th
5550: 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a 20 20 20  e formatted..   
5560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5570: 20 2f 2f 20 20 20 20 20 20 20 6d 65 73 73 61 67   //       messag
5580: 65 20 61 6e 64 20 74 68 65 20 63 61 74 65 67 6f  e and the catego
5590: 72 79 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ry specified by 
55a0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
55b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
55c0: 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20    caller...     
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
55e0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
55f0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
5600: 62 61 63 6b 28 66 6f 72 6d 61 74 74 65 64 2c 20  back(formatted, 
5610: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  category);..    
5620: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5640: 20 72 65 74 75 72 6e 20 6d 65 73 73 61 67 65 3b   return message;
5650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
5670: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
5680: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
5690: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
56a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
56f0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f 63       #region Moc
5700: 6b 52 65 67 69 73 74 72 79 20 43 6c 61 73 73 0d  kRegistry Class.
5710: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
5720: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f   sealed class Mo
5730: 63 6b 52 65 67 69 73 74 72 79 20 3a 20 49 44 69  ckRegistry : IDi
5740: 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20  sposable..      
5750: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5760: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
5770: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
5780: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
5790: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 29 0d   MockRegistry().
57a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
57b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57c0: 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a  whatIf = true;..
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57e0: 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b  readOnly = true;
57f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5800: 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a    safe = true;..
5810: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5830: 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5880: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
5890: 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
58a0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
58b0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
58c0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
58d0: 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a        : this()..
58e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
58f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5900: 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61  his.whatIf = wha
5910: 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
5920: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5930: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5970: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5980: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
5990: 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20  kRegistry(..    
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
59b0: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
59c0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
59d0: 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  eadOnly..       
59e0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
5a00: 69 73 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20  is(whatIf)..    
5a10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5a20: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
5a30: 72 65 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64 4f  readOnly = readO
5a40: 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nly;..          
5a50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5a60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5ab0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
5ac0: 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20  kRegistry(..    
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
5ae0: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
5af0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
5b00: 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20  eadOnly,..      
5b10: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
5b20: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
5b30: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
5b40: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 77          : this(w
5b50: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29  hatIf, readOnly)
5b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5b80: 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66   this.safe = saf
5b90: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
5ba0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
5bb0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
5bc0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
5bd0: 2f 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 0d 0a 0d 0a  ////////////....
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
5c20: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
5c30: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
5c40: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5c50: 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20  whatIf;..       
5c60: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
5c70: 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20   WhatIf..       
5c80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5c90: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
5ca0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
5cb0: 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d  eturn whatIf; }.
5cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5cd0: 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   set { CheckDisp
5ce0: 6f 73 65 64 28 29 3b 20 77 68 61 74 49 66 20 3d  osed(); whatIf =
5cf0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
5d00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5d10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
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 0d 0a 0d 0a 20  ///////////.... 
5d60: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
5d70: 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79  te bool readOnly
5d80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
5d90: 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f  ublic bool ReadO
5da0: 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nly..           
5db0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5dc0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
5dd0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
5de0: 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20  n readOnly; }.. 
5df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
5e00: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
5e10: 65 64 28 29 3b 20 72 65 61 64 4f 6e 6c 79 20 3d  ed(); readOnly =
5e20: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
5e30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5e40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
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 0d 0a 0d 0a 20  ///////////.... 
5e90: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
5ea0: 74 65 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20  te bool safe;.. 
5eb0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
5ec0: 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20 20  c bool Safe..   
5ed0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
5ef0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
5f00: 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65 3b 20  ); return safe; 
5f10: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
5f20: 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69     set { CheckDi
5f30: 73 70 6f 73 65 64 28 29 3b 20 73 61 66 65 20 3d  sposed(); safe =
5f40: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
5f50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5f60: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
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 0d 0a 0d 0a 20  ///////////.... 
5fb0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
5fc0: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
5fd0: 65 79 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d  ey classesRoot;.
5fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5ff0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
6000: 4b 65 79 20 43 6c 61 73 73 65 73 52 6f 6f 74 0d  Key ClassesRoot.
6010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6030: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  get..           
6040: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6050: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
6060: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6080: 20 20 20 20 69 66 20 28 63 6c 61 73 73 65 73 52      if (classesR
6090: 6f 6f 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  oot == null)..  
60a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60b0: 20 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f        classesRoo
60c0: 74 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  t = new MockRegi
60d0: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60f0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 43        Registry.C
6100: 6c 61 73 73 65 73 52 6f 6f 74 2c 20 77 68 61 74  lassesRoot, what
6110: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61  If, readOnly, sa
6120: 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fe);....        
6130: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6140: 72 6e 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d  rn classesRoot;.
6150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6160: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6170: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6180: 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
61d0: 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
61e0: 52 65 67 69 73 74 72 79 4b 65 79 20 63 75 72 72  RegistryKey curr
61f0: 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20  entConfig;..    
6200: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
6210: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43  ockRegistryKey C
6220: 75 72 72 65 6e 74 43 6f 6e 66 69 67 0d 0a 20 20  urrentConfig..  
6230: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
6250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6260: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6270: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
6280: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
6290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62a0: 20 69 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66   if (currentConf
62b0: 69 67 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ig == null)..   
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62d0: 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66       currentConf
62e0: 69 67 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ig = new MockReg
62f0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
6300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6310: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
6320: 43 75 72 72 65 6e 74 43 6f 6e 66 69 67 2c 20 77  CurrentConfig, w
6330: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
6340: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
6350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6360: 65 74 75 72 6e 20 63 75 72 72 65 6e 74 43 6f 6e  eturn currentCon
6370: 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fig;..          
6380: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6390: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
63a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
63f0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6400: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6410: 20 63 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20   currentUser;.. 
6420: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
6430: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
6440: 79 20 43 75 72 72 65 6e 74 55 73 65 72 0d 0a 20  y CurrentUser.. 
6450: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
6470: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
6480: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6490: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
64a0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64c0: 20 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65    if (currentUse
64d0: 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64f0: 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 20      currentUser 
6500: 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  = new MockRegist
6510: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
6520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6530: 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 75 72      Registry.Cur
6540: 72 65 6e 74 55 73 65 72 2c 20 77 68 61 74 49 66  rentUser, whatIf
6550: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
6560: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6570: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6580: 20 63 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20   currentUser;.. 
6590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
65a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
65b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
65c0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6610: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
6620: 67 69 73 74 72 79 4b 65 79 20 64 79 6e 44 61 74  gistryKey dynDat
6630: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
6640: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6650: 74 72 79 4b 65 79 20 44 79 6e 44 61 74 61 0d 0a  tryKey DynData..
6660: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
6680: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
6690: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
66a0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
66b0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
66c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66d0: 20 20 20 69 66 20 28 64 79 6e 44 61 74 61 20 3d     if (dynData =
66e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6700: 20 64 79 6e 44 61 74 61 20 3d 20 6e 65 77 20 4d   dynData = new M
6710: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
6720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
6740: 69 73 74 72 79 2e 44 79 6e 44 61 74 61 2c 20 77  istry.DynData, w
6750: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
6760: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
6770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6780: 65 74 75 72 6e 20 64 79 6e 44 61 74 61 3b 0d 0a  eturn dynData;..
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
67b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
67c0: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6810: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
6820: 65 67 69 73 74 72 79 4b 65 79 20 6c 6f 63 61 6c  egistryKey local
6830: 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20  Machine;..      
6840: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
6850: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4c 6f 63  kRegistryKey Loc
6860: 61 6c 4d 61 63 68 69 6e 65 0d 0a 20 20 20 20 20  alMachine..     
6870: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6880: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
6890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
68a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
68b0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
68c0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
68e0: 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d   (localMachine =
68f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6910: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20   localMachine = 
6920: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
6930: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
6940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6950: 20 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c    Registry.Local
6960: 4d 61 63 68 69 6e 65 2c 20 77 68 61 74 49 66 2c  Machine, whatIf,
6970: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
6980: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6990: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
69a0: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20  localMachine;.. 
69b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
69c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
69d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
69e0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6a30: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
6a40: 67 69 73 74 72 79 4b 65 79 20 70 65 72 66 6f 72  gistryKey perfor
6a50: 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20  manceData;..    
6a60: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
6a70: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 50  ockRegistryKey P
6a80: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 0d 0a  erformanceData..
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
6ab0: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
6ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6ad0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
6ae0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b00: 20 20 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e     if (performan
6b10: 63 65 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d  ceData == null).
6b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6b30: 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d           perform
6b40: 61 6e 63 65 44 61 74 61 20 3d 20 6e 65 77 20 4d  anceData = new M
6b50: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
6b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
6b80: 69 73 74 72 79 2e 50 65 72 66 6f 72 6d 61 6e 63  istry.Performanc
6b90: 65 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72  eData, whatIf, r
6ba0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6bb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6bc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 65         return pe
6bd0: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 3b 0d 0a  rformanceData;..
6be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6bf0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
6c00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6c10: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6c60: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
6c70: 65 67 69 73 74 72 79 4b 65 79 20 75 73 65 72 73  egistryKey users
6c80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
6c90: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
6ca0: 72 79 4b 65 79 20 55 73 65 72 73 0d 0a 20 20 20  ryKey Users..   
6cb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
6cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ce0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6cf0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
6d00: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
6d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d20: 69 66 20 28 75 73 65 72 73 20 3d 3d 20 6e 75 6c  if (users == nul
6d30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72              user
6d50: 73 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  s = new MockRegi
6d60: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
6d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d80: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 55        Registry.U
6d90: 73 65 72 73 2c 20 77 68 61 74 49 66 2c 20 72 65  sers, whatIf, re
6da0: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
6db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6dc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 73 65        return use
6dd0: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
6de0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6df0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6e00: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
6e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6e20: 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6e70: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 22  #region Public "
6e80: 52 65 67 69 73 74 72 79 22 20 4d 65 74 68 6f 64  Registry" Method
6e90: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
6ea0: 75 62 6c 69 63 20 6f 62 6a 65 63 74 20 47 65 74  ublic object Get
6eb0: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
6ec0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
6ed0: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
6ee0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
6ef0: 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  valueName,..    
6f00: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
6f10: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d  ct defaultValue.
6f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6f30: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
6f40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6f50: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6f60: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6f70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
6f80: 67 69 73 74 72 79 2e 47 65 74 56 61 6c 75 65 28  gistry.GetValue(
6f90: 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61  keyName, valueNa
6fa0: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
6fb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6fc0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6fd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7020: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
7030: 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
7040: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
7050: 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  g keyName,..    
7060: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
7070: 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20  ng valueName,.. 
7080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
7090: 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20  bject value..   
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
70b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
70d0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
70e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
70f0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
7100: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7110: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
7120: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7130: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
7140: 53 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65  SetValue(keyName
7150: 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c  , valueName, val
7160: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
7170: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
7180: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
71d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
71e0: 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  d SetValue(..   
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
7200: 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20  ing keyName,..  
7210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
7220: 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d  ring valueName,.
7230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7240: 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a   object value,..
7250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7260: 52 65 67 69 73 74 72 79 56 61 6c 75 65 4b 69 6e  RegistryValueKin
7270: 64 20 76 61 6c 75 65 4b 69 6e 64 0d 0a 20 20 20  d valueKind..   
7280: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
7290: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
72b0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
72c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
72d0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
72e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
72f0: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
7300: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7310: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
7320: 53 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65  SetValue(keyName
7330: 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c  , valueName, val
7340: 75 65 2c 20 76 61 6c 75 65 4b 69 6e 64 29 3b 0d  ue, valueKind);.
7350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7360: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
7370: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
7380: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
73d0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
73e0: 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73   Private Methods
73f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7400: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
7410: 52 65 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20  ReadOnly()..    
7420: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7430: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
7440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7450: 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61 64  / NOTE: In "read
7460: 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20  -only" mode, we 
7470: 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69  disallow all wri
7480: 74 65 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20  te access...    
7490: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74b0: 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a  if (!readOnly)..
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74d0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
74f0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
7500: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
7510: 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on();..         
7520: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
7530: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
7540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7550: 2f 2f 2f 2f 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 0d  ///////////////.
7590: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
75a0: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
75b0: 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d  le "Pattern" Mem
75c0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  bers..          
75d0: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64    private bool d
75e0: 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20  isposed;..      
75f0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
7600: 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  id CheckDisposed
7610: 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  () /* throw */..
7620: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7640: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7660: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
7680: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
7690: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
76a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
76b0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f 63        typeof(Moc
76c0: 6b 52 65 67 69 73 74 72 79 29 2e 4e 61 6d 65 29  kRegistry).Name)
76d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
76e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
76f0: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7740: 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72     private /* pr
7750: 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
7760: 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  */ void Dispose(
7770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7780: 20 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67    bool disposing
7790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
77a0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
77b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
77c0: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
77d0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
77e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
77f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
7800: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7830: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7840: 2f 2f 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 0d 0a  //////////////..
7860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7870: 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f          // dispo
7880: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
7890: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
78c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
78e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78f0: 20 20 20 20 20 20 69 66 20 28 63 6c 61 73 73 65        if (classe
7900: 73 52 6f 6f 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a  sRoot != null)..
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7920: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7940: 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f         classesRo
7950: 6f 74 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ot.Close();..   
7960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7970: 20 20 20 20 20 20 20 20 20 63 6c 61 73 73 65 73           classes
7980: 52 6f 6f 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Root = null;..  
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79c0: 20 20 20 69 66 20 28 63 75 72 72 65 6e 74 43 6f     if (currentCo
79d0: 6e 66 69 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  nfig != null).. 
79e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a10: 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e        currentCon
7a20: 66 69 67 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  fig.Close();..  
7a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a40: 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e            curren
7a50: 74 43 6f 6e 66 69 67 20 3d 20 6e 75 6c 6c 3b 0d  tConfig = null;.
7a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7a70: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a90: 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e        if (curren
7aa0: 74 55 73 65 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a  tUser != null)..
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ac0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ae0: 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 55 73         currentUs
7af0: 65 72 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  er.Close();..   
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b10: 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74           current
7b20: 55 73 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  User = null;..  
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b60: 20 20 20 69 66 20 28 64 79 6e 44 61 74 61 20 21     if (dynData !
7b70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 64 79 6e 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b  dynData.Close();
7bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 79                dy
7be0: 6e 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  nData = null;.. 
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c20: 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d 61 63      if (localMac
7c30: 68 69 6e 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  hine != null).. 
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c70: 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69        localMachi
7c80: 6e 65 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ne.Close();..   
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ca0: 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61           localMa
7cb0: 63 68 69 6e 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  chine = null;.. 
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cd0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cf0: 20 20 20 20 69 66 20 28 70 65 72 66 6f 72 6d 61      if (performa
7d00: 6e 63 65 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29  nceData != null)
7d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7d20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d40: 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d           perform
7d50: 61 6e 63 65 44 61 74 61 2e 43 6c 6f 73 65 28 29  anceData.Close()
7d60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
7d80: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d  erformanceData =
7d90: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7dd0: 28 75 73 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d  (users != null).
7de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7df0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e10: 20 20 20 20 20 20 20 20 75 73 65 72 73 2e 43 6c          users.Cl
7e20: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 20 75 73 65 72 73 20 3d 20 6e 75 6c 6c      users = null
7e50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7e60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
7e90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7ea0: 2f 2f 2f 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 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
7ed0: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
7ee0: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
7ef0: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f50: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
7f60: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
7f70: 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73  : This object is
7f80: 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a   now disposed...
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fa0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70              disp
7fc0: 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  osed = true;..  
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
8000: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
8010: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
8060: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
8070: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d   IDisposable Mem
8080: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  bers..          
8090: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69    public void Di
80a0: 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  spose()..       
80b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
80c0: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
80d0: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
80e0: 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72          GC.Suppr
80f0: 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73  essFinalize(this
8100: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8110: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
8120: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
8130: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
8140: 2f 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 0d 0a 0d 0a  ////////////....
8180: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
8190: 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a  ion Destructor..
81a0: 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63              ~Moc
81b0: 6b 52 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20  kRegistry()..   
81c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
81e0: 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20  ose(false);..   
81f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8200: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
8210: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
8220: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
8230: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
8240: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8290: 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69  #region MockRegi
82a0: 73 74 72 79 4b 65 79 20 43 6c 61 73 73 0d 0a 20  stryKey Class.. 
82b0: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
82c0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63  sealed class Moc
82d0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 3a 20 49  kRegistryKey : I
82e0: 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20  Disposable..    
82f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8300: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
8310: 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  te Constructors.
8320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
8330: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
8340: 79 4b 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20  yKey()..        
8350: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8360: 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d 20         whatIf = 
8370: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
8380: 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 20         readOnly 
8390: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
83a0: 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d 20           safe = 
83b0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
83c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
83d0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
83f0: 2f 2f 2f 2f 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 0d  ///////////////.
8430: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
8440: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
8450: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
8460: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
8470: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
8480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8490: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
84a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
84b0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
84c0: 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20       : this().. 
84d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
84f0: 69 73 2e 6b 65 79 20 3d 20 6b 65 79 3b 0d 0a 20  is.key = key;.. 
8500: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8510: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8520: 2f 2f 2f 2f 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 0d  ///////////////.
8560: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
8570: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
8580: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
8590: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
85a0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
85b0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
85c0: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   subKeyName..   
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85f0: 3a 20 74 68 69 73 28 6b 65 79 29 0d 0a 20 20 20  : this(key)..   
8600: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8610: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
8620: 2e 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73 75  .subKeyName = su
8630: 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  bKeyName;..     
8640: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8650: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
86a0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
86b0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
86c0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
86d0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
86e0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
86f0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
8700: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
8710: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
8720: 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20  hatIf..         
8730: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
8740: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
8750: 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65  (key, subKeyName
8760: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8780: 20 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20    this.whatIf = 
8790: 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20  whatIf;..       
87a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
87b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
8800: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8810: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
8820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8830: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
8840: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
8850: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
8860: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
8870: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
8880: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
8890: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
88a0: 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nly..           
88b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
88c0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
88d0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
88e0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
88f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8900: 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 61          this.rea
8910: 64 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79  dOnly = readOnly
8920: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8960: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8990: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
89a0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
89b0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
89c0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
89e0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
89f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8a00: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
8a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a20: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a  bool readOnly,..
8a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a40: 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20  bool safe..     
8a50: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8a70: 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79  this(key, subKey
8a80: 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65  Name, whatIf, re
8a90: 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20  adOnly)..       
8aa0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8ab0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61 66          this.saf
8ac0: 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20 20  e = safe;..     
8ad0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8ae0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
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 0d 0a 0d 0a 20  ///////////.... 
8b30: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
8b40: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
8b50: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
8b60: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
8b70: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
8b80: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
8b90: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
8ba0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8bb0: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
8bc0: 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 29 0d  , null, whatIf).
8bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bf0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
8c20: 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8c70: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8c80: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8c90: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
8ca0: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
8cb0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8cc0: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
8cd0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65           bool re
8ce0: 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  adOnly..        
8cf0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8d00: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
8d10: 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61  s(key, null, wha
8d20: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a  tIf, readOnly)..
8d30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8d50: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
8d60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8d80: 2f 2f 2f 2f 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 0d  ///////////////.
8dc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
8dd0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
8de0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
8df0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
8e00: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
8e10: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
8e20: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
8e30: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
8e40: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  dOnly,..        
8e50: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66          bool saf
8e60: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8e70: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8e80: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
8e90: 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
8ea0: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 0d  readOnly, safe).
8eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ed0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8ef0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
8f00: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
8f10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
8f60: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
8f70: 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Public Methods..
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
8f90: 69 63 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d  ic void Close().
8fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fc0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
8fd0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20      // NOTE: No 
8fe0: 64 69 73 70 6f 73 65 64 20 63 68 65 63 6b 20 68  disposed check h
8ff0: 65 72 65 20 62 65 63 61 75 73 65 20 63 61 6c 6c  ere because call
9000: 69 6e 67 20 74 68 69 73 20 6d 65 74 68 6f 64 0d  ing this method.
9010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9020: 20 2f 2f 20 20 20 20 20 20 20 73 68 6f 75 6c 64   //       should
9030: 20 62 65 20 6a 75 73 74 20 6c 69 6b 65 20 63 61   be just like ca
9040: 6c 6c 69 6e 67 20 44 69 73 70 6f 73 65 2e 0d 0a  lling Dispose...
9050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9060: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
9070: 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65      Dispose(true
9080: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9090: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
90a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
90b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
90f0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
9100: 65 67 69 73 74 72 79 4b 65 79 20 43 72 65 61 74  egistryKey Creat
9110: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
9120: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9130: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   subKeyName..   
9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9150: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9170: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
9180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9190: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
91a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
91b0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
91c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
91d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
91e0: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
91f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77             if (w
9200: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
9210: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9230: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
9240: 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20         // HACK: 
9250: 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20  Attempt to open 
9260: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73 75  the specified su
9270: 62 2d 6b 65 79 2e 20 20 49 66 20 74 68 69 73 0d  b-key.  If this.
9280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9290: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 61       //       fa
92a0: 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d  ils, we will sim
92b0: 70 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 77  ply return the w
92c0: 72 61 70 70 65 64 20 72 6f 6f 74 20 6b 65 79 0d  rapped root key.
92d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
92e0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74       //       it
92f0: 73 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72  self since no wr
9300: 69 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ites are allowed
9310: 20 69 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a 20   in 'what-if'.. 
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9330: 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65     //       mode
9340: 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20   anyhow...      
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9370: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
9380: 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f  y subKey = key.O
9390: 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79  penSubKey(subKey
93a0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
93b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
93c0: 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d 20  turn (subKey != 
93d0: 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
93e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93f0: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
9400: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
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 73 75 62 4b 65 79 2c 20 77         subKey, w
9430: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
9440: 20 73 61 66 65 29 20 3a 0d 0a 20 20 20 20 20 20   safe) :..      
9450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9460: 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74    new MockRegist
9470: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
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 6b 65 79 2c 20 73 75 62          key, sub
94a0: 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  KeyName, whatIf,
94b0: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
94c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
94d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
94e0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9510: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f     return new Mo
9520: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9540: 20 20 20 20 20 20 20 20 6b 65 79 2e 43 72 65 61          key.Crea
9550: 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  teSubKey(subKeyN
9560: 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 72 65  ame), whatIf, re
9570: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
9580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9590: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
95a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
95b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
9600: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
9610: 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  eleteSubKey(..  
9620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
9630: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
9640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9650: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
9660: 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  ssing..         
9670: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
9680: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9690: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
96a0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
96b0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
96c0: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
96d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
96e0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
96f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9700: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
9710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9720: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9740: 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b    key.DeleteSubK
9750: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74  ey(subKeyName, t
9760: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d  hrowOnMissing);.
9770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
97e0: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c   public void Del
97f0: 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9810: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
9820: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
9830: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
9840: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9850: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
9860: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
9870: 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64         CheckRead
9880: 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Only();....     
9890: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
98a0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98c0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
98e0: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
9900: 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  y.DeleteSubKeyTr
9910: 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  ee(subKeyName);.
9920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9980: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9990: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c   public void Del
99a0: 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  eteValue(..     
99b0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
99c0: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
99d0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
99e0: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20  rowOnMissing..  
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a20: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9a40: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
9a50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9a60: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
9a70: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9a90: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
9aa0: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
9ab0: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
9ac0: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c           key.Del
9ad0: 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20 74  eteValue(name, t
9ae0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d  hrowOnMissing);.
9af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9b10: 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9b60: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 5b 5d   public string[]
9b70: 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28   GetSubKeyNames(
9b80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ba0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9bb0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9bc0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
9bd0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9bf0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9c10: 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79  rn key.GetSubKey
9c20: 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20  Names();..      
9c30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9c40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9c90: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9ca0: 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65   object GetValue
9cb0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9cc0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
9cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ce0: 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56   object defaultV
9cf0: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
9d00: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9d10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9d20: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9d30: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9d50: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d70: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
9d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9d90: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
9da0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61  Value(name, defa
9db0: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
9dc0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9dd0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9de0: 2f 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 0d 0a 0d 0a  ////////////....
9e20: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9e30: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
9e40: 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  ey OpenSubKey(..
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e60: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
9e70: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
9e80: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
9e90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9ea0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
9eb0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
9ec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9ed0: 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65  OpenSubKey(subKe
9ee0: 79 4e 61 6d 65 2c 20 66 61 6c 73 65 29 3b 0d 0a  yName, false);..
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9f10: 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9f60: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
9f70: 74 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65  tryKey OpenSubKe
9f80: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9f90: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
9fa0: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
9fb0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69          bool wri
9fc0: 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  table..         
9fd0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
9fe0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9ff0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
a000: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a020: 28 77 72 69 74 61 62 6c 65 29 0d 0a 20 20 20 20  (writable)..    
a030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a040: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
a050: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a060: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
a070: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
a080: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a090: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
a0a0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
a0b0: 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 6b  ryKey subKey = k
a0c0: 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  ey.OpenSubKey(..
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0e0: 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20      subKeyName, 
a0f0: 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a  whatIf ? false :
a100: 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20   writable);.... 
a110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
a120: 65 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d  eturn (subKey !=
a130: 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20   null) ?..      
a140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
a150: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
a160: 79 28 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66  y(subKey, whatIf
a170: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
a180: 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  ) : null;..     
a190: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a1a0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
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 0d 0a 0d 0a 20  ///////////.... 
a1f0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a200: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
a210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a220: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a240: 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20  object value..  
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
a260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a280: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a2a0: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
a2b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
a2c0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
a2d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
a2f0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
a300: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
a310: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
a320: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74           key.Set
a330: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75  Value(name, valu
a340: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
a350: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a360: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a370: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
a380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a390: 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
a3c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
a3d0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
a3e0: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
a3f0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
a400: 67 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  g Name..        
a410: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a420: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
a430: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a450: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
a460: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a470: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
a480: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
a490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4a0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
a4b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a4c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a4d0: 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
a4e0: 45 6d 70 74 79 28 73 75 62 4b 65 79 4e 61 6d 65  Empty(subKeyName
a4f0: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
a500: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
a510: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c  ing.Format("{0}\
a520: 5c 7b 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c  \{1}", key.Name,
a530: 20 73 75 62 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a   subKeyName) :..
a540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a550: 20 20 20 20 20 20 20 20 6b 65 79 2e 4e 61 6d 65          key.Name
a560: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a570: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a580: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a590: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a5e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 52 65        private Re
a5f0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 3b 0d 0a  gistryKey key;..
a600: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a610: 69 63 20 52 65 67 69 73 74 72 79 4b 65 79 20 4b  ic RegistryKey K
a620: 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
a630: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a640: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
a650: 73 70 6f 73 65 64 28 29 3b 20 43 68 65 63 6b 53  sposed(); CheckS
a660: 61 66 65 28 29 3b 20 72 65 74 75 72 6e 20 6b 65  afe(); return ke
a670: 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
a680: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a690: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a6e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
a6f0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 3b  ring subKeyName;
a700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a710: 62 6c 69 63 20 73 74 72 69 6e 67 20 53 75 62 4b  blic string SubK
a720: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
a730: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a740: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
a750: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
a760: 74 75 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65 3b  turn subKeyName;
a770: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a780: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
a790: 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a7e0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
a7f0: 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20   whatIf;..      
a800: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
a810: 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20  l WhatIf..      
a820: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a830: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
a840: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
a850: 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d  return whatIf; }
a860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a870: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a880: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a8d0: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72    private bool r
a8e0: 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20  eadOnly;..      
a8f0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
a900: 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20  l ReadOnly..    
a910: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a920: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
a930: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a940: 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c  ; return readOnl
a950: 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
a960: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a970: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a9c0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
a9d0: 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20  l safe;..       
a9e0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
a9f0: 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   Safe..         
aa00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
aa10: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
aa20: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
aa30: 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20  urn safe; }..   
aa40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
aa50: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
aa60: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
aa70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
aac0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
aad0: 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20  vate Methods..  
aae0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
aaf0: 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64  e void CheckRead
ab00: 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20  Only()..        
ab10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ab20: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
ab30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
ab40: 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c  TE: In "read-onl
ab50: 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61  y" mode, we disa
ab60: 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61  llow all write a
ab70: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
ab80: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
aba0: 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20  !readOnly)..    
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abc0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
abd0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
abe0: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
abf0: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29  ationException()
ac00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
ac10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ac20: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
ac70: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
ac80: 43 68 65 63 6b 53 61 66 65 28 29 0d 0a 20 20 20  CheckSafe()..   
ac90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acc0: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 73 61 66  // NOTE: In "saf
acd0: 65 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61  e" mode, we disa
ace0: 6c 6c 6f 77 20 61 6c 6c 20 64 69 72 65 63 74 20  llow all direct 
acf0: 61 63 63 65 73 73 20 74 6f 20 74 68 65 0d 0a 20  access to the.. 
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ad10: 2f 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65  /       containe
ad20: 64 20 72 65 67 69 73 74 72 79 20 6b 65 79 2e 0d  d registry key..
ad30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ad40: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
ad50: 20 20 20 20 20 69 66 20 28 21 73 61 66 65 29 0d       if (!safe).
ad60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ad70: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad90: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
ada0: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
adb0: 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ion();..        
adc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
add0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
ade0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
adf0: 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ae40: 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e 4f  #region System.O
ae50: 62 6a 65 63 74 20 4f 76 65 72 72 69 64 65 73 0d  bject Overrides.
ae60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ae70: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
ae80: 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a  ing ToString()..
ae90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
aeb0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
aec0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
aed0: 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 4e     return this.N
aee0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
aef0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
af00: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
af10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
af20: 2f 2f 2f 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 0d 0a  //////////////..
af60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
af70: 65 67 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20 43  egion Implicit C
af80: 6f 6e 76 65 72 73 69 6f 6e 20 4f 70 65 72 61 74  onversion Operat
af90: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
afa0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
afb0: 20 2f 2f 20 42 55 47 42 55 47 3a 20 52 65 6d 6f   // BUGBUG: Remo
afc0: 76 65 20 6d 65 3f 20 20 54 68 69 73 20 73 68 6f  ve me?  This sho
afd0: 75 6c 64 20 62 65 20 73 61 66 65 20 62 65 63 61  uld be safe beca
afe0: 75 73 65 20 69 6e 20 27 77 68 61 74 2d 69 66 27  use in 'what-if'
aff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b000: 20 20 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6c           mode al
b010: 6c 20 6b 65 79 73 20 61 72 65 20 6f 70 65 6e 65  l keys are opene
b020: 64 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20  d read-only...  
b030: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
b040: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
b050: 20 73 74 61 74 69 63 20 69 6d 70 6c 69 63 69 74   static implicit
b060: 20 6f 70 65 72 61 74 6f 72 20 52 65 67 69 73 74   operator Regist
b070: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
b080: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
b090: 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20  stryKey key..   
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b0d0: 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75  eturn (key != nu
b0e0: 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65 79 20 3a 20  ll) ? key.Key : 
b0f0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
b100: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b110: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
b120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
b130: 2f 2f 2f 2f 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 0d  ///////////////.
b170: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
b180: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
b190: 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d  le "Pattern" Mem
b1a0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  bers..          
b1b0: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64    private bool d
b1c0: 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20  isposed;..      
b1d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
b1e0: 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  id CheckDisposed
b1f0: 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  () /* throw */..
b200: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b220: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
b230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b240: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
b250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
b260: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
b270: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
b280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b290: 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f 63        typeof(Moc
b2a0: 6b 52 65 67 69 73 74 72 79 4b 65 79 29 2e 4e 61  kRegistryKey).Na
b2b0: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
b2c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
b2d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b320: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a        private /*
b330: 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
b340: 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f  al */ void Dispo
b350: 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se(..           
b360: 20 20 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f 73       bool dispos
b370: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
b380: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
b390: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b3a0: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
b3b0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
b3c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b3e0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b400: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
b420: 2f 2f 2f 2f 2f 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 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b450: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69             // di
b460: 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65  spose managed re
b470: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
b480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b490: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b4a0: 2f 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 0d 0a 0d  /////////////...
b4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b4d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
b4e0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b500: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b520: 20 20 6b 65 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a    key.Close();..
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b540: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20              key 
b550: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
b560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b570: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
b580: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 20 20 20 20 20 20 20  ///////..       
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
b5e0: 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65  release unmanage
b5f0: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
b600: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
b610: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b640: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b650: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b670: 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f 62 6a  / NOTE: This obj
b680: 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73 70 6f  ect is now dispo
b690: 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  sed...          
b6a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6c0: 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75    disposed = tru
b6d0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
b6e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b6f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b700: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
b710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
b720: 2f 2f 2f 2f 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 0d  ///////////////.
b760: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
b770: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
b780: 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  le Members..    
b790: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
b7a0: 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20  oid Dispose().. 
b7b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
b7d0: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 43                GC
b7f0: 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a  .SuppressFinaliz
b800: 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20  e(this);..      
b810: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
b820: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
b830: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
b840: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
b890: 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75    #region Destru
b8a0: 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  ctor..          
b8b0: 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b    ~MockRegistryK
b8c0: 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ey()..          
b8d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b8e0: 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c       Dispose(fal
b8f0: 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
b900: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b910: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
b920: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b930: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b940: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
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 0d 0a 0d  /////////////...
b990: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
b9a0: 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 20   RegistryHelper 
b9b0: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
b9c0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 63 6c  rivate static cl
b9d0: 61 73 73 20 52 65 67 69 73 74 72 79 48 65 6c 70  ass RegistryHelp
b9e0: 65 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  er..        {.. 
b9f0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
ba00: 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63  on Public Static
ba10: 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
ba20: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
ba30: 20 73 74 61 74 69 63 20 69 6e 74 20 73 75 62 4b   static int subK
ba40: 65 79 73 43 72 65 61 74 65 64 3b 0d 0a 20 20 20  eysCreated;..   
ba50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
ba60: 73 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b 65  static int SubKe
ba70: 79 73 43 72 65 61 74 65 64 0d 0a 20 20 20 20 20  ysCreated..     
ba80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ba90: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
baa0: 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73 43 72  return subKeysCr
bab0: 65 61 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20  eated; }..      
bac0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bad0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
bb20: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
bb30: 65 20 73 74 61 74 69 63 20 69 6e 74 20 73 75 62  e static int sub
bb40: 4b 65 79 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20  KeysDeleted;..  
bb50: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
bb60: 20 73 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b   static int SubK
bb70: 65 79 73 44 65 6c 65 74 65 64 0d 0a 20 20 20 20  eysDeleted..    
bb80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bb90: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
bba0: 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73 44   return subKeysD
bbb0: 65 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20  eleted; }..     
bbc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
bbd0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
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 0d 0a 0d 0a 20  ///////////.... 
bc20: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
bc30: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65  te static int ke
bc40: 79 56 61 6c 75 65 73 53 65 74 3b 0d 0a 20 20 20  yValuesSet;..   
bc50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
bc60: 73 74 61 74 69 63 20 69 6e 74 20 4b 65 79 56 61  static int KeyVa
bc70: 6c 75 65 73 53 65 74 0d 0a 20 20 20 20 20 20 20  luesSet..       
bc80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
bc90: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
bca0: 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 53 65  turn keyValuesSe
bcb0: 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
bcc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
bcd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
bd20: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
bd30: 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75  atic int keyValu
bd40: 65 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20  esDeleted;..    
bd50: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
bd60: 74 61 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c  tatic int KeyVal
bd70: 75 65 73 44 65 6c 65 74 65 64 0d 0a 20 20 20 20  uesDeleted..    
bd80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bd90: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
bda0: 20 72 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65   return keyValue
bdb0: 73 44 65 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20  sDeleted; }..   
bdc0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
bdd0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
bde0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
bdf0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
be40: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
be50: 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f  lic Static Metho
be60: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
be70: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
be80: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
be90: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
bea0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
beb0: 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  tatic MockRegist
bec0: 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79  ryKey OpenSubKey
bed0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
bee0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
bef0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
bf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
bf10: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
bf20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf30: 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 2c 0d   bool writable,.
bf40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf50: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
bf70: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
bf90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
bfb0: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
bfc0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
bfd0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
bfe0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
bff0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
c000: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
c010: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
c020: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
c030: 65 28 77 72 69 74 61 62 6c 65 20 3f 0d 0a 20 20  e(writable ?..  
c040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c050: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
c060: 69 74 79 2e 48 69 67 68 65 73 74 20 3a 20 54 72  ity.Highest : Tr
c070: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
c080: 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
c0a0: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
c0b0: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
c0c0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0e0: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
c0f0: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
c100: 7b 31 7d 2c 20 77 72 69 74 61 62 6c 65 20 3d 20  {1}, writable = 
c110: 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {2}",..         
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
c130: 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65  orDisplay(rootKe
c140: 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73  y), ForDisplay(s
c150: 75 62 4b 65 79 4e 61 6d 65 29 2c 0d 0a 20 20 20  ubKeyName),..   
c160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c170: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
c180: 77 72 69 74 61 62 6c 65 29 29 2c 20 74 72 61 63  writable)), trac
c190: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c1b0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c1c0: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61     // HACK: Alwa
c1d0: 79 73 20 66 6f 72 62 69 64 20 77 72 69 74 61 62  ys forbid writab
c1e0: 6c 65 20 61 63 63 65 73 73 20 77 68 65 6e 20 6f  le access when o
c1f0: 70 65 72 61 74 69 6e 67 20 69 6e 0d 0a 20 20 20  perating in..   
c200: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
c210: 20 20 20 20 20 20 27 77 68 61 74 2d 69 66 27 20        'what-if' 
c220: 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  mode...         
c230: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
c240: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
c250: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
c260: 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62   rootKey.OpenSub
c270: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
c280: 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
c290: 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f 20 66  Name, whatIf ? f
c2a0: 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c 65 29  alse : writable)
c2b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c2c0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79       return (key
c2d0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20   != null) ?..   
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2f0: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
c300: 79 4b 65 79 28 6b 65 79 2c 20 77 68 61 74 49 66  yKey(key, whatIf
c310: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 20  , false, false) 
c320: 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  : null;..       
c330: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
c340: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
c390: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
c3a0: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
c3b0: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
c3c0: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
c3d0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d   public static M
c3e0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43  ockRegistryKey C
c3f0: 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
c410: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
c420: 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
c430: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
c440: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
c450: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
c460: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
c470: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
c480: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
c490: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
c4a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c4b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
c4c0: 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4e0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
c4f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c500: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
c510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c520: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
c530: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
c540: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
c550: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
c570: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
c580: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
c590: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5b0: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
c5c0: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
c5d0: 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
c5f0: 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65  orDisplay(rootKe
c600: 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73  y), ForDisplay(s
c610: 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20  ubKeyName)),..  
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c630: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
c640: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
c650: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
c660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
c670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c680: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c690: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
c6a0: 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 6f 70 65  HACK: Always ope
c6b0: 6e 20 61 20 6b 65 79 2c 20 72 61 74 68 65 72 20  n a key, rather 
c6c0: 74 68 61 6e 20 63 72 65 61 74 69 6e 67 20 6f 6e  than creating on
c6d0: 65 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20  e when..        
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
c6f0: 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 69       operating i
c700: 6e 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65  n 'what-if' mode
c710: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c720: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
c740: 66 20 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20  f (whatIf)..    
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c760: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c770: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c790: 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20         // HACK: 
c7a0: 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20  Attempt to open 
c7b0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73 75  the specified su
c7c0: 62 2d 6b 65 79 2e 20 20 49 66 0d 0a 20 20 20 20  b-key.  If..    
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7e0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69      //       thi
c7f0: 73 20 66 61 69 6c 73 2c 20 77 65 20 77 69 6c 6c  s fails, we will
c800: 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 20 74   simply return t
c810: 68 65 20 72 6f 6f 74 0d 0a 20 20 20 20 20 20 20  he root..       
c820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c830: 20 2f 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74   //       key it
c840: 73 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72  self since no wr
c850: 69 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ites are allowed
c860: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   in..           
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
c880: 20 20 20 20 20 20 27 77 68 61 74 2d 69 66 27 20        'what-if' 
c890: 6d 6f 64 65 20 61 6e 79 68 6f 77 2e 0d 0a 20 20  mode anyhow...  
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8d0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
c8e0: 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e  y key = rootKey.
c8f0: 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65  OpenSubKey(subKe
c900: 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21     return (key !
c930: 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20  = null) ?..     
c940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c950: 20 20 20 20 20 20 20 6b 65 79 20 3a 20 6e 65 77         key : new
c960: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
c970: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 72 6f 6f 74 4b 65 79 2c 20 73 75 62 4b     rootKey, subK
c9a0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  eyName, whatIf, 
c9b0: 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a  false, false);..
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
c9e0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
c9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ca00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52  return new MockR
ca30: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca50: 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
ca60: 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75  .CreateSubKey(su
ca70: 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68 61 74 49  bKeyName), whatI
ca80: 66 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20  f, false,..     
ca90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
caa0: 20 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d 0a         false);..
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cac0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
cad0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
cae0: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
caf0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
cb00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cb10: 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
cb20: 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20 20  sCreated++;..   
cb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
cb50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
cb60: 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cbb0: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
cbc0: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
cbd0: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
cbe0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
cbf0: 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74  tatic void Delet
cc00: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
cc10: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
cc20: 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
cc30: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
cc40: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
cc50: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
cc60: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
cc70: 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
cc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
cc90: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
ccb0: 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
ccc0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
ccd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ccf0: 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  rootKey == null)
cd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd10: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
cd20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cd30: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd50: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
cd60: 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
cd70: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
cd80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd90: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
cda0: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
cdb0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
cdc0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20  "rootKey = {0}, 
cdf0: 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d  subKeyName = {1}
ce00: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
ce20: 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c  isplay(rootKey),
ce30: 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b   ForDisplay(subK
ce40: 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  eyName)),..     
ce50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce60: 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
ce70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ce80: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
ce90: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
cea0: 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e          rootKey.
ceb0: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62  DeleteSubKey(sub
cec0: 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e  KeyName, throwOn
ced0: 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20  Missing);....   
cee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
cef0: 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a  KeysDeleted++;..
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
cf10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
cf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cf70: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
cf80: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
cf90: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
cfa0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
cfb0: 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74  tatic void Delet
cfc0: 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
cfe0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
cff0: 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
d000: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
d010: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
d020: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
d030: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
d040: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
d050: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
d060: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
d070: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d080: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
d090: 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0b0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d0d0: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
d100: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
d110: 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
d120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d130: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
d140: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
d150: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
d160: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
d180: 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75  ootKey = {0}, su
d190: 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c  bKeyName = {1}",
d1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d1b0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
d1c0: 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46  play(rootKey), F
d1d0: 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79  orDisplay(subKey
d1e0: 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
d1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d200: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
d210: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d220: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
d230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d240: 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65        rootKey.De
d250: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73  leteSubKeyTree(s
d260: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ubKeyName);.... 
d270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d280: 75 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b  ubKeysDeleted++;
d290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d2a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
d2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
d300: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
d310: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
d320: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
d330: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
d340: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d   static string[]
d350: 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28   GetSubKeyNames(
d360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d370: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
d380: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
d390: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
d3a0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
d3b0: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
d3c0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
d3d0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
d3e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d3f0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
d400: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d410: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
d420: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
d430: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d440: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
d460: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
d470: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
d480: 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  ty.High,..      
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4a0: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
d4b0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
d4c0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4e0: 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b          "key = {
d4f0: 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
d500: 6b 65 79 29 29 2c 20 74 72 61 63 65 43 61 74 65  key)), traceCate
d510: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
d520: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
d530: 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61   key.GetSubKeyNa
d540: 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  mes();..        
d550: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d560: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5a0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d5b0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
d5c0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
d5d0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
d5e0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
d5f0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6f 62  public static ob
d600: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a  ject GetValue(..
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d620: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
d630: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
d640: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
d650: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
d660: 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75      object defau
d670: 6c 74 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20  ltValue,..      
d680: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
d690: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
d6a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
d6b0: 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
d6c0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
d6d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d6e0: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
d6f0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
d710: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
d720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d730: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d750: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
d760: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
d770: 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20  rity.High,..    
d780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d790: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
d7a0: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
d7b0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
d7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d7d0: 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d            "key =
d7e0: 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d   {0}, name = {1}
d7f0: 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 20 3d  , defaultValue =
d800: 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {2}",..        
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d820: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c  ForDisplay(key),
d830: 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65   ForDisplay(name
d840: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
d850: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
d860: 69 73 70 6c 61 79 28 64 65 66 61 75 6c 74 56 61  isplay(defaultVa
d870: 6c 75 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  lue)), traceCate
d880: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
d890: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
d8a0: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61   key.GetValue(na
d8b0: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
d8c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
d8d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
d8e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
d930: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
d940: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
d950: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
d960: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
d970: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 53  ic static void S
d980: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
d990: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
d9a0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
d9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9c0: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
d9e0: 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20  ject value,..   
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
da00: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
da10: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
da20: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
da30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
da40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
da50: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
da60: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da80: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
da90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
daa0: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
dac0: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
dad0: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
dae0: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db00: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
db10: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
db20: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
db30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
db40: 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20             "key 
db50: 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31  = {0}, name = {1
db60: 7d 2c 20 76 61 6c 75 65 20 3d 20 7b 32 7d 22 2c  }, value = {2}",
db70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
db80: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
db90: 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69  play(key), ForDi
dba0: 73 70 6c 61 79 28 6e 61 6d 65 29 2c 20 46 6f 72  splay(name), For
dbb0: 44 69 73 70 6c 61 79 28 76 61 6c 75 65 29 29 2c  Display(value)),
dbc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dbd0: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
dbe0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
dc00: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
dc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
dc20: 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61 6d 65  ey.SetValue(name
dc30: 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20  , value);....   
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
dc50: 56 61 6c 75 65 73 53 65 74 2b 2b 3b 0d 0a 20 20  ValuesSet++;..  
dc60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
dc70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
dc80: 2f 2f 2f 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 0d 0a  //////////////..
dcc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
dcd0: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
dce0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
dcf0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
dd00: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
dd10: 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56  tic void DeleteV
dd20: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
dd30: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
dd40: 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20  tryKey key,..   
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
dd60: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
dd70: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
dd80: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
dd90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dda0: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ddc0: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
de00: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
de10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de20: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de40: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de60: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
de70: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
de80: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
de90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dea0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
deb0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
dec0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
ded0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
def0: 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20  key = {0}, name 
df00: 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {1}", ForDispl
df10: 61 79 28 6b 65 79 29 2c 0d 0a 20 20 20 20 20 20  ay(key),..      
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df30: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d    ForDisplay(nam
df40: 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
df50: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
df60: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
df70: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
df80: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
df90: 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20  leteValue(name, 
dfa0: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b  throwOnMissing);
dfb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
dfc0: 20 20 20 20 6b 65 79 56 61 6c 75 65 73 44 65 6c      keyValuesDel
dfd0: 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  eted++;..       
dfe0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
dff0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e000: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e010: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
e020: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
e030: 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
e080: 69 6f 6e 20 53 74 72 69 6e 67 4c 69 73 74 20 43  ion StringList C
e090: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
e0a0: 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
e0b0: 73 73 20 53 74 72 69 6e 67 4c 69 73 74 20 3a 20  ss StringList : 
e0c0: 4c 69 73 74 3c 73 74 72 69 6e 67 3e 0d 0a 20 20  List<string>..  
e0d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e0e0: 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
e0f0: 6e 67 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  ngList()..      
e100: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
e110: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
e120: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e130: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
e140: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
e150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e160: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
e1b0: 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67     public String
e1c0: 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65  List(IEnumerable
e1d0: 3c 73 74 72 69 6e 67 3e 20 63 6f 6c 6c 65 63 74  <string> collect
e1e0: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
e1f0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c        : base(col
e200: 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  lection)..      
e210: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e220: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e230: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e240: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e250: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e260: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e270: 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
e2c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69      #region Stri
e2d0: 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 43 6c 61  ngDictionary Cla
e2e0: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
e2f0: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
e300: 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72   StringDictionar
e310: 79 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 73  y : Dictionary<s
e320: 74 72 69 6e 67 2c 20 73 74 72 69 6e 67 3e 0d 0a  tring, string>..
e330: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e340: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74         public St
e350: 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 28 29  ringDictionary()
e360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e380: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
e390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e3a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e3b0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
e3c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
e3d0: 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
e420: 69 6f 6e 20 56 65 72 73 69 6f 6e 4c 69 73 74 20  ion VersionList 
e430: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
e440: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
e450: 61 73 73 20 56 65 72 73 69 6f 6e 4c 69 73 74 20  ass VersionList 
e460: 3a 20 4c 69 73 74 3c 56 65 72 73 69 6f 6e 3e 0d  : List<Version>.
e470: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e480: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56          public V
e490: 65 72 73 69 6f 6e 4c 69 73 74 28 29 0d 0a 20 20  ersionList()..  
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
e4b0: 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20  base()..        
e4c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e4d0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
e4e0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
e4f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e500: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
e550: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65         public Ve
e560: 72 73 69 6f 6e 4c 69 73 74 28 49 45 6e 75 6d 65  rsionList(IEnume
e570: 72 61 62 6c 65 3c 56 65 72 73 69 6f 6e 3e 20 63  rable<Version> c
e580: 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  ollection)..    
e590: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61              : ba
e5a0: 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a  se(collection)..
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e5d0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e5e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
e5f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e600: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
e610: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
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 0d 0a  //////////////..
e660: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
e670: 6e 20 56 65 72 73 69 6f 6e 4d 61 70 20 43 6c 61  n VersionMap Cla
e680: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
e690: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
e6a0: 20 56 65 72 73 69 6f 6e 4d 61 70 20 3a 20 44 69   VersionMap : Di
e6b0: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
e6c0: 20 56 65 72 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20   VersionList>.. 
e6d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e6e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72        public Ver
e6f0: 73 69 6f 6e 4d 61 70 28 29 0d 0a 20 20 20 20 20  sionMap()..     
e700: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e710: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
e720: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
e730: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e740: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
e750: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
e760: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
e7b0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 61 63       #region Pac
e7c0: 6b 61 67 65 20 43 6c 61 73 73 0d 0a 20 20 20 20  kage Class..    
e7d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61      internal sea
e7e0: 6c 65 64 20 63 6c 61 73 73 20 50 61 63 6b 61 67  led class Packag
e7f0: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
e800: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
e810: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
e820: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
e830: 20 20 20 70 75 62 6c 69 63 20 50 61 63 6b 61 67     public Packag
e840: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
e850: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e860: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
e870: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
e880: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
e890: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
e8a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
e8b0: 2f 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 0d 0a 0d 0a  ////////////....
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
e900: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
e910: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
e920: 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d     private Assem
e930: 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79  blyName assembly
e940: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
e950: 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
e960: 6c 79 4e 61 6d 65 20 41 73 73 65 6d 62 6c 79 4e  lyName AssemblyN
e970: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
e980: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e990: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
e9a0: 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20 7d   assemblyName; }
e9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e9c0: 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79    set { assembly
e9d0: 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
e9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ea00: 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
ea50: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 67 6c   private bool gl
ea60: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
ea70: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ea80: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 47 6c 6f 62  public bool Glob
ea90: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 0d  alAssemblyCache.
eaa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eac0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 67 6c 6f  get { return glo
ead0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
eae0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
eaf0: 20 20 20 20 20 73 65 74 20 7b 20 67 6c 6f 62 61       set { globa
eb00: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d  lAssemblyCache =
eb10: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
eb20: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
eb30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
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 0d 0a 0d 0a 20  ///////////.... 
eb80: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
eb90: 74 65 20 47 75 69 64 20 70 61 63 6b 61 67 65 49  te Guid packageI
eba0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
ebb0: 70 75 62 6c 69 63 20 47 75 69 64 20 50 61 63 6b  public Guid Pack
ebc0: 61 67 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20  ageId..         
ebd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ebe0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
ebf0: 72 6e 20 70 61 63 6b 61 67 65 49 64 3b 20 7d 0d  rn packageId; }.
ec00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ec10: 20 73 65 74 20 7b 20 70 61 63 6b 61 67 65 49 64   set { packageId
ec20: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
ec30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ec40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ec50: 2f 2f 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 0d 0a 0d  /////////////...
ec90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
eca0: 76 61 74 65 20 47 75 69 64 20 73 65 72 76 69 63  vate Guid servic
ecb0: 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eId;..          
ecc0: 20 20 70 75 62 6c 69 63 20 47 75 69 64 20 53 65    public Guid Se
ecd0: 72 76 69 63 65 49 64 0d 0a 20 20 20 20 20 20 20  rviceId..       
ece0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ecf0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
ed00: 74 75 72 6e 20 73 65 72 76 69 63 65 49 64 3b 20  turn serviceId; 
ed10: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
ed20: 20 20 20 73 65 74 20 7b 20 73 65 72 76 69 63 65     set { service
ed30: 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  Id = value; }.. 
ed40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ed60: 2f 2f 2f 2f 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 0d  ///////////////.
eda0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
edb0: 72 69 76 61 74 65 20 47 75 69 64 20 64 61 74 61  rivate Guid data
edc0: 53 6f 75 72 63 65 49 64 3b 0d 0a 20 20 20 20 20  SourceId;..     
edd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75         public Gu
ede0: 69 64 20 44 61 74 61 53 6f 75 72 63 65 49 64 0d  id DataSourceId.
edf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee10: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74  get { return dat
ee20: 61 53 6f 75 72 63 65 49 64 3b 20 7d 0d 0a 20 20  aSourceId; }..  
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
ee40: 74 20 7b 20 64 61 74 61 53 6f 75 72 63 65 49 64  t { dataSourceId
ee50: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
ee60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ee70: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ee80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
eec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
eed0: 76 61 74 65 20 47 75 69 64 20 64 61 74 61 50 72  vate Guid dataPr
eee0: 6f 76 69 64 65 72 49 64 3b 0d 0a 20 20 20 20 20  oviderId;..     
eef0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75         public Gu
ef00: 69 64 20 44 61 74 61 50 72 6f 76 69 64 65 72 49  id DataProviderI
ef10: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
ef20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ef30: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64    get { return d
ef40: 61 74 61 50 72 6f 76 69 64 65 72 49 64 3b 20 7d  ataProviderId; }
ef50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ef60: 20 20 73 65 74 20 7b 20 64 61 74 61 50 72 6f 76    set { dataProv
ef70: 69 64 65 72 49 64 20 3d 20 76 61 6c 75 65 3b 20  iderId = value; 
ef80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
ef90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
efa0: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
eff0: 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20     private Guid 
f000: 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79  adoNetTechnology
f010: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
f020: 20 70 75 62 6c 69 63 20 47 75 69 64 20 41 64 6f   public Guid Ado
f030: 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 0d  NetTechnologyId.
f040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f060: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61 64 6f  get { return ado
f070: 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b  NetTechnologyId;
f080: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
f090: 20 20 20 20 73 65 74 20 7b 20 61 64 6f 4e 65 74      set { adoNet
f0a0: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 76  TechnologyId = v
f0b0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
f0c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f0d0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
f0e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f0f0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
f100: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
f110: 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
f160: 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ion Configuratio
f170: 6e 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  n Class..       
f180: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
f190: 63 6c 61 73 73 20 43 6f 6e 66 69 67 75 72 61 74  class Configurat
f1a0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ion..        {..
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
f1c0: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
f1d0: 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20  tants..         
f1e0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
f1f0: 20 63 68 61 72 20 53 77 69 74 63 68 20 3d 20 27   char Switch = '
f200: 2d 27 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  -';..           
f210: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63   private const c
f220: 68 61 72 20 41 6c 74 53 77 69 74 63 68 20 3d 20  har AltSwitch = 
f230: 27 2f 27 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  '/';....        
f240: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f290: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
f2a0: 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 63  tatic readonly c
f2b0: 68 61 72 5b 5d 20 53 77 69 74 63 68 43 68 61 72  har[] SwitchChar
f2c0: 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  s = {..         
f2d0: 20 20 20 20 20 20 20 53 77 69 74 63 68 2c 20 41         Switch, A
f2e0: 6c 74 53 77 69 74 63 68 0d 0a 20 20 20 20 20 20  ltSwitch..      
f2f0: 20 20 20 20 20 20 7d 3b 0d 0a 20 20 20 20 20 20        };..      
f300: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
f310: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f360: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f370: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
f380: 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  te Constructors.
f390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f3a0: 76 61 74 65 20 43 6f 6e 66 69 67 75 72 61 74 69  vate Configurati
f3b0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
f3c0: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
f3d0: 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
f3e0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
f3f0: 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  logFileName,..  
f400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
f410: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d  ring directory,.
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f430: 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
f440: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
f450: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69         string li
f460: 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  nqFileName,..   
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
f480: 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ing designerFile
f490: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
f4a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65         string re
f4b0: 67 69 73 74 72 79 56 65 72 73 69 6f 6e 2c 0d 0a  gistryVersion,..
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4d0: 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72  string configVer
f4e0: 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
f4f0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 73         string vs
f500: 56 65 72 73 69 6f 6e 53 75 66 66 69 78 2c 0d 0a  VersionSuffix,..
f510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f520: 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d  string debugForm
f530: 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
f540: 20 20 20 20 20 73 74 72 69 6e 67 20 74 72 61 63       string trac
f550: 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
f560: 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
f570: 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c  lFlags installFl
f580: 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ags,..          
f590: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
f5a0: 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74  ity debugPriorit
f5b0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
f5c0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
f5d0: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  y tracePriority,
f5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f5f0: 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
f600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f610: 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a   bool install,..
f620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f630: 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
f640: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f650: 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  l noRuntimeVersi
f660: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
f670: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b       bool noDesk
f680: 74 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  top,..          
f690: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d        bool noCom
f6a0: 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  pact,..         
f6b0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
f6c0: 74 46 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20  tFx20,..        
f6d0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
f6e0: 65 74 46 78 33 35 2c 0d 0a 20 20 20 20 20 20 20  etFx35,..       
f6f0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
f700: 4e 65 74 46 78 34 30 2c 0d 0a 20 20 20 20 20 20  NetFx40,..      
f710: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f720: 6f 4e 65 74 46 78 34 35 2c 0d 0a 20 20 20 20 20  oNetFx45,..     
f730: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f740: 6e 6f 4e 65 74 46 78 34 35 31 2c 0d 0a 20 20 20  noNetFx451,..   
f750: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f760: 6c 20 6e 6f 56 73 32 30 30 35 2c 0d 0a 20 20 20  l noVs2005,..   
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f780: 6c 20 6e 6f 56 73 32 30 30 38 2c 0d 0a 20 20 20  l noVs2008,..   
f790: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f7a0: 6c 20 6e 6f 56 73 32 30 31 30 2c 0d 0a 20 20 20  l noVs2010,..   
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f7c0: 6c 20 6e 6f 56 73 32 30 31 32 2c 0d 0a 20 20 20  l noVs2012,..   
f7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f7e0: 6c 20 6e 6f 56 73 32 30 31 33 2c 0d 0a 20 20 20  l noVs2013,..   
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f800: 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a 20 20 20 20  l noTrace,..    
f810: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
f820: 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d 0a 20 20 20   noConsole,..   
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f840: 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20 20 20 20 20  l noLog,..      
f850: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
f860: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
f870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f880: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
f890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f8a0: 6f 6c 20 64 65 62 75 67 2c 0d 0a 20 20 20 20 20  ol debug,..     
f8b0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f8c0: 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
f8d0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
f8e0: 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20  onfirm..        
f8f0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
f900: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f910: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 61            this.a
f920: 73 73 65 6d 62 6c 79 20 3d 20 61 73 73 65 6d 62  ssembly = assemb
f930: 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
f940: 20 20 20 20 20 74 68 69 73 2e 6c 6f 67 46 69 6c       this.logFil
f950: 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69 6c 65 4e  eName = logFileN
f960: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
f970: 20 20 20 20 20 20 74 68 69 73 2e 64 69 72 65 63        this.direc
f980: 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f 72 79  tory = directory
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 63 6f 72 65 46 69 6c 65     this.coreFile
f9b0: 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69 6c 65 4e  Name = coreFileN
f9c0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
f9d0: 20 20 20 20 20 20 74 68 69 73 2e 6c 69 6e 71 46        this.linqF
f9e0: 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e 71 46 69  ileName = linqFi
f9f0: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
fa00: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65           this.de
fa10: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
fa20: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
fa30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
fa40: 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 72      this.registr
fa50: 79 56 65 72 73 69 6f 6e 20 3d 20 72 65 67 69 73  yVersion = regis
fa60: 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  tryVersion;..   
fa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fa80: 73 2e 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20  s.configVersion 
fa90: 3d 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b  = configVersion;
faa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fab0: 20 20 74 68 69 73 2e 76 73 56 65 72 73 69 6f 6e    this.vsVersion
fac0: 53 75 66 66 69 78 20 3d 20 76 73 56 65 72 73 69  Suffix = vsVersi
fad0: 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20 20 20  onSuffix;..     
fae0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
faf0: 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 64 65  debugFormat = de
fb00: 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
fb10: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fb20: 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 74  .traceFormat = t
fb30: 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  raceFormat;..   
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fb50: 73 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d  s.installFlags =
fb60: 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a   installFlags;..
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb80: 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f 72 69  this.debugPriori
fb90: 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f 72 69  ty = debugPriori
fba0: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
fbb0: 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 50       this.traceP
fbc0: 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63 65 50  riority = traceP
fbd0: 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
fbe0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70            this.p
fbf0: 65 72 55 73 65 72 20 3d 20 70 65 72 55 73 65 72  erUser = perUser
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 69 6e 73 74 61 6c 6c 20     this.install 
fc20: 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20  = install;..    
fc30: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fc40: 2e 77 6f 77 36 34 20 3d 20 77 6f 77 36 34 3b 0d  .wow64 = wow64;.
fc50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fc60: 20 74 68 69 73 2e 6e 6f 52 75 6e 74 69 6d 65 56   this.noRuntimeV
fc70: 65 72 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69  ersion = noRunti
fc80: 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  meVersion;..    
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fca0: 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44  .noDesktop = noD
fcb0: 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20  esktop;..       
fcc0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
fcd0: 43 6f 6d 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70  Compact = noComp
fce0: 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  act;..          
fcf0: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74        this.noNet
fd00: 46 78 32 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30  Fx20 = noNetFx20
fd10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fd20: 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 33     this.noNetFx3
fd30: 35 20 3d 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a  5 = noNetFx35;..
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd50: 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d  this.noNetFx40 =
fd60: 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20   noNetFx40;..   
fd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fd80: 73 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 6e 6f  s.noNetFx45 = no
fd90: 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20  NetFx45;..      
fda0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
fdb0: 6f 4e 65 74 46 78 34 35 31 20 3d 20 6e 6f 4e 65  oNetFx451 = noNe
fdc0: 74 46 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20  tFx451;..       
fdd0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
fde0: 56 73 32 30 30 35 20 3d 20 6e 6f 56 73 32 30 30  Vs2005 = noVs200
fdf0: 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
fe00: 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30      this.noVs200
fe10: 38 20 3d 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20  8 = noVs2008;.. 
fe20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fe30: 68 69 73 2e 6e 6f 56 73 32 30 31 30 20 3d 20 6e  his.noVs2010 = n
fe40: 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20  oVs2010;..      
fe50: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
fe60: 6f 56 73 32 30 31 32 20 3d 20 6e 6f 56 73 32 30  oVs2012 = noVs20
fe70: 31 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  12;..           
fe80: 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30       this.noVs20
fe90: 31 33 20 3d 20 6e 6f 56 73 32 30 31 33 3b 0d 0a  13 = noVs2013;..
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
feb0: 74 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e  this.noTrace = n
fec0: 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20  oTrace;..       
fed0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
fee0: 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73  Console = noCons
fef0: 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ole;..          
ff00: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67        this.noLog
ff10: 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20   = noLog;..     
ff20: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
ff30: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d  throwOnMissing =
ff40: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b   throwOnMissing;
ff50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ff60: 20 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20    this.whatIf = 
ff70: 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20  whatIf;..       
ff80: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65           this.de
ff90: 62 75 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20  bug = debug;..  
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
ffb0: 69 73 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72  is.verbose = ver
ffc0: 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  bose;..         
ffd0: 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66         this.conf
ffe0: 69 72 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a  irm = confirm;..
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10000 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
10010 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
10020 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
10030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10060 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
10070 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
10080 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 4d  Private Static M
10090 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
100a0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
100b0 69 63 20 76 6f 69 64 20 47 65 74 44 65 66 61 75  ic void GetDefau
100c0 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20  ltFileNames(..  
100d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
100e0 66 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f  f string directo
100f0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
10100 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
10110 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  coreFileName,.. 
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10130 65 66 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69  ef string linqFi
10140 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
10150 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
10160 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ing designerFile
10170 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
10180 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
10190 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
101a0 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
101b0 41 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c  Assembly == null
101c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
101d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
101e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
101f0 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61    directory = Pa
10200 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e  th.GetDirectoryN
10210 61 6d 65 28 74 68 69 73 41 73 73 65 6d 62 6c 79  ame(thisAssembly
10220 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20  .Location);.... 
10230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10240 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
10250 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
10260 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
10270 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
10280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10290 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65      coreFileName
102a0 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
102b0 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
102c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102d0 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69  Installer.CoreFi
102e0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
102f0 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71              linq
10300 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
10310 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
10320 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
10330 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65          Installe
10340 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  r.LinqFileName);
10350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10360 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65      designerFile
10370 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
10380 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ine(directory,..
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103a0 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65      Installer.De
103b0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
103c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
103d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
103e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10420 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
10430 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
10440 20 62 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f   bool CheckOptio
10450 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
10460 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 61      ref string a
10470 72 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rg..            
10480 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
10490 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
104a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73        string res
104b0 75 6c 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20  ult = arg;....  
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
104d0 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
104e0 4f 72 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29  OrEmpty(result))
104f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10500 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10510 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10530 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65   // NOTE: Remove
10540 20 61 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77 69   all leading swi
10550 74 63 68 20 63 68 61 72 73 2e 0d 0a 20 20 20 20  tch chars...    
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10570 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
10580 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
10590 20 72 65 73 75 6c 74 2e 54 72 69 6d 53 74 61 72   result.TrimStar
105a0 74 28 53 77 69 74 63 68 43 68 61 72 73 29 3b 0d  t(SwitchChars);.
105b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
105c0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
105e0 2f 20 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79  / NOTE: How many
105f0 20 63 68 61 72 73 20 77 65 72 65 20 72 65 6d 6f   chars were remo
10600 76 65 64 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  ved?..          
10610 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72    int count = ar
10640 67 2e 4c 65 6e 67 74 68 20 2d 20 72 65 73 75 6c  g.Length - resul
10650 74 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  t.Length;....   
10660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10670 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
10680 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
10690 3a 20 57 61 73 20 74 68 65 72 65 20 61 74 20 6c  : Was there at l
106a0 65 61 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20  east one?..     
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
106c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
106d0 20 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74         if (count
106e0 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
106f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10710 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10730 20 20 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72    // NOTE: Ok, r
10740 65 70 6c 61 63 65 20 74 68 65 69 72 20 6f 72 69  eplace their ori
10750 67 69 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20 20  ginal..         
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10770 2f 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74  /       argument
10780 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10790 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 20 20 20 20 20 20 20 61 72 67 20 3d 20 72 65 73         arg = res
107c0 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ult;....        
107d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107e0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
107f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
10800 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20 69  OTE: Yes, this i
10810 73 20 61 20 73 77 69 74 63 68 2e 0d 0a 20 20 20  s a switch...   
10820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10830 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10850 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
10860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10870 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10880 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10890 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
108a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
108b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
108c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
108d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10910 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
10920 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61  e static bool Ma
10930 74 63 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20  tchOption(..    
10940 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
10950 6e 67 20 61 72 67 2c 0d 0a 20 20 20 20 20 20 20  ng arg,..       
10960 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10970 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  option..        
10980 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
10990 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
109a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 61            if ((a
109b0 72 67 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28  rg == null) || (
109c0 6f 70 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29  option == null))
109d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
109e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
109f0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
10a00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
10a10 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 67  ring.Compare(arg
10a20 2c 20 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d  , 0, option, 0,.
10a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10a40 20 20 20 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c       arg.Length,
10a50 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
10a60 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
10a70 61 73 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20  ase) == 0;..    
10a80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
10a90 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
10aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
10af0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f  ate static bool?
10b00 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a   ParseBoolean(..
10b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b20 73 74 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20  string text..   
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
10b40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10b60 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
10b70 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d  lOrEmpty(text)).
10b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10ba0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c          bool val
10bb0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
10bc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62             if (b
10bd0 6f 6f 6c 2e 54 72 79 50 61 72 73 65 28 74 65 78  ool.TryParse(tex
10be0 74 2c 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a  t, out value))..
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
10c10 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
10c20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
10c30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10c40 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
10c50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10c60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
10c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10cb0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
10cc0 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  e static object 
10cd0 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20  ParseEnum(..    
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65              Type
10cf0 20 65 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20   enumType,..    
10d00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
10d10 6e 67 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20  ng text,..      
10d20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
10d30 6f 43 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20  oCase..         
10d40 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
10d50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10d60 20 20 20 20 20 20 20 20 20 69 66 20 28 28 65 6e           if ((en
10d70 75 6d 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20  umType == null) 
10d80 7c 7c 20 21 65 6e 75 6d 54 79 70 65 2e 49 73 45  || !enumType.IsE
10d90 6e 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  num)..          
10da0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10db0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
10dc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
10dd0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
10de0 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20  pty(text))..    
10df0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e10 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
10e20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 45 6e         return En
10e50 75 6d 2e 50 61 72 73 65 28 65 6e 75 6d 54 79 70  um.Parse(enumTyp
10e60 65 2c 20 74 65 78 74 2c 20 6e 6f 43 61 73 65 29  e, text, noCase)
10e70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10e80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
10ea0 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
10eb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ed0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
10ee0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
10ef0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
10f00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
10f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
10f30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10f40 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
10f50 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
10f60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
10f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10fa0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
10fb0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
10fc0 62 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74 68  blic Static Meth
10fd0 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
10fe0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 43   public static C
10ff0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 72 65  onfiguration Cre
11000 61 74 65 44 65 66 61 75 6c 74 28 29 0d 0a 20 20  ateDefault()..  
11010 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
11030 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
11040 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
11050 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
11060 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c  reFileName = nul
11070 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
11080 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46      string linqF
11090 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
110a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
110b0 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
110c0 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  FileName = null;
110d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
110e0 20 20 20 20 47 65 74 44 65 66 61 75 6c 74 46 69      GetDefaultFi
110f0 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  leNames(..      
11100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11110 66 20 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66  f directory, ref
11120 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72   coreFileName, r
11130 65 66 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c  ef linqFileName,
11140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11150 20 20 20 20 20 20 72 65 66 20 64 65 73 69 67 6e        ref design
11160 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  erFileName);....
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11180 72 65 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69  return new Confi
11190 67 75 72 61 74 69 6f 6e 28 74 68 69 73 41 73 73  guration(thisAss
111a0 65 6d 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72  embly, null, dir
111b0 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
111c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
111d0 65 46 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46  eFileName, linqF
111e0 69 6c 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65  ileName, designe
111f0 72 46 69 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c  rFileName, null,
11200 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
11210 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
11220 2c 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  , TraceOps.Debug
11230 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73  Format, TraceOps
11240 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20  .TraceFormat,.. 
11250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11260 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e     InstallFlags.
11270 44 65 66 61 75 6c 74 2c 20 54 72 61 63 65 50 72  Default, TracePr
11280 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 0d  iority.Default,.
11290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
112a0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
112b0 74 79 2e 44 65 66 61 75 6c 74 2c 20 66 61 6c 73  ty.Default, fals
112c0 65 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20  e, true, false, 
112d0 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20  false, false,.. 
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112f0 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c     false, false,
11300 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
11310 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
11320 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20  se, false,..    
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11340 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
11350 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
11360 65 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 20  e, false, true, 
11370 74 72 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  true,..         
11380 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
11390 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b  , false, false);
113a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
113b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
113c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
113d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
113e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
113f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11400 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
11410 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
11420 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
11430 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
11440 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
11450 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 72 6f   static bool Fro
11460 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  mArgs(..        
11470 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
11480 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20   args,..        
11490 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72          bool str
114a0 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ict,..          
114b0 20 20 20 20 20 20 72 65 66 20 43 6f 6e 66 69 67        ref Config
114c0 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
114d0 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
114e0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
114f0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
11500 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
11510 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11520 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
11530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11540 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11550 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67 73          if (args
11560 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11580 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
11590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
115a0 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
115b0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
115c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
115d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
115e0 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e 66 69  guration = Confi
115f0 67 75 72 61 74 69 6f 6e 2e 43 72 65 61 74 65 44  guration.CreateD
11600 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20 20  efault();....   
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11620 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72   int length = ar
11630 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  gs.Length;....  
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11650 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
11660 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65   = 0; index < le
11670 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ngth; index++)..
11680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11690 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
116b0 74 72 69 6e 67 20 61 72 67 20 3d 20 61 72 67 73  tring arg = args
116c0 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20  [index];....    
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11700 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6e  // NOTE: Skip an
11710 79 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  y argument that 
11720 69 73 20 6e 75 6c 6c 20 28 3f 29 20 6f 72 20 61  is null (?) or a
11730 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20  n empty..       
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11750 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67   //       string
11760 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11770 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
11780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11790 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
117a0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
117b0 61 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  arg))..         
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117d0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
117e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117f0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11810 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20      // NOTE: We 
11820 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 6d 6f 64  are going to mod
11830 69 66 79 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ify the original
11840 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20 20 20   argument..     
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11860 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79 20 72     //       by r
11870 65 6d 6f 76 69 6e 67 20 61 6e 79 20 6c 65 61 64  emoving any lead
11880 69 6e 67 20 6f 70 74 69 6f 6e 20 63 68 61 72 61  ing option chara
11890 63 74 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20  cters;..        
118a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118b0 2f 2f 20 20 20 20 20 20 20 74 68 65 72 65 66 6f  //       therefo
118c0 72 65 2c 20 77 65 20 75 73 65 20 61 20 6e 65 77  re, we use a new
118d0 20 73 74 72 69 6e 67 20 74 6f 20 68 6f 6c 64 20   string to hold 
118e0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11900 20 20 20 20 20 20 6d 6f 64 69 66 69 65 64 20 61        modified a
11910 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20  rgument...      
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11930 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
11950 72 69 6e 67 20 6e 65 77 41 72 67 20 3d 20 61 72  ring newArg = ar
11960 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  g;....          
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11990 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
119a0 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f  E: All the suppo
119b0 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  rted command lin
119c0 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a  e options must..
119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
119f0 20 62 65 67 69 6e 20 77 69 74 68 20 61 6e 20 6f   begin with an o
11a00 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72 20  ption character 
11a10 28 65 2e 67 2e 20 61 20 6d 69 6e 75 73 0d 0a 20  (e.g. a minus.. 
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
11a40 6f 72 20 66 6f 72 77 61 72 64 20 73 6c 61 73 68  or forward slash
11a50 29 3b 20 61 74 74 65 6d 70 74 20 74 6f 20 76 61  ); attempt to va
11a60 6c 69 64 61 74 65 20 74 68 61 74 0d 0a 20 20 20  lidate that..   
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 6f       //       no
11a90 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c 20 69  w.  If we fail i
11aa0 6e 20 73 74 72 69 63 74 20 6d 6f 64 65 2c 20 77  n strict mode, w
11ab0 65 20 61 72 65 20 64 6f 6e 65 3b 0d 0a 20 20 20  e are done;..   
11ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ad0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74       //       ot
11ae0 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20 73 6b  herwise, just sk
11af0 69 70 20 74 68 69 73 20 61 72 67 75 6d 65 6e 74  ip this argument
11b00 20 61 6e 64 20 61 64 76 61 6e 63 65 0d 0a 20 20   and advance..  
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
11b30 6f 20 74 68 65 20 6e 65 78 74 20 6f 6e 65 2e 0d  o the next one..
11b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11b50 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b70 20 20 20 20 20 69 66 20 28 21 43 68 65 63 6b 4f       if (!CheckO
11b80 70 74 69 6f 6e 28 72 65 66 20 6e 65 77 41 72 67  ption(ref newArg
11b90 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bc0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
11bd0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
11be0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
11bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c00 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
11c10 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
11c20 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
11c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c50 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
11c60 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
11c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c90 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f   "Unsupported co
11ca0 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d  mmand line argum
11cb0 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ent: {0}",..    
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
11ce0 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72  isplay(arg)), tr
11cf0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
11d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11d10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11d20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11d50 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
11d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d70 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
11d80 0d 0a 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 7d 0d 0a 0d 0a 20            }.... 
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11db0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dd0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20     // NOTE: All 
11de0 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63 6f  the supported co
11df0 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f  mmand line optio
11e00 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20  ns must..       
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e20 20 2f 2f 20 20 20 20 20 20 20 68 61 76 65 20 61   //       have a
11e30 20 76 61 6c 75 65 3b 20 74 68 65 72 65 66 6f 72   value; therefor
11e40 65 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 61 64  e, attempt to ad
11e50 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20  vance..         
11e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11e70 2f 20 20 20 20 20 20 20 74 6f 20 69 74 20 6e 6f  /       to it no
11e80 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c 2c 20  w.  If we fail, 
11e90 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a 20 20  we are done...  
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11eb0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ed0 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20    index++;....  
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ef0 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78 20        if (index 
11f00 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20  >= length)..    
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f40 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
11f50 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
11f60 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f80 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
11f90 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
11fa0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
11fd0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
11fe0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 20 20 20 20 20 20 22 4d 69 73 73 69 6e           "Missin
12010 67 20 76 61 6c 75 65 20 66 6f 72 20 6f 70 74 69  g value for opti
12020 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  on: {0}",..     
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
12050 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61  splay(arg)), tra
12060 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12090 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
120c0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
120d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120e0 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12100 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12120 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12140 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
12150 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 6f   textual value o
12160 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6c  f this command l
12170 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ine..           
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12190 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 0d 0a 20        option... 
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121d0 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 20 3d     string text =
121e0 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d   args[index];...
121f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12200 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12220 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69       // NOTE: Fi
12230 67 75 72 65 20 6f 75 74 20 77 68 69 63 68 20 63  gure out which c
12240 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
12250 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20 20 20 20  on this is..    
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12270 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28 62 61      //       (ba
12280 73 65 64 20 6f 6e 20 61 20 70 61 72 74 69 61 6c  sed on a partial
12290 20 6e 61 6d 65 20 6d 61 74 63 68 29 20 61 6e 64   name match) and
122a0 20 74 68 65 6e 20 74 72 79 0d 0a 20 20 20 20 20   then try..     
122b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122c0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69     //       to i
122d0 6e 74 65 72 70 72 65 74 20 74 68 65 20 74 65 78  nterpret the tex
122e0 74 75 61 6c 20 76 61 6c 75 65 20 61 73 20 74 68  tual value as th
122f0 65 20 63 6f 72 72 65 63 74 0d 0a 20 20 20 20 20  e correct..     
12300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12310 20 20 20 2f 2f 20 20 20 20 20 20 20 74 79 70 65     //       type
12320 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12330 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12350 20 20 20 20 20 20 20 69 66 20 28 4d 61 74 63 68         if (Match
12360 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
12370 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 29 29  configVersion"))
12380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12390 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
123a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123b0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
123c0 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67 56 65 72  ration.configVer
123d0 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20  sion = text;..  
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
12420 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63  ption(newArg, "c
12430 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20 20 20  onfirm"))..     
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12470 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
12480 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
12490 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124b0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
124c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12500 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
12510 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
12520 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12540 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
12550 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
12560 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
12570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12590 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
125a0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
125b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125d0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
125e0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
125f0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
12620 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
12630 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
12640 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12660 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
12670 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 20 20 20 69 66 20 28 73             if (s
126a0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
126d0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
126e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
12700 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12720 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12740 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
12750 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20 28 62 6f  on.confirm = (bo
12760 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
127a0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
127b0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 72 65  on(newArg, "core
127c0 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
127f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12800 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
12810 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  n.coreFileName =
12820 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
12830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12840 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
12850 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
12860 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12870 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 22 29  newArg, "debug")
12880 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12890 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
128c0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
128d0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
12900 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
12910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12920 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12930 20 20 20 20 20 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 65 72                er
12950 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
12960 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12990 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
129a0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
129b0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
129e0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
129f0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
12a30 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
12a40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a60 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
12a70 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
12a80 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ab0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
12ac0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ae0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b10 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
12b20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b40 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
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 7d 0d 0a 0d              }...
12b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
12b90 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
12ba0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
12bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12bc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
12bf0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
12c00 20 22 64 65 62 75 67 46 6f 72 6d 61 74 22 29 29   "debugFormat"))
12c10 0d 0a 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 7b 0d 0a 20 20 20            {..   
12c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c40 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
12c50 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d  ration.debugForm
12c60 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  at = text;..    
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
12c90 2e 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 63  .DebugFormat = c
12ca0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
12cb0 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ugFormat;..     
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
12cf0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12d00 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75  on(newArg, "debu
12d10 67 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20  gPriority"))..  
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
12d60 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  e = ParseEnum(..
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d90 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f  typeof(TracePrio
12da0 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75  rity), text, tru
12db0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dd0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
12de0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
12e30 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
12e40 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e60 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
12e70 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
12e80 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
12e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
12ec0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
12ed0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
12f00 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22   {0} value: {1}"
12f10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f30 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
12f40 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
12f50 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f80 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
12f90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fb0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fe0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
12ff0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13010 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
13020 20 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 7d 0d 0a 0d              }...
13040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13060 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
13070 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63  Priority = (Trac
13080 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b  ePriority)value;
13090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
130b0 61 63 65 4f 70 73 2e 44 65 62 75 67 50 72 69 6f  aceOps.DebugPrio
130c0 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61  rity = configura
130d0 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69  tion.debugPriori
130e0 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13110 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
13120 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
13130 41 72 67 2c 20 22 64 65 73 69 67 6e 65 72 46 69  Arg, "designerFi
13140 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20  leName"))..     
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13160 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13180 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
13190 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
131a0 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
131e0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
131f0 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72 65 63  n(newArg, "direc
13200 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20 20 20  tory"))..       
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
13250 72 65 63 74 6f 72 79 20 3d 20 74 65 78 74 3b 0d  rectory = text;.
13260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13280 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
13290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
132a0 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49 41 4c  / NOTE: *SPECIAL
132b0 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68 20 74  * Must refresh t
132c0 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d 0a 20  he file names.. 
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
132f0 20 20 20 20 68 65 72 65 20 62 65 63 61 75 73 65      here because
13300 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
13310 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..     
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13330 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
13340 68 61 73 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20  has changed...  
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
13370 20 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 73 74 72 69 6e 67            string
13390 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
133a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
133b0 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  reFileName;.... 
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
133e0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
133f0 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d  mpty(coreFileNam
13400 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d       coreFileNam
13430 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  e = Path.GetFile
13440 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65 4e 61 6d  Name(coreFileNam
13450 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
13480 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
13490 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
134c0 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61  FileName = Insta
134d0 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  ller.CoreFileNam
134e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
13510 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50  coreFileName = P
13520 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20  ath.Combine(..  
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13550 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65  nfiguration.dire
13560 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65 4e  ctory, coreFileN
13570 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13590 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71       string linq
135a0 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69  FileName = confi
135b0 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c  guration.linqFil
135c0 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135e0 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
135f0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
13600 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  linqFileName))..
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50  linqFileName = P
13640 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28  ath.GetFileName(
13650 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  linqFileName);..
13660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13680 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
13690 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e  rEmpty(linqFileN
136a0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136c0 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
136d0 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e  ame = Installer.
136e0 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  LinqFileName;...
136f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13710 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46  figuration.linqF
13720 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
13730 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  ombine(..       
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13750 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
13760 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79  ration.directory
13770 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  , linqFileName);
13780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137a0 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
137b0 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67  ileName = config
137c0 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72  uration.designer
137d0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
13800 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
13810 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ty(designerFileN
13820 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72 46         designerF
13850 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47  ileName = Path.G
13860 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73 69 67  etFileName(desig
13870 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  nerFileName);...
13880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
138a0 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
138b0 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69  Empty(designerFi
138c0 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
138d0 20 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 64 65 73 69 67 6e            design
138f0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  erFileName = Ins
13900 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46  taller.DesignerF
13910 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
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 63 6f 6e 66 69 67 75 72          configur
13940 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69  ation.designerFi
13950 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
13960 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13980 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
13990 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
139a0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
139b0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
139f0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
13a00 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 22 29 29  Arg, "install"))
13a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13a20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
13a50 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
13a60 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
13a90 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ab0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
13ae0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
13af0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
13b30 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
13b40 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
13b70 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
13b80 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13bb0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
13bc0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
13bd0 0d 0a 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 20 20 20 20 20                  
13bf0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
13c00 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
13c10 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
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 20 20 20 20 20 20 20 74                 t
13c40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
13c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ca0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
13cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
13d20 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c  iguration.instal
13d30 6c 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  l = (bool)value;
13d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13d50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d70 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
13d80 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
13d90 2c 20 22 69 6e 73 74 61 6c 6c 46 6c 61 67 73 22  , "installFlags"
13da0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13db0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
13de0 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45  t value = ParseE
13df0 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 73        typeof(Ins
13e20 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78 74  tallFlags), text
13e30 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  , true);....    
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
13e60 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ea0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
13eb0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
13ec0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
13f00 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
13f10 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f30 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
13f40 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
13f50 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
13f80 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20 66 6c  valid install fl
13f90 61 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d 22 2c  ags value: {0}",
13fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
13fd0 28 74 65 78 74 29 29 2c 20 74 72 61 63 65 43 61  (text)), traceCa
13fe0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14000 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14010 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
14020 20 20 20 20 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 72 65 74               ret
14040 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14070 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
14080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14090 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
140c0 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73  ion.installFlags
140d0 20 3d 20 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73   = (InstallFlags
140e0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14100 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14110 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
14120 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
14130 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e 71 46 69  (newArg, "linqFi
14140 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20  leName"))..     
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 20 7b 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 20 20                  
14180 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
14190 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 74  linqFileName = t
141a0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
141c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
141d0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
141e0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
141f0 77 41 72 67 2c 20 22 6c 6f 67 46 69 6c 65 4e 61  wArg, "logFileNa
14200 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14240 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46  nfiguration.logF
14250 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
14260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14270 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14290 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
142a0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
142b0 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d 0a   "noCompact"))..
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 62 6f 6f 6c 3f 20 76 61 6c         bool? val
14300 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
14310 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
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 69 66 20 28 76 61 6c 75          if (valu
14340 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 65 72 72 6f 72             error
14390 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
143a0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
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 20                  
143d0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
143e0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
143f0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14410 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14420 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
14430 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
14460 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
14470 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
144b0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
144c0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
144f0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
14560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14580 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
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 20 20 20 63 6f 6e 66 69 67            config
145d0 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63  uration.noCompac
145e0 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  t = (bool)value;
145f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14600 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14620 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
14630 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
14640 2c 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d  , "noConsole")).
14650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14660 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14680 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
14690 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
146a0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146c0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
146d0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
14720 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
14730 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
14770 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
14780 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
147b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
147c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
147f0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
14800 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
14810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14830 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14840 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
14850 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14880 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
14890 0a 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 20 20 20                  
148b0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
148f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14910 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
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 20 63 6f 6e 66 69             confi
14960 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f  guration.noConso
14970 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  le = (bool)value
14980 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14990 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149b0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
149c0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
149d0 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70 22 29 29  g, "noDesktop"))
149e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
149f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
14a20 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
14a30 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
14a60 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
14ab0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
14ac0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
14b00 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
14b10 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14b40 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
14b50 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14b80 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
14b90 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
14ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
14bd0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
14be0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14c10 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14c20 0d 0a 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 20 20                  
14c40 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
14c80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ca0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
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 20 63 6f 6e 66              conf
14cf0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 73 6b  iguration.noDesk
14d00 74 6f 70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  top = (bool)valu
14d10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
14d20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d40 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14d50 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
14d60 72 67 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d 0a 20  rg, "noLog")).. 
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
14db0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
14dc0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14de0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
14df0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e30 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
14e40 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
14e50 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
14e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
14e80 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
14e90 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
14ea0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
14eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ec0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14ed0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
14ee0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
14f10 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
14f20 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f50 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
14f60 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
14f70 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f90 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14fa0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
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 69                 i
14fd0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15000 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
15010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15030 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
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 63 6f 6e 66 69 67 75           configu
15080 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28  ration.noLog = (
15090 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
150e0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
150f0 4e 65 74 46 78 32 30 22 29 29 0d 0a 20 20 20 20  NetFx20"))..    
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15110 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
15140 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
15150 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
15180 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
151d0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
151e0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15200 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
15210 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
15220 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
15230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
15260 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
15270 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15290 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
152a0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
152b0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152e0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
152f0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
15300 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15320 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15330 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
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 69 66 20 28              if (
15360 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
15390 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
153a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
153c0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
15410 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20  ion.noNetFx20 = 
15420 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15440 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15460 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
15470 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
15480 6f 4e 65 74 46 78 33 35 22 29 29 0d 0a 20 20 20  oNetFx35"))..   
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154c0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
154d0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
154e0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
15510 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15530 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
15560 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
15570 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
155a0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
155b0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
155c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
155f0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
15600 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
15630 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
15640 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15670 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
15680 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
15690 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
156c0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
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 20 20 20 20 69 66 20               if 
156f0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
15720 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
15730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15750 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 20 20 20 20 20 20 7d 0d 0a 0d 0a 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 20 63 6f 6e 66 69 67 75 72 61         configura
157a0 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d  tion.noNetFx35 =
157b0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157f0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
15800 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
15810 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20  noNetFx40"))..  
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15830 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15850 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
15860 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
15870 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
158a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
158f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
15900 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
15930 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
15940 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
15950 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15970 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
15980 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
15990 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
159c0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
159d0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a00 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
15a10 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
15a20 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a40 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
15a50 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
15a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15a80 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
15ab0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ae0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 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 20 63 6f 6e 66 69 67 75 72          configur
15b30 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20  ation.noNetFx40 
15b40 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
15b90 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
15ba0 22 6e 6f 4e 65 74 46 78 34 35 22 29 29 0d 0a 20  "noNetFx45")).. 
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15be0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
15bf0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
15c00 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
15c30 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c70 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
15c80 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
15c90 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
15cc0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
15cd0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
15ce0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15d10 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
15d20 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d40 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
15d50 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
15d60 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d90 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
15da0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
15db0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
15de0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15e10 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
15e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e70 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
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 20 63 6f 6e 66 69 67 75           configu
15ec0 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35  ration.noNetFx45
15ed0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
15ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15ef0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f10 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
15f20 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
15f30 20 22 6e 6f 4e 65 74 46 78 34 35 31 22 29 29 0d   "noNetFx451")).
15f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15f50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f70 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
15f80 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
15f90 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
15fc0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fe0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16000 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
16010 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
16020 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16050 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
16060 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
16070 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16090 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
160a0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
160b0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
160e0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
160f0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
16100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16120 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
16130 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
16140 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16170 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
16180 0a 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 20 20 20 20                  
161a0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
161e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
161f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16200 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
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 20 20 63 6f 6e 66 69             confi
16250 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
16260 34 35 31 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  451 = (bool)valu
16270 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
162b0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
162c0 72 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65  rg, "noRuntimeVe
162d0 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20  rsion"))..      
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16310 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
16320 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
16330 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
16360 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16380 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
163b0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
163c0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
163f0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
16400 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16430 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16440 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16450 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
16480 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
16490 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
164c0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
164d0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
164e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16500 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
16510 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16530 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
16540 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
16550 20 20 20 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 72 65 74 75 72             retur
16570 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
16580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16590 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
165a0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
165f0 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  n.noRuntimeVersi
16600 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  on = (bool)value
16610 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16620 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
16650 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
16660 67 2c 20 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a  g, "noTrace"))..
16670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16680 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
166b0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
166c0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166e0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
166f0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
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 7b 0d 0a 20 20 20 20 20          {..     
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16730 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
16740 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
16750 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16780 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
16790 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
167a0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
167b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
167d0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
167e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
16810 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
16820 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16850 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
16860 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
16870 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
168a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
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 20 20 20 20 20 20 20 20 20                  
168d0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
16910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16930 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16970 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
16980 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20  uration.noTrace 
16990 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
169e0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
169f0 22 6e 6f 56 73 32 30 30 35 22 29 29 0d 0a 20 20  "noVs2005"))..  
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
16a40 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
16a50 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a70 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
16a80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16aa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ac0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
16ad0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
16ae0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16b10 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
16b20 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16b30 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b50 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
16b60 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
16b70 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
16ba0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
16bb0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16be0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
16bf0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
16c00 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16c30 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
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 20 69 66                if
16c60 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
16c90 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
16ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cc0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
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 63 6f 6e 66 69 67 75 72          configur
16d10 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d  ation.noVs2005 =
16d20 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
16d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
16d70 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
16d80 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20  noVs2008"))..   
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16da0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dc0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
16dd0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
16de0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
16e10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
16e60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
16e70 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
16ea0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
16eb0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
16ec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ee0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
16ef0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
16f00 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
16f30 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
16f40 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
16f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f70 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
16f80 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
16f90 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fb0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16fc0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
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 20 20 69 66 20               if 
16ff0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
17020 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
17050 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
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 63 6f 6e 66 69 67 75 72 61         configura
170a0 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20  tion.noVs2008 = 
170b0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170f0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
17100 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
17110 6f 56 73 32 30 31 30 22 29 29 0d 0a 20 20 20 20  oVs2010"))..    
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
17160 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
17170 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17190 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
171a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
171f0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
17200 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17220 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
17230 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
17240 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
17250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17270 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
17280 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
17290 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172b0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
172c0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
172d0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17300 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
17310 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
17320 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17340 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17350 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
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 20 20 69 66 20 28              if (
17380 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
173b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
173e0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17400 20 20 20 20 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74        configurat
17430 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28  ion.noVs2010 = (
17440 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17480 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
17490 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
174a0 56 73 32 30 31 32 22 29 29 0d 0a 20 20 20 20 20  Vs2012"))..     
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174e0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
174f0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
17500 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17520 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
17530 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17550 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
17580 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
17590 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175b0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
175c0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
175d0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
175e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17600 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
17610 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
17620 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17640 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
17650 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
17660 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
17690 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
176a0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
176b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
176e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 20 20 69 66 20 28 73             if (s
17710 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17730 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
17740 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17760 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17770 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17790 20 20 20 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69       configurati
177c0 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 28 62  on.noVs2012 = (b
177d0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17810 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
17820 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
17830 73 32 30 31 33 22 29 29 0d 0a 20 20 20 20 20 20  s2013"))..      
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17850 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
17880 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
17890 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
178c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17900 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
17910 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
17920 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17940 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
17950 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
17960 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
179a0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
179b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
179e0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
179f0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
17a20 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
17a30 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
17a40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a60 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
17a70 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
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 20 20 69 66 20 28 73 74            if (st
17aa0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ac0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
17ad0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17af0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
17b00 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b20 20 20 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
17b50 6e 2e 6e 6f 56 73 32 30 31 33 20 3d 20 28 62 6f  n.noVs2013 = (bo
17b60 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
17ba0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
17bb0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 70 65 72 55  on(newArg, "perU
17bc0 73 65 72 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ser"))..        
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
17c00 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
17c10 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
17c20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c40 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
17c50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c90 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
17ca0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
17cb0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cd0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
17ce0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
17cf0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
17d30 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
17d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
17d70 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
17d80 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
17db0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
17dc0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
17dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
17e00 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
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 20 69 66 20 28 73 74 72 69          if (stri
17e30 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
17e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
17e60 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e80 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
17e90 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17eb0 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
17ee0 70 65 72 55 73 65 72 20 3d 20 28 62 6f 6f 6c 29  perUser = (bool)
17ef0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f10 7d 0d 0a 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 65 6c 73 65 20             else 
17f30 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
17f40 6e 65 77 41 72 67 2c 20 22 72 65 67 69 73 74 72  newArg, "registr
17f50 79 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20  yVersion"))..   
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f90 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
17fa0 6e 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  n.registryVersio
17fb0 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  n = text;..     
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
17ff0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
18000 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69  on(newArg, "stri
18010 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ct"))..         
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
18050 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
18060 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
18070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18090 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
180a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
180c0 0d 0a 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 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
180f0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
18100 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
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 54 72 61 63 65 50 72 69 6f         TracePrio
18130 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
18140 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
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 20 20                  
18170 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
18180 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
18190 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
181c0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
181d0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
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 46 6f 72 44 69             ForDi
18200 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
18210 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18240 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
18250 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
18280 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
182b0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
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 63 6f 6e 74 69 6e 75           continu
182e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20   // NOTE: Allow 
18350 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
18360 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20   arguments to.. 
18370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18380 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
18390 20 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 65      override the
183a0 20 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65   "strictness" se
183b0 74 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  tting..         
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 76     //       prov
183e0 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  ided by our call
183f0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er...           
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18410 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18430 20 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29   strict = (bool)
18440 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18470 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
18480 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
18490 6e 65 77 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e  newArg, "throwOn
184a0 4d 69 73 73 69 6e 67 22 29 29 0d 0a 20 20 20 20  Missing"))..    
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184c0 20 20 20 20 7b 0d 0a 20 20 20 20 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
184f0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
18500 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18520 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
18530 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
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 65 72 72 6f 72 20 3d 20 54         error = T
18580 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
18590 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
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 54 72 61 63              Trac
185c0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
185d0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
185e0 0d 0a 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 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
18610 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
18620 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
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 22 49 6e 76 61 6c 69           "Invali
18650 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
18660 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
186a0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
186b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
186c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186d0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
186e0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
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 20 20 20 69 66 20 28              if (
18710 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18740 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
18770 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
187c0 69 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ion.throwOnMissi
187d0 6e 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ng = (bool)value
187e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
187f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
18820 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
18830 67 2c 20 22 74 72 61 63 65 46 6f 72 6d 61 74 22  g, "traceFormat"
18840 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
18850 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
18880 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f  guration.traceFo
18890 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20  rmat = text;..  
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188b0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
188c0 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d  ps.TraceFormat =
188d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74   configuration.t
188e0 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  raceFormat;..   
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18900 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18920 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
18930 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72  tion(newArg, "tr
18940 61 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a  acePriority"))..
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
18990 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28  lue = ParseEnum(
189a0 0d 0a 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 74 79 70 65 6f 66 28 54 72 61 63 65 50 72    typeof(TracePr
189d0 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74  iority), text, t
189e0 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rue);....       
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a00 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
18a10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a30 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
18a60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
18a70 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
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 20 20 20 20 54 72 61               Tra
18aa0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
18ab0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
18ac0 2c 0d 0a 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 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
18af0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
18b00 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
18b30 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31  id {0} value: {1
18b40 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
18b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b60 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
18b70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
18b80 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bb0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
18bc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
18bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
18c20 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c40 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
18c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18c70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18c90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
18ca0 63 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72  cePriority = (Tr
18cb0 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75  acePriority)valu
18cc0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72  TraceOps.TracePr
18cf0 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75  iority = configu
18d00 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f  ration.tracePrio
18d10 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
18d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d40 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
18d50 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
18d60 65 77 41 72 67 2c 20 22 76 65 72 62 6f 73 65 22  ewArg, "verbose"
18d70 29 29 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 7b 0d 0a 20              {.. 
18d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18da0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
18db0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
18dc0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18de0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18df0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18e20 20 20 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 20 65                 e
18e40 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
18e50 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
18e90 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
18ea0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
18ed0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
18ee0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f10 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
18f20 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
18f30 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f50 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
18f60 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
18f70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fa0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
18fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
18fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
19010 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19030 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
19040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
19080 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62  nfiguration.verb
19090 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ose = (bool)valu
190a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
190b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
190e0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
190f0 72 67 2c 20 22 76 73 56 65 72 73 69 6f 6e 53 75  rg, "vsVersionSu
19100 66 66 69 78 22 29 29 0d 0a 20 20 20 20 20 20 20  ffix"))..       
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19120 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 73  configuration.vs
19150 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20  VersionSuffix = 
19160 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
19170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19190 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
191a0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
191b0 65 77 41 72 67 2c 20 22 77 68 61 74 49 66 22 29  ewArg, "whatIf")
191c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
191d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
19200 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
19210 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19230 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
19240 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19260 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 20 65 72                er
19290 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
192a0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
192b0 20 20 20 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 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
192e0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
192f0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
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 20 20 20 74 72 61               tra
19320 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
19330 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
19370 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
19380 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
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 46 6f 72 44 69 73 70 6c 61         ForDispla
193b0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
193c0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
19400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19420 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19450 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19460 3b 0d 0a 0d 0a 20 20 20 20 20 20 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
194b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
194d0 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49  figuration.whatI
194e0 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  f = (bool)value;
194f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19500 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19520 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
19530 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
19540 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20  , "wow64"))..   
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19580 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
19590 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
195a0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195c0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
195d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
19620 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
19630 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19660 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
19670 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
19680 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
196b0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
196c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
196f0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
19700 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
19740 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
19750 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
19780 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
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 69 66 20               if 
197b0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
197e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
197f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19810 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
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 63 6f 6e 66 69 67 75 72 61         configura
19860 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f  tion.wow64 = (bo
19870 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19890 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
198b0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
198c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
198f0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
19900 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19920 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
19930 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
19940 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
19950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19970 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
19980 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
19990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199b0 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f   "Unsupported co
199c0 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f  mmand line optio
199d0 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  n: {0}",..      
199e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
19a00 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63  play(arg)), trac
19a10 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
19a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
19a40 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
19a70 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19aa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19ac0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
19b00 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
19b10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19b20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
19b30 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
19b40 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
19b50 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
19b80 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
19b90 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72   e, traceCategor
19ba0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
19bb0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
19bc0 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f   = "Failed to mo
19bd0 64 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69  dify configurati
19be0 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  on.";..         
19bf0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19c00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19c10 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
19c20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19c30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19c80 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
19c90 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
19ca0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
19cb0 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
19cc0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
19cd0 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a   bool Process(..
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cf0 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a  string[] args,..
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d10 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
19d20 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
19d40 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
19d50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
19d60 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
19d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
19db0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19dd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
19de0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
19df0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
19e20 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72  Invalid configur
19e30 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
19e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
19e90 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20  sembly assembly 
19ea0 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
19eb0 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20  assembly;....   
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ed0 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d   if (assembly ==
19ee0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
19f20 49 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79  Invalid assembly
19f30 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .";..           
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
19f50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19f80 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
19f90 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72  nfiguration.noTr
19fa0 61 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ace)..          
19fb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
19fe0 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26  uration.noLog &&
19ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1a010 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
1a020 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ty(configuration
1a030 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  .logFileName))..
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a050 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a090 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1a0a0 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  Use the default 
1a0b0 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a  log file name...
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1a100 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
1a110 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69  eName = GetLogFi
1a120 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  leName(..       
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a140 20 20 20 20 20 20 20 20 20 22 74 72 61 63 65 22           "trace"
1a150 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1a160 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1a170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a180 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1a190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a1c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a1e0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
1a1f0 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20  oConsole)..     
1a200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a210 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a250 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65    // NOTE: In ve
1a260 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75  rbose mode, debu
1a270 67 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d  g output (that m
1a280 65 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20  eets..          
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63    //       the c
1a2b0 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69  onfigured priori
1a2c0 74 79 20 63 72 69 74 65 72 69 61 29 20 77 69 6c  ty criteria) wil
1a2d0 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  l be..          
1a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2f0 20 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c    //       displ
1a300 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73  ayed to the cons
1a310 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ole; otherwise, 
1a320 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a340 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70     //       outp
1a350 75 74 20 28 74 68 61 74 20 6d 65 65 74 73 20 74  ut (that meets t
1a360 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72  he configured pr
1a370 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69      //       cri
1a3a0 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64  teria) will be d
1a3b0 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20  isplayed to the 
1a3c0 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20  console...      
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a400 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
1a410 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a  uration.debug)..
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a430 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a460 2f 0d 0a 20 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 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20     // NOTE: Add 
1a490 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63  the console trac
1a4a0 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68  e listener to th
1a4b0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4d0 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74     //       list
1a4e0 20 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e   of trace listen
1a4f0 65 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62  ers maintained b
1a500 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a520 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
1a530 54 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28  TraceOps class (
1a540 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67  i.e. only messag
1a550 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a570 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61      //       tha
1a580 74 20 6d 65 65 74 20 74 68 65 20 64 65 62 75 67  t meet the debug
1a590 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62   priority will b
1a5a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e     //       seen
1a5d0 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29   on the console)
1a5e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1a630 53 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e  SetupDebugListen
1a640 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ers();..        
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a660 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1a6f0 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e  OTE: Add the con
1a700 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65  sole trace liste
1a710 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ner to the..    
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a730 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a740 20 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69       list of bui
1a750 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74  lt-in trace list
1a760 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20  eners (i.e...   
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a780 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a790 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61        only messa
1a7a0 67 65 73 20 74 68 61 74 20 6d 65 65 74 20 74 68  ges that meet th
1a7b0 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  e trace..       
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7d0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1a7e0 20 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20    priority will 
1a7f0 62 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63  be seen on the c
1a800 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20  onsole)...      
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a820 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1a850 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64  ace.Listeners.Ad
1a860 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61  d(new ConsoleTra
1a870 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a  ceListener());..
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1a8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
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 69 66 20 28 21 63 6f 6e 66         if (!conf
1a930 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20  iguration.noLog 
1a940 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
1a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a960 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
1a970 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74  Empty(configurat
1a980 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
1a990 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a9a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 54 72 61 63 65 2e            Trace.
1a9d0 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65  Listeners.Add(ne
1a9e0 77 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63  w TextWriterTrac
1a9f0 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20  eListener(..    
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1aa20 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
1aa30 65 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20  eName));....    
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa50 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa70 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1aa80 20 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65   Technically, we
1aa90 20 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67   created the log
1aaa0 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...        
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aac0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aae0 20 20 20 20 66 69 6c 65 73 43 72 65 61 74 65 64      filesCreated
1aaf0 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1ab40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ab50 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75       // NOTE: Du
1ab60 6d 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  mp the configura
1ab70 74 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65  tion now in case
1ab80 20 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20   we need to..   
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 20 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c   //       troubl
1abb0 65 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65  eshoot any issue
1abc0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
1abd0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1abe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abf0 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
1ac00 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  n.debugPriority 
1ac10 3c 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  <= TracePriority
1ac20 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20  .Medium)..      
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac40 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1ac50 44 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61  Dump(debugCallba
1ac60 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ck);....        
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ac80 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
1ac90 61 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54  acePriority <= T
1aca0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1acb0 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ium)..          
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1acd0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70  nfiguration.Dump
1ace0 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b  (traceCallback);
1acf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ad00 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68  // NOTE: Show wh
1ad30 65 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69  ere we are runni
1ad40 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20  ng from and how 
1ad50 77 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20  we were..       
1ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1ad70 20 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a        invoked...
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad90 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1adb0 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73  ng location = as
1adc0 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b  sembly.Location;
1add0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ade0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1adf0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1ae00 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1ae10 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  iumLow,..       
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae30 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1ae40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1ae50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae70 20 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20         "Running 
1ae80 65 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b  executable is: {
1ae90 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
1aea0 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20  location)),..   
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1aed0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1aef0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1af00 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1af10 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20  .MediumLow,..   
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af30 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1af40 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1af50 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1af60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1af70 20 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67             "Orig
1af80 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  inal command lin
1af90 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  e is: {0}",..   
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74       Environment
1afc0 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74  .CommandLine), t
1afd0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1afe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aff0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
1b000 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
1b010 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
1b020 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  mLow,..         
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1b040 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1b050 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1b060 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b080 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72       "Running pr
1b090 6f 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20  ocess is {0}.", 
1b0a0 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29  Is64BitProcess()
1b0b0 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0d0 22 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62  "64-bit" : "32-b
1b0e0 69 74 22 29 2c 20 74 72 61 63 65 43 61 74 65 67  it"), traceCateg
1b0f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1b110 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
1b120 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b170 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
1b180 74 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20  the debugger is 
1b190 61 74 74 61 63 68 65 64 20 61 6e 64 20 57 68 61  attached and Wha
1b1a0 74 2d 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20  t-If mode..     
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1c0 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 5b     //       is [
1b1d0 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69  now] disabled, i
1b1e0 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d  ssue a warning..
1b1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b200 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 20 20 20 20 20 69 66 20 28 44 65 62 75 67 67 65       if (Debugge
1b230 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20  r.IsAttached).. 
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b250 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1b260 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1b270 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1b280 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1b2b0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1b2c0 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72              "For
1b2f0 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c  ced to disable \
1b300 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
1b310 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20  with " +..      
1b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b330 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67            "debug
1b340 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20  ger attached.", 
1b350 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1b360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b370 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1b380 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1b390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b3a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1b3d0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1b3e0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
1b3f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1b410 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1b420 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
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 20 20 22 4e 6f 20 61 63            "No ac
1b450 74 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c  tual changes wil
1b460 6c 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69  l be made to thi
1b470 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  s " +..         
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b490 20 20 20 22 73 79 73 74 65 6d 20 62 65 63 61 75     "system becau
1b4a0 73 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d  se \"what-if\" m
1b4b0 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22  ode is enabled."
1b4c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b4e0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1b520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b530 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
1b540 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
1b550 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d  e has not been m
1b560 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  anually..       
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1b580 20 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20        confirmed 
1b590 28 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78  (i.e. via the ex
1b5a0 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c  plicit command l
1b5b0 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ine..           
1b5c0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1b5d0 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20    option), then 
1b5e0 73 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20  stop processing 
1b5f0 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65  now.  We enforce
1b600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b610 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
1b620 68 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74  his rule so that
1b630 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63   simply double-c
1b640 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20  licking the..   
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b660 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74   //       execut
1b670 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65  able will not re
1b680 73 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e  sult in any chan
1b690 67 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20  ges being..     
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b6b0 2f 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20  /       made to 
1b6c0 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20  the system...   
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6e0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1b6f0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
1b700 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66  nfiguration.conf
1b710 69 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  irm)..          
1b720 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b740 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61       error = "Ca
1b750 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74  nnot continue, t
1b760 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f  he \"confirm\" o
1b770 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20  ption is " +..  
1b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b790 20 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20 65            "not e
1b7a0 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20  nabled.";....   
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1b7d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b7e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b800 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b830 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1b840 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
1b850 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1b870 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1b880 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
1b890 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8b0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1b8c0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1b8d0 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67  k, e, traceCateg
1b8e0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1b900 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
1b910 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72  process configur
1b920 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
1b930 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b950 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1b960 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1b970 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1b980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1b9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
1b9d0 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
1b9e0 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
1b9f0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
1ba00 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
1ba10 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75  tic bool CheckRu
1ba20 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20  ntimeVersion(.. 
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1ba40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
1ba50 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1ba70 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
1ba80 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1ba90 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1bad0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1bae0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1baf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1bb00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1bb10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1bb20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb40 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
1bb50 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61  nvalid configura
1bb60 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
1bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1bbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bbd0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68       // NOTE: Wh
1bbe0 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  at version of th
1bbf0 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68  e runtime was th
1bc00 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29  e core (primary)
1bc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bc20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1bc30 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64  ssembly compiled
1bc40 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22   against (e.g. "
1bc50 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a  v2.0.50727" or..
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34      //       "v4
1bc80 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20  .0.30319")...   
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bca0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1bcb0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1bcc0 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
1bcd0 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61  Version = GetIma
1bce0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1bcf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1bd00 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1bd10 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
1bd20 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bd40 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1bd50 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1bd60 57 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74  We allow the act
1bd70 75 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ual image runtim
1bd80 65 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65  e checking to be
1bd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bda0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
1bdb0 79 70 61 73 73 65 64 20 76 69 61 20 74 68 65 20  ypassed via the 
1bdc0 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  "-noRuntimeVersi
1bdd0 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  on" command line
1bde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bdf0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
1be00 70 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d  ption.  The comm
1be10 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20  and line option 
1be20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d  is intended for.
1be30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1be40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
1be50 70 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a  pert use only...
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be70 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1be80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1be90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1bea0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d  RuntimeVersion).
1beb0 0a 20 20 20 20 20 20 20 20 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 20 20 20 20 20 20 20 20                  
1bee0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1bef0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1bf00 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
1bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1bf30 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1bf40 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1bf50 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf70 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73      "Assembly is
1bf80 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
1bf90 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1bfa0 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20   {0}; " +..     
1bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfc0 20 20 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c         "however,
1bfd0 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65   installation re
1bfe0 73 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64  strictions based
1bff0 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20   on this " +..  
1c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c010 20 20 20 20 20 20 20 20 20 20 22 66 61 63 74 20            "fact 
1c020 68 61 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c  have been disabl
1c030 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61  ed via the comma
1c040 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20  nd line.",..    
1c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c060 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67          coreImag
1c070 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1c080 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1c090 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1c0b0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c0d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c0e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c100 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63  // TODO: Restric
1c110 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  t the configurat
1c120 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69  ion based on whi
1c130 63 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20  ch image..      
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c150 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76         runtime v
1c160 65 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d  ersions (which m
1c170 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72  ore-or-less corr
1c180 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20  espond..        
1c190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1c1a0 20 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61       to .NET Fra
1c1b0 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29  mework versions)
1c1c0 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62   are supported b
1c1d0 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  y the..         
1c1e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1c1f0 20 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20      versions of 
1c200 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68  Visual Studio th
1c210 61 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64  at are installed
1c220 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c230 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c250 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
1c260 4f 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67  OrEmpty(coreImag
1c270 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1c280 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c290 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2b0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
1c2c0 69 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61  id core file ima
1c2d0 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69  ge runtime versi
1c2e0 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1c300 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c330 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1c340 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d  (String.Equals(.
1c350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
1c370 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  eImageRuntimeVer
1c380 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65  sion, CLRv2Image
1c390 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d  RuntimeVersion,.
1c3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
1c3c0 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
1c3d0 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20  dinal))..       
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c400 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c420 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
1c430 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75   the CLR v2.0 ru
1c440 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  ntime, make sure
1c450 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20   we disable..   
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
1c480 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65  y attempt to use
1c490 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74   it for things t
1c4a0 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20  hat require..   
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
1c4d0 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
1c4e0 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  ed for the CLR v
1c4f0 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20  4.0.  It is..   
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e       //       un
1c520 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20  certain if this 
1c530 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72  is actually a pr
1c540 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20  oblem in..      
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c560 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74    //       pract
1c570 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76  ice as the CLR v
1c580 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64  4.0 can load and
1c590 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20   use an..       
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5b0 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62   //       assemb
1c5c0 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  ly compiled with
1c5d0 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68   the CLR v2.0; h
1c5e0 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20  owever,..       
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c600 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20   //       since 
1c610 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66  this project off
1c620 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75  ers both configu
1c630 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20  rations,..      
1c640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c650 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75    //       we cu
1c660 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77  rrently disallow
1c670 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d   this mismatch..
1c680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c690 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1c6c0 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74  on.noNetFx40 = t
1c6d0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1c6f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1c700 74 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx45 = true;.. 
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1c730 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31 20  tion.noNetFx451 
1c740 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1c770 6f 56 73 32 30 31 30 20 3d 20 74 72 75 65 3b 0d  oVs2010 = true;.
1c780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c790 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1c7a0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20  ration.noVs2012 
1c7b0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1c7e0 6f 56 73 32 30 31 33 20 3d 20 74 72 75 65 3b 0d  oVs2013 = true;.
1c7f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c800 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1c810 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1c820 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1c830 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20  Medium,..       
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1c860 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1c870 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1c880 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c8a0 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70  Assembly is comp
1c8b0 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45  iled for the .NE
1c8c0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c  T Framework {0},
1c8d0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8f0 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74    "support for t
1c900 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
1c910 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73  k {1} is now dis
1c920 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  abled.",..      
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c940 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67 65        CLRv2Image
1c950 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20  RuntimeVersion, 
1c960 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv4ImageRuntim
1c970 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1c9a0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72      else if (Str
1c9e0 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20  ing.Equals(..   
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca00 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61           coreIma
1ca10 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1ca20 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  , CLRv4ImageRunt
1ca30 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca50 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43           StringC
1ca60 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
1ca70 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
1ca80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caa0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cac0 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65  // NOTE: For the
1cad0 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69 6d   CLR v4.0 runtim
1cae0 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20  e, make sure we 
1caf0 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  disable..       
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb10 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74   //       any at
1cb20 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20  tempt to use it 
1cb30 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20  for things that 
1cb40 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20  require..       
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb60 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73   //       an ass
1cb70 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66  embly compiled f
1cb80 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e  or the CLR v2.0.
1cb90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cba0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbc0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1cbd0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20  ion.noNetFx20 = 
1cbe0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1cc00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
1cc10 65 74 46 78 33 35 20 3d 20 74 72 75 65 3b 0d 0a  etFx35 = true;..
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc30 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1cc40 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d  ation.noVs2005 =
1cc50 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1cc80 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a  Vs2008 = true;..
1cc90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cca0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1ccb0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1ccc0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1ccd0 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1cd00 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1cd10 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1cd20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1cd40 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
1cd50 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
1cd60 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20   Framework {0}, 
1cd70 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd90 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68   "support for th
1cda0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1cdb0 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61   {1} is now disa
1cdc0 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cde0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1cdf0 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv4ImageRuntim
1ce00 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
1ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1ce30 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e  ay(CLRv2ImageRun
1ce40 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  timeVersion)),..
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ce70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1cea0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cec0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1cee0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
1cef0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf10 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f   "unsupported co
1cf20 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75  re file image ru
1cf30 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 22 20  ntime version " 
1cf40 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1cf60 7b 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d  {0}, must be {1}
1cf70 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20   or {2}",..     
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf90 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1cfa0 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69  y(coreImageRunti
1cfb0 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfd0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1cfe0 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75  lay(CLRv2ImageRu
1cff0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a  ntimeVersion),..
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d010 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1d020 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67  isplay(CLRv4Imag
1d030 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1d040 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1d060 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1d090 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1d0a0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1d0b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1d0c0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1d0d0 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
1d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d100 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1d110 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1d120 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
1d130 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
1d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1d150 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1d160 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74  ceCallback, e, t
1d170 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1d180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d190 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
1d1a0 61 69 6c 65 64 20 74 6f 20 63 68 65 63 6b 20 69  ailed to check i
1d1b0 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72  mage runtime ver
1d1c0 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  sion.";..       
1d1d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1d1f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1d200 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1d210 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1d220 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1d230 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d270 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1d280 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1d290 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  lic Methods..   
1d2a0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1d2b0 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a  bool HasFlags(..
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2d0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68 61 73  InstallFlags has
1d2e0 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20  Flags,..        
1d2f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c          bool all
1d300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d310 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
1d320 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d330 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20      if (all)..  
1d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d350 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61    return ((insta
1d360 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61  llFlags & hasFla
1d370 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67 73 29  gs) == hasFlags)
1d380 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d390 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1d3b0 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61  urn ((installFla
1d3c0 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 21  gs & hasFlags) !
1d3d0 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e  = InstallFlags.N
1d3e0 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  one);..         
1d3f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1d400 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1d410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d440 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1d450 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1d460 6f 6c 20 49 73 4c 69 6e 71 53 75 70 70 6f 72 74  ol IsLinqSupport
1d470 65 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ed()..          
1d480 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d490 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1d4a0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1d4b0 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  : Return non-zer
1d4c0 6f 20 69 66 20 74 68 65 20 4c 49 4e 51 20 61 73  o if the LINQ as
1d4d0 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64 20 62 65  sembly should be
1d4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d4f0 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 63 65    //       proce
1d500 73 73 65 64 20 64 75 72 69 6e 67 20 74 68 65 20  ssed during the 
1d510 69 6e 73 74 61 6c 6c 2e 20 20 49 66 20 74 68 65  install.  If the
1d520 20 74 61 72 67 65 74 20 69 73 0d 0a 20 20 20 20   target is..    
1d530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1d540 20 20 20 20 20 56 69 73 75 61 6c 20 53 74 75 64       Visual Stud
1d550 69 6f 20 32 30 30 35 2c 20 74 68 69 73 20 73 68  io 2005, this sh
1d560 6f 75 6c 64 20 72 65 74 75 72 6e 20 7a 65 72 6f  ould return zero
1d570 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d580 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d590 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 21 6e         return !n
1d5a0 6f 4e 65 74 46 78 33 35 20 7c 7c 20 21 6e 6f 4e  oNetFx35 || !noN
1d5b0 65 74 46 78 34 30 20 7c 7c 20 21 6e 6f 4e 65 74  etFx40 || !noNet
1d5c0 46 78 34 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78  Fx45 || !noNetFx
1d5d0 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  451;..          
1d5e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1d5f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1d600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d630 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1d640 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
1d650 64 20 44 75 6d 70 28 0d 0a 20 20 20 20 20 20 20  d Dump(..       
1d660 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
1d670 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c  llback traceCall
1d680 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  back..          
1d690 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1d6a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d6b0 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63          if (trac
1d6c0 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c  eCallback != nul
1d6d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1d6e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d6f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d700 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1d710 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1d720 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d740 20 20 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20      "Assembly", 
1d750 46 6f 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d  ForDisplay(assem
1d760 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  bly)),..        
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d780 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1d790 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d7a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1d7b0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1d7c0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1d7d0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7f0 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46  "LogFileName", F
1d800 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c  orDisplay(logFil
1d810 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d830 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1d840 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d850 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d860 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1d870 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1d880 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8a0 20 20 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46    "Directory", F
1d8b0 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74  orDisplay(direct
1d8c0 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ory)),..        
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1d8f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d900 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1d910 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1d920 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1d930 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d950 22 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20  "CoreFileName", 
1d960 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46  ForDisplay(coreF
1d970 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1d9a0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1d9b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d9c0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1d9d0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1d9e0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da00 20 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d      "LinqFileNam
1da10 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  e", ForDisplay(l
1da20 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  inqFileName)),..
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da40 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1da50 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1da70 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1da80 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1da90 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dab0 20 20 20 20 20 20 20 20 22 44 65 73 69 67 6e 65          "Designe
1dac0 72 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44  rFileName", ForD
1dad0 69 73 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46  isplay(designerF
1dae0 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1db10 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1db20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1db30 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1db40 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1db50 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db70 20 20 20 20 22 52 65 67 69 73 74 72 79 56 65 72      "RegistryVer
1db80 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61  sion", ForDispla
1db90 79 28 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  y(registryVersio
1dba0 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1dbc0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1dbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dbe0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1dbf0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1dc00 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1dc10 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
1dc30 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 2c 20 46  onfigVersion", F
1dc40 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67  orDisplay(config
1dc50 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc70 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1dc80 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1dc90 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1dca0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1dcb0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1dcc0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dce0 20 20 20 20 22 56 73 56 65 72 73 69 6f 6e 53 75      "VsVersionSu
1dcf0 66 66 69 78 22 2c 20 46 6f 72 44 69 73 70 6c 61  ffix", ForDispla
1dd00 79 28 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  y(vsVersionSuffi
1dd10 78 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x)),..          
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1dd30 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1dd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dd50 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1dd60 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1dd70 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1dd80 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
1dda0 65 62 75 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72  ebugFormat", For
1ddb0 44 69 73 70 6c 61 79 28 64 65 62 75 67 46 6f 72  Display(debugFor
1ddc0 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  mat)),..        
1ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dde0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ddf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1de00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1de10 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1de20 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1de30 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de50 22 54 72 61 63 65 46 6f 72 6d 61 74 22 2c 20 46  "TraceFormat", F
1de60 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65 46  orDisplay(traceF
1de70 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20  ormat)),..      
1de80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de90 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1dea0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1deb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1dec0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1ded0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1dee0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df00 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22    "InstallFlags"
1df10 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73  , ForDisplay(ins
1df20 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20  tallFlags)),..  
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df40 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1df50 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1df70 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1df80 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1df90 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfb0 20 20 20 20 20 20 22 44 65 62 75 67 50 72 69 6f        "DebugPrio
1dfc0 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61  rity", ForDispla
1dfd0 79 28 64 65 62 75 67 50 72 69 6f 72 69 74 79 29  y(debugPriority)
1dfe0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1dff0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e000 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e020 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e030 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e040 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e050 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e060 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72 61              "Tra
1e070 63 65 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72  cePriority", For
1e080 44 69 73 70 6c 61 79 28 74 72 61 63 65 50 72 69  Display(tracePri
1e090 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20  ority)),..      
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0b0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e0c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e0d0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e0e0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1e0f0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1e100 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e120 20 20 22 50 65 72 55 73 65 72 22 2c 20 46 6f 72    "PerUser", For
1e130 44 69 73 70 6c 61 79 28 70 65 72 55 73 65 72 29  Display(perUser)
1e140 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e150 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e160 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e180 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e190 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e1a0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e1b0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73              "Ins
1e1d0 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61  tall", ForDispla
1e1e0 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20  y(install)),..  
1e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e200 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e210 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e230 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e240 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e250 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e270 20 20 20 20 20 20 22 57 6f 77 36 34 22 2c 20 46        "Wow64", F
1e280 6f 72 44 69 73 70 6c 61 79 28 77 6f 77 36 34 29  orDisplay(wow64)
1e290 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e2b0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e2e0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e2f0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e300 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e310 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 52              "NoR
1e320 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 2c 20  untimeVersion", 
1e330 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 52 75 6e  ForDisplay(noRun
1e340 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  timeVersion)),..
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e360 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e370 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e390 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1e3a0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1e3b0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3d0 20 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b 74          "NoDeskt
1e3e0 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  op", ForDisplay(
1e3f0 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20 20  noDesktop)),..  
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e410 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e420 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e440 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e450 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e460 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e480 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63 74        "NoCompact
1e490 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1e4a0 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20 20  Compact)),..    
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1e4d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1e4e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e4f0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1e500 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1e510 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e530 20 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22 2c      "NoNetFx20",
1e540 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65   ForDisplay(noNe
1e550 74 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20 20  tFx20)),..      
1e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e570 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e580 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e590 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e5a0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1e5b0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1e5c0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5e0 20 20 22 4e 6f 4e 65 74 46 78 33 35 22 2c 20 46    "NoNetFx35", F
1e5f0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46  orDisplay(noNetF
1e600 78 33 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  x35)),..        
1e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e620 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e630 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e640 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e650 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e660 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e670 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e690 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20 46 6f 72  "NoNetFx40", For
1e6a0 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34  Display(noNetFx4
1e6b0 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0)),..          
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e6d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e6f0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e700 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e710 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e720 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1e740 6f 4e 65 74 46 78 34 35 22 2c 20 46 6f 72 44 69  oNetFx45", ForDi
1e750 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 29  splay(noNetFx45)
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 4e 6f 4e              "NoN
1e7f0 65 74 46 78 34 35 31 22 2c 20 46 6f 72 44 69 73  etFx451", ForDis
1e800 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 31 29  play(noNetFx451)
1e810 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e820 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e830 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e850 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e860 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e870 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e880 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e890 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56              "NoV
1e8a0 73 32 30 30 35 22 2c 20 46 6f 72 44 69 73 70 6c  s2005", ForDispl
1e8b0 61 79 28 6e 6f 56 73 32 30 30 35 29 29 2c 0d 0a  ay(noVs2005)),..
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e8e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e900 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1e910 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1e920 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e940 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30          "NoVs200
1e950 38 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  8", ForDisplay(n
1e960 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20 20 20 20  oVs2008)),..    
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e980 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1e990 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1e9a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e9b0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1e9c0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1e9d0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9f0 20 20 20 20 22 4e 6f 56 73 32 30 31 30 22 2c 20      "NoVs2010", 
1ea00 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32  ForDisplay(noVs2
1ea10 30 31 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  010)),..        
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea30 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ea40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ea50 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1ea60 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1ea70 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ea80 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaa0 22 4e 6f 56 73 32 30 31 32 22 2c 20 46 6f 72 44  "NoVs2012", ForD
1eab0 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 32 29  isplay(noVs2012)
1eac0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1eae0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb00 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1eb10 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1eb20 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1eb30 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56              "NoV
1eb50 73 32 30 31 33 22 2c 20 46 6f 72 44 69 73 70 6c  s2013", ForDispl
1eb60 61 79 28 6e 6f 56 73 32 30 31 33 29 29 2c 0d 0a  ay(noVs2013)),..
1eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1eb90 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ebb0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1ebc0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1ebd0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebf0 20 20 20 20 20 20 20 20 22 4e 6f 54 72 61 63 65          "NoTrace
1ec00 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1ec10 54 72 61 63 65 29 29 2c 0d 0a 20 20 20 20 20 20  Trace)),..      
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec30 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1ec40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ec50 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ec60 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1ec70 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1ec80 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eca0 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20 46    "NoConsole", F
1ecb0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e 73  orDisplay(noCons
1ecc0 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ole)),..        
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ece0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ecf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ed00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1ed10 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1ed20 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ed30 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed50 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73 70  "NoLog", ForDisp
1ed60 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20 20  lay(noLog)),..  
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed80 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1ed90 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1edb0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1edc0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1edd0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edf0 20 20 20 20 20 20 22 54 68 72 6f 77 4f 6e 4d 69        "ThrowOnMi
1ee00 73 73 69 6e 67 22 2c 20 46 6f 72 44 69 73 70 6c  ssing", ForDispl
1ee10 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ay(throwOnMissin
1ee20 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  g)),..          
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ee40 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1ee50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee60 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1ee70 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1ee80 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1ee90 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 57                "W
1eeb0 68 61 74 49 66 22 2c 20 46 6f 72 44 69 73 70 6c  hatIf", ForDispl
1eec0 61 79 28 77 68 61 74 49 66 29 29 2c 0d 0a 20 20  ay(whatIf)),..  
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1eef0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ef10 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ef20 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1ef30 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef50 20 20 20 20 20 20 22 44 65 62 75 67 22 2c 20 46        "Debug", F
1ef60 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67 29  orDisplay(debug)
1ef70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ef90 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efb0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1efc0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1efd0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1efe0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 22 56 65 72              "Ver
1f000 62 6f 73 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  bose", ForDispla
1f010 79 28 76 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20  y(verbose)),..  
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f030 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1f040 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1f060 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1f070 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1f080 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0a0 20 20 20 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c        "Confirm",
1f0b0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
1f0c0 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  irm)),..        
1f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1f0f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f100 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f140 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1f150 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
1f160 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d  sembly != null).
1f170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1f1b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1f1c0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1f1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
1f1f0 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c 0d 0a 20  semblyTitle",.. 
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f210 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1f220 73 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c  splay(GetAssembl
1f230 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29  yTitle(assembly)
1f240 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f260 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1f270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f280 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1f290 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1f2a0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1f2b0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2d0 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
1f2e0 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22  lyConfiguration"
1f2f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1f310 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73  orDisplay(GetAss
1f320 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
1f330 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d  on(assembly))),.
1f340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1f360 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
1f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f380 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1f390 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1f3a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1f3b0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1f3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1f3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f420 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50  #region Public P
1f430 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
1f440 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41         private A
1f450 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
1f460 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1f470 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41  ublic Assembly A
1f480 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
1f490 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f4a0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1f4b0 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d  turn assembly; }
1f4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f4d0 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79    set { assembly
1f4e0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1f4f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f500 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1f510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f550 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1f560 76 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67 46  vate string logF
1f570 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
1f580 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1f590 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d  ing LogFileName.
1f5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5c0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67  get { return log
1f5d0 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1f5f0 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d   { logFileName =
1f600 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1f610 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f620 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f670 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1f680 74 65 20 73 74 72 69 6e 67 20 64 69 72 65 63 74  te string direct
1f690 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
1f6a0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1f6b0 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  Directory..     
1f6c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f6d0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1f6e0 72 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79  return directory
1f6f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f700 20 20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63       set { direc
1f710 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tory = value; }.
1f720 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1f740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f780 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1f790 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1f7a0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  coreFileName;.. 
1f7b0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1f7c0 63 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c  c string CoreFil
1f7d0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
1f7e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f7f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1f800 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  rn coreFileName;
1f810 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f820 20 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69      set { coreFi
1f830 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20  leName = value; 
1f840 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1f850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1f8b0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
1f8c0 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  g linqFileName;.
1f8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1f8e0 6c 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46  lic string LinqF
1f8f0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
1f900 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f910 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1f920 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  turn linqFileNam
1f930 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1f940 20 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71        set { linq
1f950 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
1f960 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f970 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f980 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f9d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1f9e0 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ing designerFile
1f9f0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
1fa00 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1fa10 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   DesignerFileNam
1fa20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
1fa30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fa40 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64    get { return d
1fa50 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
1fa60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1fa70 20 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e      set { design
1fa80 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c  erFileName = val
1fa90 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1faa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1fab0 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faf0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1fb00 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1fb10 74 72 69 6e 67 20 72 65 67 69 73 74 72 79 56 65  tring registryVe
1fb20 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
1fb30 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
1fb40 67 20 52 65 67 69 73 74 72 79 56 65 72 73 69 6f  g RegistryVersio
1fb50 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  n..            {
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 72    get { return r
1fb80 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 20  egistryVersion; 
1fb90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1fba0 20 20 20 73 65 74 20 7b 20 72 65 67 69 73 74 72     set { registr
1fbb0 79 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65  yVersion = value
1fbc0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fbd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1fbe0 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc20 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1fc30 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1fc40 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69 6f  ing configVersio
1fc50 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
1fc60 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f  public string Co
1fc70 6e 66 69 67 56 65 72 73 69 6f 6e 0d 0a 20 20 20  nfigVersion..   
1fc80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1fc90 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1fca0 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 56  { return configV
1fcb0 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20  ersion; }..     
1fcc0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1fcd0 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d   configVersion =
1fce0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1fcf0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fd00 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1fd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1fd50 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1fd60 74 65 20 73 74 72 69 6e 67 20 76 73 56 65 72 73  te string vsVers
1fd70 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20 20  ionSuffix;..    
1fd80 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1fd90 74 72 69 6e 67 20 56 73 56 65 72 73 69 6f 6e 53  tring VsVersionS
1fda0 75 66 66 69 78 0d 0a 20 20 20 20 20 20 20 20 20  uffix..         
1fdb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1fdc0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1fdd0 72 6e 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66  rn vsVersionSuff
1fde0 69 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ix; }..         
1fdf0 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 73 56         set { vsV
1fe00 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76  ersionSuffix = v
1fe10 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1fe20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1fe30 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1fe40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe70 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1fe80 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1fe90 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72   string debugFor
1fea0 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
1feb0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1fec0 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20  DebugFormat..   
1fed0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1fef0 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46 6f  { return debugFo
1ff00 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rmat; }..       
1ff10 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
1ff20 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c  ebugFormat = val
1ff30 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1ff40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ff50 20 20 20 20 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 2f 2f 2f  ////////////////
1ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1ffa0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1ffb0 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61  tring traceForma
1ffc0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
1ffd0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 72  public string Tr
1ffe0 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20  aceFormat..     
1fff0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20000 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20010 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d  return traceForm
20020 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  at; }..         
20030 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61         set { tra
20040 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65  ceFormat = value
20050 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20060 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20070 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
200c0 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 73       private Ins
200d0 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c  tallFlags instal
200e0 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20  lFlags;..       
200f0 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73 74       public Inst
20100 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c  allFlags Install
20110 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20  Flags..         
20120 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20130 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
20140 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b  rn installFlags;
20150 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20160 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c      set { instal
20170 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20  lFlags = value; 
20180 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
201a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
201f0 20 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65     private Trace
20200 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72  Priority debugPr
20210 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  iority;..       
20220 20 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63       public Trac
20230 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67 50  ePriority DebugP
20240 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
20250 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20260 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
20270 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69  turn debugPriori
20280 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ty; }..         
20290 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62         set { deb
202a0 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  ugPriority = val
202b0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
202c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
202d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
202e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20310 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20320 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54         private T
20330 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
20340 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20  cePriority;..   
20350 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20360 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 54 72  TracePriority Tr
20370 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20  acePriority..   
20380 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20390 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
203a0 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72  { return tracePr
203b0 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20  iority; }..     
203c0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
203d0 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d   tracePriority =
203e0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
203f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20400 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20450 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20460 74 65 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 3b  te bool perUser;
20470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
20480 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 55 73 65  blic bool PerUse
20490 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  r..            {
204a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
204b0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70    get { return p
204c0 65 72 55 73 65 72 3b 20 7d 0d 0a 20 20 20 20 20  erUser; }..     
204d0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
204e0 20 70 65 72 55 73 65 72 20 3d 20 76 61 6c 75 65   perUser = value
204f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20500 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20510 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20550 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20560 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
20570 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20  l install;..    
20580 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
20590 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20 20  ool Install..   
205a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
205b0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
205c0 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c  { return install
205d0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
205e0 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61       set { insta
205f0 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ll = value; }.. 
20600 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20610 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 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 0d  ///////////////.
20660 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20670 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f 77 36  rivate bool wow6
20680 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4;..            
20690 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f 77 36  public bool Wow6
206a0 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  4..            {
206b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
206c0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77    get { return w
206d0 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ow64; }..       
206e0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77           set { w
206f0 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ow64 = value; }.
20700 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20770 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
20780 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d  RuntimeVersion;.
20790 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
207a0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74 69  lic bool NoRunti
207b0 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  meVersion..     
207c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
207d0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
207e0 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d 65  return noRuntime
207f0 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20  Version; }..    
20800 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
20810 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  { noRuntimeVersi
20820 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  on = value; }.. 
20830 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
20850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
20890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
208a0 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44 65  rivate bool noDe
208b0 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20  sktop;..        
208c0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
208d0 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20 20  NoDesktop..     
208e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
208f0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20900 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f 70  return noDesktop
20910 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20920 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65 73       set { noDes
20930 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ktop = value; }.
20940 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20980 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
209b0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
209c0 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20  Compact;..      
209d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
209e0 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20 20  l NoCompact..   
209f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20a00 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
20a10 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70 61  { return noCompa
20a20 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ct; }..         
20a30 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43         set { noC
20a40 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b 20  ompact = value; 
20a50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ab0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20ac0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
20ad0 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20  noNetFx20;..    
20ae0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
20af0 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a 20  ool NoNetFx20.. 
20b00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20b20 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
20b30 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Fx20; }..       
20b40 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
20b50 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75 65  oNetFx20 = value
20b60 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20b70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20b80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
20b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20bd0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
20be0 6c 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20  l noNetFx35;..  
20bf0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
20c00 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 33 35 0d   bool NoNetFx35.
20c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c30 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
20c40 65 74 46 78 33 35 3b 20 7d 0d 0a 20 20 20 20 20  etFx35; }..     
20c50 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20c60 20 6e 6f 4e 65 74 46 78 33 35 20 3d 20 76 61 6c   noNetFx35 = val
20c70 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
20c80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20c90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cd0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20ce0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
20cf0 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a  ool noNetFx40;..
20d00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20d10 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34  ic bool NoNetFx4
20d20 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  0..            {
20d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20d40 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
20d50 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20  oNetFx40; }..   
20d60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
20d70 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76   { noNetFx40 = v
20d80 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20d90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20da0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20df0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20e00 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 3b   bool noNetFx45;
20e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
20e20 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
20e30 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x45..           
20e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20e50 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20e60 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d 0d 0a 20   noNetFx45; }.. 
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20e80 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 20 3d  et { noNetFx45 =
20e90 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20ea0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20eb0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20f00 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20f10 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34  te bool noNetFx4
20f20 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  51;..           
20f30 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
20f40 65 74 46 78 34 35 31 0d 0a 20 20 20 20 20 20 20  etFx451..       
20f50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20f60 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
20f70 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 31 3b  turn noNetFx451;
20f80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20f90 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
20fa0 78 34 35 31 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  x451 = value; }.
20fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21010 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
21020 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
21030 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20  Vs2005;..       
21040 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
21050 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20 20 20   NoVs2005..     
21060 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21070 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
21080 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 35 3b  return noVs2005;
21090 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
210a0 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
210b0 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  05 = value; }.. 
210c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
210d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
210e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21120 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
21130 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73  rivate bool noVs
21140 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  2008;..         
21150 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
21160 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20 20  oVs2008..       
21170 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21180 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
21190 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d  turn noVs2008; }
211a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
211b0 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 38    set { noVs2008
211c0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
211d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
211e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
211f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21230 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
21240 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30  vate bool noVs20
21250 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10;..           
21260 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56   public bool NoV
21270 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20 20  s2010..         
21280 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21290 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
212a0 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a  rn noVs2010; }..
212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212c0 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d  set { noVs2010 =
212d0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
212e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
212f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21340 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
21350 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32  te bool noVs2012
21360 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
21370 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
21380 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20  012..           
21390 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
213a0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
213b0 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a 20 20   noVs2012; }..  
213c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
213d0 74 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d 20 76  t { noVs2012 = v
213e0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
213f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21400 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21440 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21450 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
21460 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 3b 0d   bool noVs2013;.
21470 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21480 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31  lic bool NoVs201
21490 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  3..            {
214a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
214b0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
214c0 6f 56 73 32 30 31 33 3b 20 7d 0d 0a 20 20 20 20  oVs2013; }..    
214d0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
214e0 7b 20 6e 6f 56 73 32 30 31 33 20 3d 20 76 61 6c  { noVs2013 = val
214f0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
21500 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21510 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21550 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21560 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
21570 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20  ool noTrace;..  
21580 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
21590 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20   bool NoTrace.. 
215a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
215b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
215c0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72 61  t { return noTra
215d0 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ce; }..         
215e0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 54         set { noT
215f0 72 61 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  race = value; }.
21600 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21660 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
21670 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
21680 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20  Console;..      
21690 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
216a0 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20  l NoConsole..   
216b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
216c0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
216d0 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f  { return noConso
216e0 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  le; }..         
216f0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43         set { noC
21700 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20  onsole = value; 
21710 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21770 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
21780 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
21790 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20  noLog;..        
217a0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
217b0 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20 20  NoLog..         
217c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
217d0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
217e0 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20  rn noLog; }..   
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
21800 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65   { noLog = value
21810 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21820 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21830 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21870 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21880 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
21890 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
218a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
218b0 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68 72 6f 77  ublic bool Throw
218c0 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20  OnMissing..     
218d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
218e0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
218f0 72 65 74 75 72 6e 20 74 68 72 6f 77 4f 6e 4d 69  return throwOnMi
21900 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20  ssing; }..      
21910 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
21920 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d  throwOnMissing =
21930 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
21940 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21950 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
219a0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
219b0 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
219c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
219d0 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
219e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
219f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a00 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68 61  get { return wha
21a10 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  tIf; }..        
21a20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 68          set { wh
21a30 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  atIf = value; }.
21a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21aa0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
21ab0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 65   private bool de
21ac0 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bug;..          
21ad0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 44 65    public bool De
21ae0 62 75 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bug..           
21af0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21b00 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21b10 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20 20 20 20   debug; }..     
21b20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
21b30 20 64 65 62 75 67 20 3d 20 76 61 6c 75 65 3b 20   debug = value; 
21b40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21b50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ba0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
21bb0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
21bc0 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20  verbose;..      
21bd0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
21be0 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l Verbose..     
21bf0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21c00 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
21c10 72 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b 20  return verbose; 
21c20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
21c30 20 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73 65     set { verbose
21c40 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
21c50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21c60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
21cc0 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72  vate bool confir
21cd0 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m;..            
21ce0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66  public bool Conf
21cf0 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  irm..           
21d00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21d10 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21d20 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20   confirm; }..   
21d30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
21d40 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c   { confirm = val
21d50 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
21d60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
21d70 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
21d80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21d90 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
21da0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21df0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
21e00 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20  n FrameworkList 
21e10 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
21e20 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
21e30 61 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  ass FrameworkLis
21e40 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
21e50 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
21e60 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
21e70 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
21e80 20 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65 77     public Framew
21e90 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20 20  orkList()..     
21ea0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21eb0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
21ec0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
21ed0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21ee0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
21ef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
21f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f10 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
21f50 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
21f60 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
21f70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f        private Mo
21f80 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
21f90 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  otKey;..        
21fa0 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
21fb0 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b  egistryKey RootK
21fc0 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
21fd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21fe0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
21ff0 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20  rootKey; }..    
22000 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
22010 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75  { rootKey = valu
22020 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
22030 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22040 20 20 20 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 2f 2f 2f  ////////////////
22060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22080 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22090 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74        private St
220a0 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d  ringList names;.
220b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
220c0 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 4e  lic StringList N
220d0 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
220e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
220f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
22100 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20  n names; }..    
22110 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
22120 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b  { names = value;
22130 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22140 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22150 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22190 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
221a0 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73      private Vers
221b0 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b  ionMap versions;
221c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
221d0 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 20  blic VersionMap 
221e0 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20  Versions..      
221f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22200 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
22210 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20  eturn versions; 
22220 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
22230 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e     set { version
22240 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
22250 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22260 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
22290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
222b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
222c0 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74  ivate StringList
222d0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d   platformNames;.
222e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
222f0 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 50  lic StringList P
22300 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20  latformNames..  
22310 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
22330 20 7b 20 72 65 74 75 72 6e 20 70 6c 61 74 66 6f   { return platfo
22340 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20  rmNames; }..    
22350 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
22360 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20  { platformNames 
22370 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
22380 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22390 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
223a0 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
223b0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
223c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
223d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
223e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
223f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22410 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
22420 72 65 67 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c  region VsList Cl
22430 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
22440 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
22450 73 20 56 73 4c 69 73 74 0d 0a 20 20 20 20 20 20  s VsList..      
22460 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22470 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
22480 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
22490 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
224a0 20 56 73 4c 69 73 74 28 29 0d 0a 20 20 20 20 20   VsList()..     
224b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
224c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
224d0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
224e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
224f0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
22500 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
22510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22550 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22560 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
22570 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
22580 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
22590 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
225a0 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20   rootKey;..     
225b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
225c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f  ckRegistryKey Ro
225d0 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  otKey..         
225e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
225f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
22600 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20  rn rootKey; }.. 
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
22620 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76  et { rootKey = v
22630 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
22640 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22650 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22690 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
226a0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
226b0 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65 72   VersionList ver
226c0 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20  sions;..        
226d0 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
226e0 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73 0d  onList Versions.
226f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22710 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72  get { return ver
22720 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20  sions; }..      
22730 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
22740 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65  versions = value
22750 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
22760 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22770 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
22780 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
22790 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
227a0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
227b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
227c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22800 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
22810 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
22820 74 61 6e 74 20 44 61 74 61 0d 0a 20 20 20 20 20  tant Data..     
22830 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
22840 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65   string CoreFile
22850 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44  Name = "System.D
22860 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 3b  ata.SQLite.dll";
22870 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22880 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
22890 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53  inqFileName = "S
228a0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
228b0 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20  e.Linq.dll";..  
228c0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
228d0 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73 69 67  nst string Desig
228e0 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53  nerFileName = "S
228f0 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64  QLite.Designer.d
22900 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ll";..        pr
22910 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
22920 6e 67 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 20  ng ProviderName 
22930 3d 20 22 53 51 4c 69 74 65 20 44 61 74 61 20 50  = "SQLite Data P
22940 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20 20 20 20  rovider";..     
22950 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
22960 20 73 74 72 69 6e 67 20 50 72 6f 6a 65 63 74 4e   string ProjectN
22970 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
22980 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20  ta.SQLite";..   
22990 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
229a0 73 74 20 73 74 72 69 6e 67 20 4c 65 67 61 63 79  st string Legacy
229b0 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53  ProjectName = "S
229c0 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20  QLite";..       
229d0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
229e0 74 72 69 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e  tring InvariantN
229f0 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
22a00 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20  ta.SQLite";..   
22a10 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
22a20 73 74 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72  st string Factor
22a30 79 54 79 70 65 4e 61 6d 65 20 3d 20 22 53 79 73  yTypeName = "Sys
22a40 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
22a50 53 51 4c 69 74 65 46 61 63 74 6f 72 79 22 3b 0d  SQLiteFactory";.
22a60 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
22a70 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
22a80 73 63 72 69 70 74 69 6f 6e 20 3d 20 22 2e 4e 45  scription = ".NE
22a90 54 20 46 72 61 6d 65 77 6f 72 6b 20 44 61 74 61  T Framework Data
22aa0 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
22ab0 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  Lite";....      
22ac0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22b10 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
22b20 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76 32 49  st string CLRv2I
22b30 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
22b40 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30 37 32 37  on = "v2.0.50727
22b50 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
22b60 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
22b70 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69   CLRv4ImageRunti
22b80 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e  meVersion = "v4.
22b90 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20  0.30319";....   
22ba0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22bb0 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
22bf0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22c00 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e 61 6d  const string Nam
22c10 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 20  eAndValueFormat 
22c20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20  = "{0}: {1}";.. 
22c30 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
22c40 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f 67 46  onst string LogF
22c50 69 6c 65 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f  ileSuffix = ".lo
22c60 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  g";....        /
22c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cb0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22cc0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
22cd0 73 74 72 69 6e 67 20 56 73 44 65 76 45 6e 76 53  string VsDevEnvS
22ce0 65 74 75 70 46 6f 72 6d 61 74 20 3d 20 22 7b 30  etupFormat = "{0
22cf0 7d 3a 20 7b 31 7d 22 3b 0d 0a 0d 0a 20 20 20 20  }: {1}";....    
22d00 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
22d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
22d50 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
22d60 6f 6e 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74  onst string Root
22d70 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77  KeyName = "Softw
22d80 61 72 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  are";..        p
22d90 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
22da0 69 6e 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e  ing Wow64SubKeyN
22db0 61 6d 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f  ame = "Wow6432No
22dc0 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  de";....        
22dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22e20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
22e30 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
22e40 20 46 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62   Framework has b
22e50 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36  oth 32-bit and 6
22e60 34 2d 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d  4-bit editions..
22e70 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
22e80 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
22e90 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f  tic readonly boo
22ea0 6c 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e  l NetFxIs32BitOn
22eb0 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  ly = false;.... 
22ec0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22f10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
22f20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
22f30 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53  or now, Visual S
22f40 74 75 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20  tudio is always 
22f50 61 20 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61  a 32-bit applica
22f60 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
22f70 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
22f80 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
22f90 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69  ly bool VsIs32Bi
22fa0 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d  tOnly = true;...
22fb0 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
23010 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
23020 6e 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46  nly string VsIdF
23030 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a  ormat = "B";....
23040 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23090 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
230a0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
230b0 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46  ly string XPathF
230c0 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a  orAddElement =..
230d0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
230e0 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
230f0 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
23100 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40  rFactories/add[@
23110 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c  invariant=\"{0}\
23120 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "]";....        
23130 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
23140 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58  eadonly string X
23150 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
23160 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
23170 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
23180 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
23190 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
231a0 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72  es/remove[@invar
231b0 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d  iant=\"{0}\"]";.
231c0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
231d0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
231e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23220 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23230 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
23240 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20  e Static Data.. 
23250 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
23260 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74  tatic Assembly t
23270 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73  hisAssembly = As
23280 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74  sembly.GetExecut
23290 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a  ingAssembly();..
232a0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
232b0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
232c0 74 72 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20  traceCategory = 
232d0 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
232e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  (..            t
232f0 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  hisAssembly.Loca
23300 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20  tion); /* NOTE: 
23310 53 61 6d 65 20 66 6f 72 20 64 65 62 75 67 20 61  Same for debug a
23320 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a  nd trace. */....
23330 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23340 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
23350 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
23360 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a  ck = AppDebug;..
23370 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23380 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
23390 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
233a0 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a  ck = AppTrace;..
233b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
233c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233d0 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
23410 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
23420 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f  ng systemDirecto
23430 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69  ry = null;....#i
23440 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20  f WINDOWS..     
23450 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
23460 63 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44  c string systemD
23470 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 20  irectoryWow64 = 
23480 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  null;..#endif...
23490 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
234a0 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
234f0 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66  ate static int f
23500 69 6c 65 73 43 72 65 61 74 65 64 20 3d 20 30 3b  ilesCreated = 0;
23510 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
23520 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c  e static int fil
23530 65 73 4d 6f 64 69 66 69 65 64 20 3d 20 30 3b 0d  esModified = 0;.
23540 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23550 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65   static int file
23560 73 44 65 6c 65 74 65 64 20 3d 20 30 3b 0d 0a 20  sDeleted = 0;.. 
23570 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
23580 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
23590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
235e0 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48 61  #region Trace Ha
235f0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
23600 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
23610 74 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65  tring GetLogFile
23620 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
23630 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
23640 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
23650 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
23660 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23670 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
23680 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
23690 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d  TempFileName();.
236a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
236b0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
236c0 50 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72  Path.GetDirector
236d0 79 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b  yName(fileName);
236e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
236f0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  ring fileNameOnl
23700 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  y = Path.GetFile
23710 4e 61 6d 65 57 69 74 68 6f 75 74 45 78 74 65 6e  NameWithoutExten
23720 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  sion(fileName);.
23730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
23740 74 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d  tring newFileNam
23750 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
23760 28 64 69 72 65 63 74 6f 72 79 2c 20 53 74 72 69  (directory, Stri
23770 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
23780 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
23790 7b 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43 61  {1}{2}", traceCa
237a0 74 65 67 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e  tegory, !String.
237b0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79  IsNullOrEmpty(ty
237c0 70 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20  peName) ?..     
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
237e0 2e 22 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20  ." + typeName : 
237f0 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e  String.Empty, ".
23800 22 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  " + fileNameOnly
23810 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
23820 20 20 20 20 20 20 20 20 4c 6f 67 46 69 6c 65 53          LogFileS
23830 75 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20  uffix));....    
23840 20 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76          File.Mov
23850 65 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46  e(fileName, newF
23860 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
23870 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23880 6e 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  newFileName;..  
23890 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
238a0 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
238f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
23900 61 74 69 63 20 76 6f 69 64 20 41 70 70 44 65 62  atic void AppDeb
23910 75 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug(..           
23920 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
23930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
23940 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
23950 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
23960 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23970 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
23980 62 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46  bugCore(String.F
23990 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
239a0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
239b0 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72  .DebugFormat, Tr
239c0 61 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67  aceOps.NextDebug
239d0 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Id(),..         
239e0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
239f0 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
23a00 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73  me.UtcNow), mess
23a10 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b  age), category);
23a20 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
23a30 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23a80 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
23a90 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70  e static void Ap
23aa0 70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  pTrace(..       
23ab0 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
23ac0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
23ad0 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
23ae0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  y..            )
23af0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
23b00 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
23b10 73 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69  s.TraceCore(Stri
23b20 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
23b30 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
23b40 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
23b50 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54  , TraceOps.NextT
23b60 72 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20  raceId(),..     
23b70 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
23b80 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61  Ops.TimeStamp(Da
23b90 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20  teTime.UtcNow), 
23ba0 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f  message), catego
23bb0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
23bc0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
23bd0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
23be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23c30 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69    #region Generi
23c40 63 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c  c Platform Handl
23c50 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
23c60 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
23c70 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28   Is64BitProcess(
23c80 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
23c90 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
23ca0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
23cb0 45 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65 20  E: Returns true 
23cc0 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  if the current p
23cd0 72 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69 74  rocess is 64-bit
23ce0 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20  .  If this..    
23cf0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
23d00 20 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e   is true, we *kn
23d10 6f 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74  ow* that we must
23d20 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61   be running on a
23d30 20 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20   64-bit..       
23d40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
23d50 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61  erating system a
23d60 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72  s well.  However
23d70 2c 20 69 66 20 74 68 69 73 20 69 73 20 66 61 6c  , if this is fal
23d80 73 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20  se, we..        
23d90 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20      //       do 
23da0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
23db0 6b 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72 65  know that we are
23dc0 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32   running on a 32
23dd0 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  -bit..          
23de0 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61    //       opera
23df0 74 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65  ting system, due
23e00 20 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32   to WoW64 (Win32
23e10 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e  -on-Win64), etc.
23e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
23e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
23e40 74 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a  turn (IntPtr.Siz
23e50 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67  e == sizeof(long
23e60 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69  )); // NOTE: Poi
23e70 6e 74 65 72 20 69 73 20 36 34 2d 62 69 74 73 3f  nter is 64-bits?
23e80 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
23e90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23ee0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
23ef0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73  e static bool Is
23f00 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79  SupportedRootKey
23f10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
23f20 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69  ockRegistry regi
23f30 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  stry,..         
23f40 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
23f50 65 79 20 72 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey rootKey..    
23f60 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
23f70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23f80 20 20 72 65 74 75 72 6e 20 4f 62 6a 65 63 74 2e    return Object.
23f90 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28  ReferenceEquals(
23fa0 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72  rootKey, registr
23fb0 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 7c  y.CurrentUser) |
23fc0 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
23fd0 20 20 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65     Object.Refere
23fe0 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
23ff0 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61  y, registry.Loca
24000 6c 4d 61 63 68 69 6e 65 29 3b 0d 0a 20 20 20 20  lMachine);..    
24010 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24020 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24060 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24070 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
24080 69 63 20 73 74 72 69 6e 67 20 47 65 74 52 6f 6f  ic string GetRoo
24090 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  tKeyName(..     
240a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
240b0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
240c0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
240d0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
240e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
240f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
24100 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 41      // BUGFIX: A
24110 70 70 61 72 65 6e 74 6c 79 2c 20 74 68 65 20 70  pparently, the p
24120 65 72 2d 75 73 65 72 20 72 65 67 69 73 74 72 79  er-user registry
24130 20 68 69 76 65 20 64 6f 65 73 20 6e 6f 74 20 75   hive does not u
24140 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
24150 2f 2f 20 20 20 20 20 20 20 20 20 74 68 65 20 22  //         the "
24160 57 6f 77 36 34 33 32 4e 6f 64 65 22 20 6e 6f 64  Wow6432Node" nod
24170 65 20 74 6f 20 73 74 6f 72 65 20 73 65 74 74 69  e to store setti
24180 6e 67 73 20 66 6f 72 20 33 32 2d 62 69 74 0d 0a  ngs for 32-bit..
24190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
241a0 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69         applicati
241b0 6f 6e 73 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61  ons running on a
241c0 20 36 34 2d 62 69 74 20 6f 70 65 72 61 74 69 6e   64-bit operatin
241d0 67 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20  g system...     
241e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
241f0 20 20 54 69 63 6b 65 74 20 5b 61 30 36 37 37 33    Ticket [a06773
24200 30 39 66 30 5d 20 68 61 73 20 66 75 72 74 68 65  09f0] has furthe
24210 72 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20 20  r details...    
24220 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
24230 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
24240 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
24250 7d 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e 61  }{1}", RootKeyNa
24260 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
24270 20 20 20 20 20 21 70 65 72 55 73 65 72 20 26 26       !perUser &&
24280 20 77 6f 77 36 34 20 26 26 20 49 73 36 34 42 69   wow64 && Is64Bi
24290 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20  tProcess() ?..  
242a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242b0 20 20 22 5c 5c 22 20 2b 20 57 6f 77 36 34 53 75    "\\" + Wow64Su
242c0 62 4b 65 79 4e 61 6d 65 20 3a 20 53 74 72 69 6e  bKeyName : Strin
242d0 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20  g.Empty);..     
242e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
242f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24330 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
24340 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
24350 63 20 73 74 72 69 6e 67 20 47 65 74 53 79 73 74  c string GetSyst
24360 65 6d 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20  emDirectory(..  
24370 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
24380 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
24390 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
243a0 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20  #if WINDOWS..   
243b0 20 20 20 20 20 20 20 20 20 69 66 20 28 77 6f 77           if (wow
243c0 36 34 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64)..           
243d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
243e0 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69      if (systemDi
243f0 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 3d 20  rectoryWow64 == 
24400 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
24410 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79                sy
24430 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77  stemDirectoryWow
24440 36 34 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  64 =..          
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
24460 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
24470 73 2e 47 65 74 53 79 73 74 65 6d 44 69 72 65 63  s.GetSystemDirec
24480 74 6f 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20  tory();..       
24490 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
244b0 74 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63  turn systemDirec
244c0 74 6f 72 79 57 6f 77 36 34 3b 0d 0a 20 20 20 20  toryWow64;..    
244d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
244e0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e         else..#en
244f0 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
24500 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24510 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69      if (systemDi
24520 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29  rectory == null)
24530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24540 20 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65        systemDire
24550 63 74 6f 72 79 20 3d 20 45 6e 76 69 72 6f 6e 6d  ctory = Environm
24560 65 6e 74 2e 53 79 73 74 65 6d 44 69 72 65 63 74  ent.SystemDirect
24570 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ory;....        
24580 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73          return s
24590 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d  ystemDirectory;.
245a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
245b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
245c0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
245d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
245e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
245f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
24630 69 6f 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69  ion Generic Stri
24640 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ng Handling..   
24650 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
24660 74 69 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69  tic string ForDi
24670 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
24680 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
24690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
246a0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
246b0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
246c0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
246d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
246e0 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a  rn "<null>";....
246f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
24700 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  ng result;..    
24710 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70          Type typ
24720 65 20 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70  e = value.GetTyp
24730 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
24740 20 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20      if (type == 
24750 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e  typeof(XmlElemen
24760 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
24770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24780 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65      XmlElement e
24790 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65  lement = (XmlEle
247a0 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ment)value;.... 
247b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
247c0 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e  esult = element.
247d0 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20  OuterXml;..     
247e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
247f0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74        else if (t
24800 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 56 65  ype == typeof(Ve
24810 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  rsion))..       
24820 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24830 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
24840 76 65 72 73 69 6f 6e 20 3d 20 28 56 65 72 73 69  version = (Versi
24850 6f 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  on)value;....   
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
24870 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ult = String.For
24880 6d 61 74 28 22 76 7b 30 7d 22 2c 20 76 65 72 73  mat("v{0}", vers
24890 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion);..         
248a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
248b0 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20    else if (type 
248c0 3d 3d 20 74 79 70 65 6f 66 28 50 72 6f 63 65 73  == typeof(Proces
248d0 73 53 74 61 72 74 49 6e 66 6f 29 29 0d 0a 20 20  sStartInfo))..  
248e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
248f0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
24900 63 65 73 73 53 74 61 72 74 49 6e 66 6f 20 73 74  cessStartInfo st
24910 61 72 74 49 6e 66 6f 20 3d 20 28 50 72 6f 63 65  artInfo = (Proce
24920 73 73 53 74 61 72 74 49 6e 66 6f 29 76 61 6c 75  ssStartInfo)valu
24930 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
24940 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
24950 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 20 20 22 66 69 6c 65 4e 61 6d 65 20 3d 20 7b     "fileName = {
24980 30 7d 2c 20 61 72 67 75 6d 65 6e 74 73 20 3d 20  0}, arguments = 
24990 7b 31 7d 2c 20 77 6f 72 6b 69 6e 67 44 69 72 65  {1}, workingDire
249a0 63 74 6f 72 79 20 3d 20 7b 32 7d 2c 20 22 20 2b  ctory = {2}, " +
249b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
249c0 20 20 20 20 20 20 22 75 73 65 53 68 65 6c 6c 45        "useShellE
249d0 78 65 63 75 74 65 20 3d 20 7b 33 7d 2c 20 72 65  xecute = {3}, re
249e0 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 4f 75  directStandardOu
249f0 74 70 75 74 20 3d 20 7b 34 7d 2c 20 22 20 2b 0d  tput = {4}, " +.
24a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24a10 20 20 20 20 20 22 72 65 64 69 72 65 63 74 53 74       "redirectSt
24a20 61 6e 64 61 72 64 45 72 72 6f 72 20 3d 20 7b 35  andardError = {5
24a30 7d 22 2c 20 73 74 61 72 74 49 6e 66 6f 2e 46 69  }", startInfo.Fi
24a40 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
24a60 72 74 49 6e 66 6f 2e 41 72 67 75 6d 65 6e 74 73  rtInfo.Arguments
24a70 2c 20 73 74 61 72 74 49 6e 66 6f 2e 57 6f 72 6b  , startInfo.Work
24a80 69 6e 67 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ingDirectory,.. 
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24aa0 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 55 73 65     startInfo.Use
24ab0 53 68 65 6c 6c 45 78 65 63 75 74 65 2c 20 73 74  ShellExecute, st
24ac0 61 72 74 49 6e 66 6f 2e 52 65 64 69 72 65 63 74  artInfo.Redirect
24ad0 53 74 61 6e 64 61 72 64 4f 75 74 70 75 74 2c 0d  StandardOutput,.
24ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24af0 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 52       startInfo.R
24b00 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 45  edirectStandardE
24b10 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
24b20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
24b30 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65     else if (type
24b40 20 3d 3d 20 74 79 70 65 6f 66 28 50 72 6f 63 65   == typeof(Proce
24b50 73 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ss))..          
24b60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24b70 20 20 20 20 20 50 72 6f 63 65 73 73 20 70 72 6f       Process pro
24b80 63 65 73 73 20 3d 20 28 50 72 6f 63 65 73 73 29  cess = (Process)
24b90 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
24ba0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
24bb0 20 3d 20 70 72 6f 63 65 73 73 2e 49 64 2e 54 6f   = process.Id.To
24bc0 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20  String();..     
24bd0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
24be0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74        else if (t
24bf0 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 44 61  ype == typeof(Da
24c00 74 61 52 65 63 65 69 76 65 64 45 76 65 6e 74 41  taReceivedEventA
24c10 72 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rgs))..         
24c20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24c30 20 20 20 20 20 20 44 61 74 61 52 65 63 65 69 76        DataReceiv
24c40 65 64 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e  edEventArgs even
24c50 74 41 72 67 73 20 3d 20 28 44 61 74 61 52 65 63  tArgs = (DataRec
24c60 65 69 76 65 64 45 76 65 6e 74 41 72 67 73 29 76  eivedEventArgs)v
24c70 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
24c80 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
24c90 3d 20 65 76 65 6e 74 41 72 67 73 2e 44 61 74 61  = eventArgs.Data
24ca0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
24cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
24cc0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
24cd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24ce0 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75     result = valu
24cf0 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 0d  e.ToString();...
24d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24d10 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67   if (result.Leng
24d20 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  th == 0)..      
24d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24d40 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b 0d  turn "<empty>";.
24d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24d60 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69     result = Stri
24d70 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d90 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73 73 4f  type.IsSubclassO
24da0 66 28 74 79 70 65 6f 66 28 56 61 6c 75 65 54 79  f(typeof(ValueTy
24db0 70 65 29 29 20 3f 20 22 7b 30 7d 22 20 3a 20 22  pe)) ? "{0}" : "
24dc0 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20 20 20  \"{0}\"",..     
24dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24de0 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20  esult);..       
24df0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24e00 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
24e10 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
24e20 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
24e30 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
24e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e80 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24e90 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62    #region Assemb
24ea0 6c 79 20 41 74 74 72 69 62 75 74 65 20 48 61 6e  ly Attribute Han
24eb0 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
24ec0 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
24ed0 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 43  ing GetAssemblyC
24ee0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20  onfiguration(.. 
24ef0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
24f00 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  bly assembly..  
24f10 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
24f20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24f30 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
24f40 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
24f50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24f60 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
24f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24f90 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
24fa0 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20  ly.IsDefined(.. 
24fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fc0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
24fd0 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67  f(AssemblyConfig
24fe0 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65  urationAttribute
24ff0 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  ), false))..    
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25020 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
25030 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
25040 41 74 74 72 69 62 75 74 65 20 63 6f 6e 66 69 67  Attribute config
25050 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20  uration =..     
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25070 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79         (Assembly
25080 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74  ConfigurationAtt
25090 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20  ribute)..       
250a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250b0 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65       assembly.Ge
250c0 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65  tCustomAttribute
250d0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
250e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250f0 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
25100 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
25110 41 74 74 72 69 62 75 74 65 29 2c 0d 0a 20 20 20  Attribute),..   
25120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25130 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
25140 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20  se)[0];....     
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25160 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67     return config
25170 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72  uration.Configur
25180 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  ation;..        
25190 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
251b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
251c0 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
251d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
25200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25210 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
25220 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25230 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
25240 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25250 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
252a0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
252b0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
252c0 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20  semblyTitle(..  
252d0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
252e0 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ly assembly..   
252f0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
25300 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25310 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
25320 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
25330 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25340 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25370 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
25380 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20  y.IsDefined(..  
25390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253a0 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
253b0 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74  (AssemblyTitleAt
253c0 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29  tribute), false)
253d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
253e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25400 20 20 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41    AssemblyTitleA
25410 74 74 72 69 62 75 74 65 20 74 69 74 6c 65 20 3d  ttribute title =
25420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 41                (A
25440 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72  ssemblyTitleAttr
25450 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20  ibute)..        
25460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25470 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74      assembly.Get
25480 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73  CustomAttributes
25490 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
254a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254b0 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
254c0 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
254d0 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d  ), false)[0];...
254e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
254f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25500 74 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20  title.Title;..  
25510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25520 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
25530 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25540 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
25550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25570 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
25580 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
25590 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
255a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
255b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
255c0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  l;..        }.. 
255d0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
255e0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
255f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25630 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25640 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61  #region .NET Fra
25650 6d 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d  mework Handling.
25660 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25670 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
25680 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b  etFrameworkRootK
25690 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
256a0 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
256b0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
256c0 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20  bool wow64..    
256d0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
256e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
256f0 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
25700 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63  Format("{0}\\Mic
25710 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46 72 61 6d  rosoft\\.NETFram
25720 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20  ework",..       
25730 20 20 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74           GetRoot
25740 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c  KeyName(perUser,
25750 20 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20   wow64));..     
25760 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
25770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
257a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
257b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
257c0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
257d0 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d  c string GetFram
257e0 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20  eworkKeyName(.. 
257f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
25800 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
25810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
25820 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
25830 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
25840 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
25850 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
25860 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
25870 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
25880 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
25890 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
258a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
258b0 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61      string forma
258c0 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75  t = !String.IsNu
258d0 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f  llOrEmpty(platfo
258e0 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20  rmName) ?..     
258f0 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
25900 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c  \Microsoft\\{1}\
25910 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a 20  \v{2}\\{3}" :.. 
25920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25930 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
25940 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a 20  {1}\\v{2}";.... 
25950 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25960 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
25970 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b  format, GetRootK
25980 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20  eyName(perUser, 
25990 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20  wow64),..       
259a0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
259b0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
259c0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
259d0 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  rmName);..      
259e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
259f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a30 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25a40 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
25a50 20 73 74 72 69 6e 67 20 47 65 74 49 6d 61 67 65   string GetImage
25a60 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d  RuntimeVersion(.
25a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
25a80 69 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  ing fileName..  
25a90 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
25aa0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25ab0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
25ac0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25ad0 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
25ae0 20 61 73 73 65 6d 62 6c 79 20 3d 0d 0a 20 20 20   assembly =..   
25af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b00 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63   Assembly.Reflec
25b10 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d  tionOnlyLoadFrom
25b20 28 66 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  (fileName); /* t
25b30 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  hrow */....     
25b40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
25b50 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29  ssembly != null)
25b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25b70 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 73 73        return ass
25b80 65 6d 62 6c 79 2e 49 6d 61 67 65 52 75 6e 74 69  embly.ImageRunti
25b90 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  meVersion;..    
25ba0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
25bb0 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
25bc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
25be0 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
25bf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25c00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25c10 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
25c20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
25c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25c80 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
25c90 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f  tring GetFramewo
25ca0 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20  rkDirectory(..  
25cb0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
25cc0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
25cd0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
25ce0 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
25cf0 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
25d00 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
25d10 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
25d20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
25d30 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
25d40 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
25d50 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
25d60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
25d70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
25d80 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
25d90 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
25da0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
25db0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
25dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25dd0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47        rootKey, G
25de0 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b  etFrameworkRootK
25df0 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20  eyName(perUser, 
25e00 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20  wow64),..       
25e10 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
25e20 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
25e30 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
25e40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25e50 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
25e60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25e70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
25e80 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
25e90 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
25ea0 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73  ct value = Regis
25eb0 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c  tryHelper.GetVal
25ec0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
25ed0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49           key, "I
25ee0 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c  nstallRoot", nul
25ef0 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  l, whatIf, verbo
25f00 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
25f10 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61          if (!(va
25f20 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d  lue is string)).
25f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f40 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
25f50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25f60 20 20 20 20 20 72 65 74 75 72 6e 20 50 61 74 68       return Path
25f70 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
25f90 73 74 72 69 6e 67 29 76 61 6c 75 65 2c 20 53 74  string)value, St
25fa0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30  ring.Format("v{0
25fb0 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  }", frameworkVer
25fc0 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  sion));..       
25fd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25fe0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
25ff0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
26000 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26040 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26050 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d      #region Per-
26060 46 72 61 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f  Framework/Platfo
26070 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rm Handling..   
26080 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
26090 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c  tic void Initial
260a0 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  izeFrameworkList
260b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
260c0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
260d0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
260e0 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69       Configurati
260f0 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on configuration
26100 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
26110 65 66 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ef FrameworkList
26120 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a   frameworkList..
26130 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
26140 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26150 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
26160 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  orkList == null)
26170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26180 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    frameworkList 
26190 3d 20 6e 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c  = new FrameworkL
261a0 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
261b0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
261c0 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20  orkList.RootKey 
261d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
261e0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
261f0 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20  orkList.RootKey 
26200 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20  = rootKey;....  
26210 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
26220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
26260 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
26270 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
26280 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
26290 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
262b0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
262c0 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  s = new StringLi
262d0 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
262e0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
262f0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
26300 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
26310 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70  ration.NoDesktop
26320 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26330 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
26340 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22  List.Names.Add("
26350 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b  .NETFramework");
26360 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26370 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
26380 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
26390 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
263a0 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20  n.NoCompact)..  
263b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
263c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
263d0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
263e0 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e  st.Names.Add(".N
263f0 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
26400 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rk");..         
26410 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
26420 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41  workList.Names.A
26430 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
26440 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20  ramework");..   
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26460 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
26470 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f  ames.Add(".NETCo
26480 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29  mpactFramework")
26490 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
264a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
264b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
264c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
264d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
264e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
264f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26500 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26510 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
26520 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
26530 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
26540 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26550 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
26560 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
26570 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61   = new VersionMa
26580 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p();....        
26590 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
265a0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
265b0 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
265c0 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29  ation.NoDesktop)
265d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
265e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
265f0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
26600 4c 69 73 74 20 64 65 73 6b 74 6f 70 56 65 72 73  List desktopVers
26610 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65  ionList = new Ve
26620 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a  rsionList();....
26630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26640 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
26650 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
26660 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
26670 6e 2e 4e 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20  n.NoNetFx20)..  
26680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26690 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
266a0 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
266b0 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35   Version(2, 0, 5
266c0 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  0727));....     
266d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
266e0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
266f0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
26700 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  The .NET Framewo
26710 72 6b 20 33 2e 35 20 64 6f 65 73 20 6e 6f 74 20  rk 3.5 does not 
26720 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20  have its own..  
26730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26740 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63    //       direc
26750 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69  tory; however, i
26760 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65  t still may have
26770 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
26780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26790 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20  /       folders 
267a0 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61  for use in Visua
267b0 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a  l Studio, etc...
267c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
267e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
267f0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
26800 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
26810 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
26820 78 33 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x35)..          
26830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
26840 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
26850 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
26860 28 33 2c 20 35 29 29 3b 0d 0a 0d 0a 20 20 20 20  (3, 5));....    
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
26890 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
268a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
268b0 4e 65 74 46 78 34 30 29 0d 0a 20 20 20 20 20 20  NetFx40)..      
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268d0 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
268e0 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
268f0 73 69 6f 6e 28 34 2c 20 30 2c 20 33 30 33 31 39  sion(4, 0, 30319
26900 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
26910 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
26920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26930 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20     // NOTE: The 
26940 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 34  .NET Framework 4
26950 2e 35 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  .5 does not have
26960 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20   its own..      
26970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26980 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
26990 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74  ; however, it st
269a0 69 6c 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73  ill may have ass
269b0 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
269c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
269d0 20 20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20      folders for 
269e0 75 73 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74  use in Visual St
269f0 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20  udio, etc...    
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a10 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
26a20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
26a30 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
26a40 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
26a50 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 29  ation.NoNetFx45)
26a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26a70 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
26a80 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  pVersionList.Add
26a90 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20  (new Version(4, 
26aa0 35 2c 20 35 30 37 30 39 29 29 3b 0d 0a 0d 0a 20  5, 50709));.... 
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ac0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
26ad0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
26ae0 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61  TE: The .NET Fra
26af0 6d 65 77 6f 72 6b 20 34 2e 35 2e 31 20 64 6f 65  mework 4.5.1 doe
26b00 73 20 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f  s not have its o
26b10 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  wn..            
26b20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
26b30 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65   directory; howe
26b40 76 65 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61  ver, it still ma
26b50 79 20 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d  y have assembly.
26b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26b70 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f       //       fo
26b80 6c 64 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e  lders for use in
26b90 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20   Visual Studio, 
26ba0 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  etc...          
26bb0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bd0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
26be0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
26bf0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
26c00 4e 6f 4e 65 74 46 78 34 35 31 29 0d 0a 20 20 20  NoNetFx451)..   
26c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
26c30 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
26c40 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c 20 31 29  Version(4, 5, 1)
26c50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26c60 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
26c70 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
26c80 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77  .Add(".NETFramew
26c90 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ork",..         
26ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
26cb0 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
26cc0 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
26cd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26ce0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
26cf0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
26d00 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
26d10 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63  uration.NoCompac
26d20 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
26d30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26d40 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
26d50 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
26d60 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
26d70 63 74 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20  ctFramework",.. 
26d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d90 20 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69         new Versi
26da0 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65 72 73 69  onList(new Versi
26db0 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  on[] {..        
26dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26dd0 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30  new Version(2, 0
26de0 2c 20 30 2c 20 30 29 2c 20 6e 65 77 20 56 65 72  , 0, 0), new Ver
26df0 73 69 6f 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29  sion(3, 5, 0, 0)
26e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26e10 20 20 20 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20        }));..    
26e20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
26e30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26e40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
26e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
26e90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
26ea0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
26eb0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d  .PlatformNames =
26ec0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
26ed0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26ee0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
26ef0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
26f00 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  mes = new String
26f10 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
26f20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
26f30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
26f40 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
26f50 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74  guration.NoDeskt
26f60 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op)..           
26f70 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
26f80 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
26f90 61 6d 65 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d  ames.Add(null);.
26fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26fb0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
26fc0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
26fd0 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
26fe0 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20  .NoCompact)..   
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
27020 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
27030 41 64 64 28 22 50 6f 63 6b 65 74 50 43 22 29 3b  Add("PocketPC");
27040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27050 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
27060 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
27070 73 2e 41 64 64 28 22 53 6d 61 72 74 70 68 6f 6e  s.Add("Smartphon
27080 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e");..          
27090 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
270a0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
270b0 4e 61 6d 65 73 2e 41 64 64 28 22 57 69 6e 64 6f  Names.Add("Windo
270c0 77 73 43 45 22 29 3b 0d 0a 20 20 20 20 20 20 20  wsCE");..       
270d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
270e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
270f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27140 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27150 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
27160 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65  c bool HaveFrame
27170 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
27180 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
27190 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
271a0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
271b0 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
271c0 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
271d0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
271e0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
271f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
27200 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
27210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
27220 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
27230 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
27240 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
27250 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
27260 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
27270 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
27280 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
27290 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f  g installDirecto
272a0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
272b0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
272c0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
272d0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72   keyName = GetFr
272e0 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d  ameworkKeyName(.
272f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27300 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
27310 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27320 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
27330 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
27340 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29            wow64)
27350 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27360 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
27370 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
27380 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
27390 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
273b0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
273c0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
273d0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
273e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
273f0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
27400 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
27410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27420 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
27430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27440 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  if (platformName
27450 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54   != null) // NOT
27460 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b  E: Skip non-desk
27470 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  top...          
27480 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27490 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
274a0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
274b0 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74   directory = Get
274c0 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f  FrameworkDirecto
274d0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
274e0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
274f0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
27500 6f 6e 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  on, perUser, wow
27510 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  64, whatIf,..   
27520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27530 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
27540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
27550 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
27560 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
27570 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
27580 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
27590 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
275a0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
275b0 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
275c0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
275d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275e0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
275f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27600 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
27610 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
27620 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
27630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27640 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
27650 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
27660 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27680 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
27690 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69  ork {0} found vi
276a0 61 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e  a directory {1}.
276b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
276c0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
276d0 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
276e0 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion), ForDisplay
276f0 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20  (directory)),.. 
27700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27710 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
27720 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
27730 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 44 69 72        installDir
27740 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f  ectory = directo
27750 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
27760 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
27770 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
27780 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
27790 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
277a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
277e0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
277f0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61  e static bool Ha
27800 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  veFrameworkRegis
27810 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
27820 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
27830 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
27840 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
27850 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
27860 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
27870 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
27880 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
27890 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
278a0 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
278b0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
278c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
278d0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
278e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
278f0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
27900 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
27910 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
27920 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27930 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
27940 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77  Name = GetFramew
27950 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  orkKeyName(..   
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
27970 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
27980 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
27990 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55  atformName, perU
279a0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
279b0 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d        wow64);...
279c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
279d0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
279e0 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
279f0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
27a00 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
27a10 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
27a20 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
27a30 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
27a40 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
27a50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27a60 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
27a70 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
27a80 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27a90 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
27aa0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27ab0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20  platformName != 
27ac0 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53  null) // NOTE: S
27ad0 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e  kip non-desktop.
27ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27af0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
27b00 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
27b10 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
27b20 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
27b30 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72  cePriority.Lower
27b40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27b50 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
27b60 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
27b70 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
27b80 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
27b90 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
27ba0 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75  ramework {0} fou
27bb0 6e 64 20 76 69 61 20 72 65 67 69 73 74 72 79 20  nd via registry 
27bc0 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
27bd0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
27be0 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
27bf0 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73  Version), ForDis
27c00 70 6c 61 79 28 6b 65 79 4e 61 6d 65 29 29 2c 0d  play(keyName)),.
27c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27c20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
27c30 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
27c40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
27c50 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
27c60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
27c70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
27c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cc0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
27cd0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
27ce0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
27cf0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
27d00 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
27d10 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d  bool ForEachFram
27d20 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20  eworkConfig(..  
27d30 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
27d40 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c  gistry registry,
27d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
27d60 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
27d70 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20  eworkList,..    
27d80 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
27d90 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20  kConfigCallback 
27da0 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
27db0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 65         string ve
27dc0 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20  rsion, /* NOTE: 
27dd0 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20  Optional. */..  
27de0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
27df0 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20   invariant,..   
27e00 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
27e10 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
27e20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69     string descri
27e30 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
27e40 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
27e50 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
27e60 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
27e70 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
27e80 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
27e90 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
27ea0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
27eb0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
27ec0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
27ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
27ee0 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
27ef0 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
27f00 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
27f10 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
27f20 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
27f30 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
27f40 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
27f50 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
27f60 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
27f70 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
27f80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
27f90 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  gistry == null).
27fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
27fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fc0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
27fd0 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20   registry";..   
27fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27ff0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
28000 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28010 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
28020 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
28030 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28040 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28050 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
28060 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c  alid framework l
28070 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist";..         
28080 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
28090 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
280a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
280b0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
280c0 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61  ey rootKey = fra
280d0 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
280e0 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
280f0 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d     if (rootKey =
28100 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
28110 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28120 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
28130 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65  "invalid root ke
28140 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
28150 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
28160 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
28170 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
28180 20 69 66 20 28 21 49 73 53 75 70 70 6f 72 74 65   if (!IsSupporte
28190 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72  dRootKey(registr
281a0 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20  y, rootKey))..  
281b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
281c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
281d0 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d  or = "root key m
281e0 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20  ust be per-user 
281f0 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b  or per-machine";
28200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28210 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
28220 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28240 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
28250 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
28260 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
28280 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
28290 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64  work names found
282a0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
282b0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
282c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
282d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
282e0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
282f0 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75  t.Versions == nu
28300 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28310 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28320 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
28330 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  framework versio
28340 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  ns found";..    
28350 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28360 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
28370 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28380 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
28390 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
283a0 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  rmNames == null)
283b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
283c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
283d0 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61   error = "no pla
283e0 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e  tform names foun
283f0 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
28400 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
28410 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
28420 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
28430 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
28440 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21  st.Names.Count !
28450 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
28460 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
28470 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  unt)..          
28480 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28490 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
284a0 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d  ing.Format("fram
284b0 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74  ework name count
284c0 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20   {0} does not " 
284d0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
284e0 20 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c         "match pl
284f0 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e  atform name coun
28500 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72  t {1}", framewor
28510 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
28520 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
28530 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
28540 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
28550 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  mes.Count);.... 
28560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28570 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
28580 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
28590 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
285a0 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
285b0 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b  ndex < framework
285c0 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
285d0 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
285e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
285f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28610 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
28620 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61   name of the fra
28630 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e  mework (e.g. ".N
28640 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20  ETFramework").. 
28650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28660 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20  /       and the 
28670 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74  name of the plat
28680 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64  form (e.g. "Wind
28690 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20  owsCE")...      
286a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
286b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
286c0 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
286d0 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  me = frameworkLi
286e0 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b  st.Names[index];
286f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28700 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
28710 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72  mName = framewor
28720 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
28730 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  mes[index];.... 
28740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28750 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
28760 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70     // NOTE: Skip
28770 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70   all non-desktop
28780 20 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65   frameworks (i.e
28790 2e 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72  . if the platfor
287a0 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m..             
287b0 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65     //       name
287c0 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a   is not null)...
287d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287e0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
287f0 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
28800 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Name != null).. 
28810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28820 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
28830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28840 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
28850 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
28860 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20  b the supported 
28870 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73  versions of this
28880 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20   particular..   
28890 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
288a0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e        framework.
288b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
288c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
288d0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
288e0 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t frameworkVersi
288f0 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20  onList;....     
28900 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
28910 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d  ersion != null).
28920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28930 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28940 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
28950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28960 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20  // NOTE: Manual 
28970 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68 65 20  override of the 
28980 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20  *ONE* framework 
28990 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  version..       
289a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
289b0 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65 73 73        to process
289c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
289d0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
289e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
289f0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
28a00 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ist = new Versio
28a10 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 20  nList();..      
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
28a30 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
28a40 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
28a50 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20  on(version));.. 
28a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a80 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
28a90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
28ab0 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73  f (!frameworkLis
28ac0 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65  t.Versions.TryGe
28ad0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
28ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28af0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
28b00 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72  me, out framewor
28b10 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c  kVersionList) ||
28b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28b30 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d 65            (frame
28b40 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20  workVersionList 
28b50 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
28b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28b80 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
28b90 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
28ba0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
28bb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28bd0 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f   foreach (Versio
28be0 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
28bf0 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56  on in frameworkV
28c00 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20  ersionList)..   
28c10 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c30 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
28c40 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
28c50 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
28c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28c70 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
28c80 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
28c90 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
28ca0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
28cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
28cc0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
28cd0 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  {0}, frameworkVe
28ce0 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b  rsion = {1}, " +
28cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28d00 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66            "platf
28d10 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20  ormName = {2}", 
28d20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
28d30 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  workName),..    
28d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d50 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
28d60 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
28d70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28d80 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
28d90 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61  splay(platformNa
28da0 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
28db0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
28dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
28dd0 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  ing installDirec
28de0 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  tory = null;....
28df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e00 20 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61      if (!HaveFra
28e10 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
28e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
28e40 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
28e50 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
28e60 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
28e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e80 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
28e90 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  e, perUser, wow6
28ea0 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  4, whatIf, verbo
28eb0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
28ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ed0 20 72 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65   ref installDire
28ee0 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
28f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f10 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
28f20 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
28f30 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
28f40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
28f60 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
28f70 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
28f80 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
28f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fa0 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
28fb0 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72  ramework {0} dir
28fc0 65 63 74 6f 72 79 20 6e 6f 74 20 66 6f 75 6e 64  ectory not found
28fd0 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
28fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ff0 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
29000 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
29010 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c  meworkVersion)),
29020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
29040 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
29050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29060 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
29070 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
29080 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290a0 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d   if (callback ==
290b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
290c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290d0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
290e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290f0 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
29100 79 20 3d 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  y = installDirec
29110 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tory;....       
29120 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
29130 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
29140 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
29150 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
29160 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29180 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
29190 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
291a0 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
291b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291c0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
291d0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
291e0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
291f0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
29200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29210 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
29220 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79  rk {0} directory
29230 20 69 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b   is invalid, " +
29240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
29260 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
29270 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
29280 6b 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  kVersion)),..   
29290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
292b0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292d0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
292e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29300 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65              dire
29310 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d  ctory = Path.Com
29320 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20  bine(directory, 
29330 22 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20  "Config");....  
29340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29350 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79    if (!Directory
29360 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72  .Exists(director
29370 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
29380 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293a0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
293b0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
293c0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
293d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293e0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
293f0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
29400 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
29410 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
29420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29430 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
29440 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f  work {0} directo
29450 72 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20  ry {1} does not 
29460 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
29470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29480 20 22 65 78 69 73 74 2c 20 73 6b 69 70 70 69 6e   "exist, skippin
29490 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61  g...", ForDispla
294a0 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
294b0 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
294c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294d0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72    ForDisplay(dir
294e0 65 63 74 6f 72 79 29 29 2c 20 74 72 61 63 65 43  ectory)), traceC
294f0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29510 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
29520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29530 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
29550 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50  ing fileName = P
29560 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
29570 63 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e  ctory, "machine.
29580 63 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20  config");....   
29590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295a0 20 69 66 20 28 21 46 69 6c 65 2e 45 78 69 73 74   if (!File.Exist
295b0 73 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  s(fileName))..  
295c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
295e0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
295f0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
29600 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
29610 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  y.Low,..        
29620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29630 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
29640 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
29650 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
29660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
29680 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
29690 7d 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20  } file {1} does 
296a0 6e 6f 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a  not exist, " +..
296b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296c0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69              "ski
296d0 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
296e0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
296f0 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
29700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29710 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
29720 28 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61  (fileName)), tra
29730 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
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 63 6f 6e 74 69 6e 75 65          continue
29760 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29770 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29790 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20  bool localSaved 
297a0 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
297b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297c0 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a  if (!callback(..
297d0 20 20 20 20 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 66 69 6c 65              file
297f0 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c  Name, invariant,
29800 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69   name, descripti
29810 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  on, typeName,.. 
29820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29830 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d             assem
29840 62 6c 79 4e 61 6d 65 2c 20 69 6e 73 74 61 6c 6c  blyName, install
29850 44 69 72 65 63 74 6f 72 79 2c 20 63 6c 69 65 6e  Directory, clien
29860 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
29870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29880 20 20 20 20 70 65 72 55 73 65 72 2c 20 77 6f 77      perUser, wow
29890 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  64, throwOnMissi
298a0 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
298b0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
298c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298d0 20 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64    ref localSaved
298e0 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
298f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29900 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29920 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
29930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29940 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29950 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
29960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29970 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29980 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
29990 28 6c 6f 63 61 6c 53 61 76 65 64 20 26 26 20 21  (localSaved && !
299a0 73 61 76 65 64 29 0d 0a 20 20 20 20 20 20 20 20  saved)..        
299b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299c0 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
299d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
299e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
299f0 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
29a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a10 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
29a20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
29a30 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
29a40 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a60 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
29a70 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
29a80 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
29a90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ab0 20 20 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d     "localSaved =
29ac0 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31   {0}, saved = {1
29ad0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29af0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
29b00 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72  localSaved), For
29b10 44 69 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c  Display(saved)),
29b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b40 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
29b50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29b60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29b70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
29b80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29b90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29ba0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
29bb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
29bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29c10 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
29c20 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
29c30 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
29c40 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
29c50 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46  ic bool ForEachF
29c60 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79  rameworkRegistry
29c70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
29c80 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69  ockRegistry regi
29c90 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  stry,..         
29ca0 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74     FrameworkList
29cb0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d   frameworkList,.
29cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61  .            Fra
29cd0 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 43 61  meworkRegistryCa
29ce0 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c  llback callback,
29cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
29d00 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a  ring version, /*
29d10 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e   NOTE: Optional.
29d20 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
29d30 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
29d40 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
29d50 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
29d60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
29d70 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
29d80 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
29d90 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
29da0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
29db0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
29dc0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
29dd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
29de0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
29df0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
29e00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29e10 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79      if (registry
29e20 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
29e30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29e40 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
29e50 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73  = "invalid regis
29e60 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  try";..         
29e70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29e80 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29e90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29ea0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
29eb0 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
29ec0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
29ee0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
29ef0 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d  ramework list";.
29f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29f10 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
29f20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
29f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
29f40 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
29f50 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b  tKey = framework
29f60 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d  List.RootKey;...
29f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
29f80 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  (rootKey == null
29f90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29fb0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
29fc0 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20  id root key";.. 
29fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29fe0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
29ff0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a000 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2a010 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b  IsSupportedRootK
2a020 65 79 28 72 65 67 69 73 74 72 79 2c 20 72 6f 6f  ey(registry, roo
2a030 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tKey))..        
2a040 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a050 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2a060 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65  root key must be
2a070 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72   per-user or per
2a080 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20  -machine";..    
2a090 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2a0a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2a0b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a0c0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2a0d0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
2a0e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2a0f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a100 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2a110 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e   "no framework n
2a120 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ames found";..  
2a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a140 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2a150 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2a160 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
2a170 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
2a180 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
2a190 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2a1b0 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77  ror = "no framew
2a1c0 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75  ork versions fou
2a1d0 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
2a1e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2a1f0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2a200 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a210 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
2a220 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2a230 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
2a240 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a250 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2a260 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20   = "no platform 
2a270 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
2a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a290 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2a2a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a2b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
2a2c0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2a2d0 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d  es.Count != fram
2a2e0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
2a2f0 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a  rmNames.Count)..
2a300 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2a320 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2a330 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20  rmat("framework 
2a340 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64  name count {0} d
2a350 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20  oes not " +..   
2a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a370 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d   "match platform
2a380 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22   name count {1}"
2a390 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  , frameworkList.
2a3a0 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20  Names.Count,..  
2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3c0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
2a3d0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
2a3e0 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
2a3f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a400 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2a410 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a420 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
2a430 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
2a440 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
2a450 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65  ames.Count; inde
2a460 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
2a470 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a480 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2a490 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2a4a0 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20  : Grab the name 
2a4b0 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b  of the framework
2a4c0 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d   (e.g. ".NETFram
2a4d0 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20  ework")..       
2a4e0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2a4f0 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f    and the name o
2a500 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28  f the platform (
2a510 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22  e.g. "WindowsCE"
2a520 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
2a530 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2a540 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2a550 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66  rameworkName = f
2a560 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2a570 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20  es[index];..    
2a580 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2a590 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  ng platformName 
2a5a0 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
2a5b0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e  PlatformNames[in
2a5c0 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
2a5d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2a5f0 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 73  NOTE: Grab the s
2a600 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  upported version
2a610 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69 63  s of this partic
2a620 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20  ular..          
2a630 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
2a640 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20  ramework...     
2a650 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
2a670 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65  ersionList frame
2a680 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b  workVersionList;
2a690 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a6a0 20 20 20 20 69 66 20 28 76 65 72 73 69 6f 6e 20      if (version 
2a6b0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
2a6c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6e0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2a6f0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2a700 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69 64  : Manual overrid
2a710 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66  e of the *ONE* f
2a720 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e  ramework version
2a730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a740 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
2a750 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  o process...    
2a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a770 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2a780 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2a790 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e  kVersionList = n
2a7a0 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29  ew VersionList()
2a7b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2a7c0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2a7d0 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
2a7e0 6e 65 77 20 56 65 72 73 69 6f 6e 28 76 65 72 73  new Version(vers
2a7f0 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ion));..        
2a800 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2a810 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
2a820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a830 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a840 20 20 20 20 20 20 20 20 69 66 20 28 21 66 72 61          if (!fra
2a850 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
2a860 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28  ons.TryGetValue(
2a870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2a890 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74  ameworkName, out
2a8a0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2a8b0 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20  nList) ||..     
2a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8d0 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72     (frameworkVer
2a8e0 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  sionList == null
2a8f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2a900 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a920 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
2a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a940 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2a950 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2a960 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
2a970 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65  h (Version frame
2a980 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66  workVersion in f
2a990 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2a9a0 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ist)..          
2a9b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2a9d0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
2a9e0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
2a9f0 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20  y.Lower,..      
2aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa10 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2aa20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2aa30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa50 20 20 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f          "framewo
2aa60 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72  rkName = {0}, fr
2aa70 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d  ameworkVersion =
2aa80 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {1}, " +..     
2aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aaa0 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65     "platformName
2aab0 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70   = {2}", ForDisp
2aac0 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  lay(frameworkNam
2aad0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
2aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
2aaf0 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
2ab00 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  kVersion),..    
2ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70      ForDisplay(p
2ab30 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74  latformName)), t
2ab40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2ab50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ab60 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65 46        if (!HaveF
2ab70 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79  rameworkRegistry
2ab80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2aba0 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
2abb0 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
2abc0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abe0 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61        platformNa
2abf0 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  me, perUser, wow
2ac00 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  64, whatIf, verb
2ac10 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2ac20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac40 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
2ac50 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
2ac60 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
2ac70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2ac90 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2aca0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2acb0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acd0 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
2ace0 6d 65 77 6f 72 6b 20 7b 30 7d 20 72 65 67 69 73  mework {0} regis
2acf0 74 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 22  try not found, "
2ad00 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
2ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46  "skipping...", F
2ad30 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
2ad40 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  orkVersion)),.. 
2ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2ad70 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad90 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
2ada0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2adb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2add0 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75   (callback == nu
2ade0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2ae00 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
2ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2ae20 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20   (!callback(..  
2ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae40 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2ae50 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
2ae60 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2ae70 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae90 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 6e   platformName, n
2aea0 75 6c 6c 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c  ull, clientData,
2aeb0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aed0 20 20 20 20 20 20 20 77 6f 77 36 34 2c 20 74 68         wow64, th
2aee0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68  rowOnMissing, wh
2aef0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2af20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
2af30 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2af60 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2af70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2af90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2afa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2afb0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2afc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
2afd0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2afe0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2aff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2b030 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2b040 50 65 72 2d 56 69 73 75 61 6c 20 53 74 75 64 69  Per-Visual Studi
2b050 6f 20 56 65 72 73 69 6f 6e 20 48 61 6e 64 6c 69  o Version Handli
2b060 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
2b070 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
2b080 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74  InitializeVsList
2b090 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
2b0a0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2b0b0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
2b0c0 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69       Configurati
2b0d0 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on configuration
2b0e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2b0f0 65 66 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74  ef VsList vsList
2b100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2b110 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2b120 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69          if (vsLi
2b130 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
2b140 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
2b150 69 73 74 20 3d 20 6e 65 77 20 56 73 4c 69 73 74  ist = new VsList
2b160 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2b170 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 52 6f     if (vsList.Ro
2b180 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
2b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1a0 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d  vsList.RootKey =
2b1b0 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20   rootKey;....   
2b1c0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
2b1d0 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
2b1e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2b1f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b200 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2b210 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73  sions = new Vers
2b220 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ionList();....  
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2b240 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2b250 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2b260 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73  nfiguration.NoVs
2b270 32 30 30 35 29 0d 0a 20 20 20 20 20 20 20 20 20  2005)..         
2b280 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
2b290 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e  t.Versions.Add(n
2b2a0 65 77 20 56 65 72 73 69 6f 6e 28 38 2c 20 30 29  ew Version(8, 0)
2b2b0 29 3b 20 2f 2f 20 32 30 30 35 0d 0a 0d 0a 20 20  ); // 2005....  
2b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2b2d0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2b2e0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2b2f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73  nfiguration.NoVs
2b300 32 30 30 38 29 0d 0a 20 20 20 20 20 20 20 20 20  2008)..         
2b310 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
2b320 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e  t.Versions.Add(n
2b330 65 77 20 56 65 72 73 69 6f 6e 28 39 2c 20 30 29  ew Version(9, 0)
2b340 29 3b 20 2f 2f 20 32 30 30 38 0d 0a 0d 0a 20 20  ); // 2008....  
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2b360 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2b370 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2b380 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73  nfiguration.NoVs
2b390 32 30 31 30 29 0d 0a 20 20 20 20 20 20 20 20 20  2010)..         
2b3a0 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
2b3b0 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e  t.Versions.Add(n
2b3c0 65 77 20 56 65 72 73 69 6f 6e 28 31 30 2c 20 30  ew Version(10, 0
2b3d0 29 29 3b 2f 2f 20 32 30 31 30 0d 0a 0d 0a 20 20  ));// 2010....  
2b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2b3f0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2b400 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2b410 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73  nfiguration.NoVs
2b420 32 30 31 32 29 0d 0a 20 20 20 20 20 20 20 20 20  2012)..         
2b430 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
2b440 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e  t.Versions.Add(n
2b450 65 77 20 56 65 72 73 69 6f 6e 28 31 31 2c 20 30  ew Version(11, 0
2b460 29 29 3b 2f 2f 20 32 30 31 32 0d 0a 0d 0a 20 20  ));// 2012....  
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2b480 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2b490 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2b4a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73  nfiguration.NoVs
2b4b0 32 30 31 33 29 0d 0a 20 20 20 20 20 20 20 20 20  2013)..         
2b4c0 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
2b4d0 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e  t.Versions.Add(n
2b4e0 65 77 20 56 65 72 73 69 6f 6e 28 31 32 2c 20 30  ew Version(12, 0
2b4f0 29 29 3b 2f 2f 20 32 30 31 33 0d 0a 20 20 20 20  ));// 2013..    
2b500 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2b510 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2b520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b560 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2b570 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2b580 63 20 62 6f 6f 6c 20 48 61 76 65 56 73 56 65 72  c bool HaveVsVer
2b590 73 69 6f 6e 44 69 72 65 63 74 6f 72 79 28 0d 0a  sionDirectory(..
2b5a0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2b5b0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
2b5c0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2b5d0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
2b5e0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2b5f0 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
2b600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2b610 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
2b620 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2b630 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2b640 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2b650 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2b660 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2b670 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2b680 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f  g installDirecto
2b690 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
2b6a0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2b6b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
2b6c0 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
2b6d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b6e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2b6f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
2b700 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
2b710 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
2b720 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
2b730 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b  perUser, wow64);
2b740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b750 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2b760 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
2b770 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2b780 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2b790 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2b7a0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
2b7b0 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
2b7c0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2b7d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b7e0 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2b7f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b810 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
2b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
2b830 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65  bject value = Re
2b840 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74  gistryHelper.Get
2b850 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2b860 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2b870 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c 20 6e   "InstallDir", n
2b880 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ull, whatIf, ver
2b890 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2b8a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28            if (!(
2b8b0 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29  value is string)
2b8c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2b8d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2b8e0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
2b8f0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2b900 69 72 65 63 74 6f 72 79 20 3d 20 28 73 74 72 69  irectory = (stri
2b910 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  ng)value;....   
2b920 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2b930 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
2b940 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
2b950 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2b960 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2b970 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
2b980 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
2b990 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69  ectory.Exists(di
2b9a0 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
2b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b9c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
2b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9e0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2b9f0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2ba00 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
2ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2ba30 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2ba40 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba60 20 20 20 22 56 69 73 75 61 6c 20 53 74 75 64 69     "Visual Studi
2ba70 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69 6e 20 64  o {0} found in d
2ba80 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d  irectory {1}.",.
2ba90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2baa0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2bab0 76 73 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44  vsVersion), ForD
2bac0 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79  isplay(directory
2bad0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2bae0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2baf0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2bb00 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 74              inst
2bb10 61 6c 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 64  allDirectory = d
2bb20 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20  irectory;..     
2bb30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2bb40 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2bb50 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2bb60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2bb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bbb0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2bbc0 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
2bbd0 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
2bbe0 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
2bbf0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2bc00 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 56  ic bool ForEachV
2bc10 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79  sVersionRegistry
2bc20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
2bc30 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69  ockRegistry regi
2bc40 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  stry,..         
2bc50 20 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74     VsList vsList
2bc60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2bc70 69 73 75 61 6c 53 74 75 64 69 6f 52 65 67 69 73  isualStudioRegis
2bc80 74 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c  tryCallback call
2bc90 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
2bca0 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
2bcb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
2bcc0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
2bcd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
2bce0 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
2bcf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2bd00 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
2bd10 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2bd20 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2bd30 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
2bd40 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
2bd50 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
2bd60 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2bd70 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
2bd80 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2bd90 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2bda0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2bdb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2bdc0 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20  if (registry == 
2bdd0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2bde0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2bdf0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2be00 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79 22  nvalid registry"
2be10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2be20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2be30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2be40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2be50 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c  f (vsList == nul
2be60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2be70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2be80 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2be90 6c 69 64 20 56 53 20 6c 69 73 74 22 3b 0d 0a 20  lid VS list";.. 
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2beb0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2bec0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2bed0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2bee0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2bef0 65 79 20 3d 20 76 73 4c 69 73 74 2e 52 6f 6f 74  ey = vsList.Root
2bf00 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Key;....        
2bf10 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
2bf20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2bf30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bf40 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2bf50 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b   "invalid root k
2bf60 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ey";..          
2bf70 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2bf80 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2bf90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2bfa0 20 20 69 66 20 28 21 49 73 53 75 70 70 6f 72 74    if (!IsSupport
2bfb0 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73 74  edRootKey(regist
2bfc0 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20  ry, rootKey)).. 
2bfd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2bff0 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20  ror = "root key 
2c000 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72  must be per-user
2c010 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22   or per-machine"
2c020 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c030 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2c040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c050 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2c060 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f  f (vsList.Versio
2c070 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
2c080 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c090 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2c0a0 72 20 3d 20 22 6e 6f 20 56 53 20 76 65 72 73 69  r = "no VS versi
2c0b0 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  ons found";..   
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c0d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2c0e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c0f0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
2c100 20 28 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73   (Version vsVers
2c110 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74 2e 56 65  ion in vsList.Ve
2c120 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20  rsions)..       
2c130 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c140 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2c150 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2c160 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
2c170 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2c180 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2c190 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2c1a0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2c1b0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2c1c0 20 20 20 20 20 20 20 20 20 20 20 22 76 73 56 65             "vsVe
2c1d0 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46 6f  rsion = {0}", Fo
2c1e0 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69  rDisplay(vsVersi
2c1f0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
2c200 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2c210 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2c230 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65  ring installDire
2c240 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  ctory = null;...
2c250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c260 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72 73   if (!HaveVsVers
2c270 69 6f 6e 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  ionDirectory(.. 
2c280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c290 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2c2a0 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
2c2b0 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  x, perUser, wow6
2c2c0 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  4, whatIf,..    
2c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2e0 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66      verbose, ref
2c2f0 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72   installDirector
2c300 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
2c310 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c320 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2c330 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2c340 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2c350 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
2c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2c370 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2c380 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2c390 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3b0 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 75       "Visual Stu
2c3c0 64 69 6f 20 7b 30 7d 20 6e 6f 74 20 66 6f 75 6e  dio {0} not foun
2c3d0 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c  d, skipping...",
2c3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c3f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
2c400 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29  play(vsVersion))
2c410 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
2c420 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c430 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
2c440 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2c450 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c460 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c           if (cal
2c470 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  lback == null)..
2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c490 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
2c4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c4b0 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d   if (!callback(.
2c4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c4d0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2c4e0 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  , vsVersion, suf
2c4f0 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 69 6e  fix, package, in
2c500 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 2c 0d  stallDirectory,.
2c510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c520 20 20 20 20 20 20 20 20 20 63 6c 69 65 6e 74 44           clientD
2c530 61 74 61 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  ata, perUser, wo
2c540 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  w64, throwOnMiss
2c550 69 6e 67 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  ing, whatIf,..  
2c560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c570 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
2c580 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
2c590 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2c5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c5d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2c5e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2c5f0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2c600 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2c610 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2c620 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2c630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2c680 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ion Configuratio
2c690 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d  n File Handling.
2c6a0 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64  .        [Method
2c6b0 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
2c6c0 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
2c6d0 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  g)]..        pri
2c6e0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2c6f0 20 41 64 64 44 62 50 72 6f 76 69 64 65 72 46 61   AddDbProviderFa
2c700 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
2c710 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
2c720 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2c730 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61    string invaria
2c740 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
2c750 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
2c760 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2c770 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
2c780 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2c790 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
2c7a0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
2c7b0 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
2c7c0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2c7d0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2c7e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2c7f0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2c800 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
2c810 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
2c820 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2c830 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2c840 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2c850 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2c860 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d   dirty = false;.
2c870 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
2c880 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e  Document documen
2c890 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d  t = new XmlDocum
2c8a0 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ent();....      
2c8b0 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50        document.P
2c8c0 72 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63  reserveWhitespac
2c8d0 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
2c8e0 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
2c8f0 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Load(fileName);.
2c900 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58  ...            X
2c910 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65  mlElement addEle
2c920 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
2c930 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
2c940 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c950 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
2c960 28 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d  (XPathForAddElem
2c970 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29  ent, invariant))
2c980 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
2c990 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2c9a0 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d  f (addElement ==
2c9b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2c9c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c9d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
2c9e0 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b  elementNames = {
2c9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ca00 20 20 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61        "system.da
2ca10 74 61 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72  ta", "DbProvider
2ca20 46 61 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20  Factories"..    
2ca30 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a              };..
2ca40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ca50 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65    XmlElement pre
2ca60 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a  viousElement =..
2ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca80 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63      document.Doc
2ca90 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a  umentElement; /*
2caa0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
2cab0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2cac0 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74       foreach (st
2cad0 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65  ring elementName
2cae0 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73   in elementNames
2caf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2cb00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2cb10 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
2cb20 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45  ment = previousE
2cb30 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  lement.SelectSin
2cb40 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
2cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb60 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61    elementName) a
2cb70 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
2cb80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cb90 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d       if (addElem
2cba0 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent == null)..  
2cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2cbe0 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  Element = docume
2cbf0 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74  nt.CreateElement
2cc00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2cc20 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69  lementName, Stri
2cc30 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
2cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc50 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c        previousEl
2cc60 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c  ement.AppendChil
2cc70 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a  d(addElement);..
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
2ccb0 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61  viousElement = a
2ccc0 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20  ddElement;..    
2ccd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2cce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ccf0 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
2cd00 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65  cument.CreateEle
2cd10 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  ment(..         
2cd20 20 20 20 20 20 20 20 20 20 20 20 22 61 64 64 22             "add"
2cd30 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  , String.Empty);
2cd40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cd50 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d      previousElem
2cd60 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28  ent.AppendChild(
2cd70 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a  addElement);....
2cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd90 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2cda0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2cdb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2cdc0 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
2cdd0 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
2cde0 72 69 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d  ribute("name"),.
2cdf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce00 20 20 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e       name, Strin
2ce10 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
2ce20 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nal))..         
2ce30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ce40 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
2ce50 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 6e  .SetAttribute("n
2ce60 61 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20  ame", name);..  
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2ce80 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2ce90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2cea0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
2ceb0 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64  tring.Equals(add
2cec0 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  Element.GetAttri
2ced0 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22  bute("invariant"
2cee0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2cef0 20 20 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e          invarian
2cf00 74 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  t, StringCompari
2cf10 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
2cf20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2cf40 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72  dElement.SetAttr
2cf50 69 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74  ibute("invariant
2cf60 22 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a  ", invariant);..
2cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf80 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2cf90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2cfa0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2cfb0 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
2cfc0 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
2cfd0 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74  ribute("descript
2cfe0 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion"),..        
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 63              desc
2d000 72 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43  ription, StringC
2d010 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
2d020 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
2d030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d040 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53      addElement.S
2d050 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73  etAttribute("des
2d060 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72  cription", descr
2d070 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  iption);..      
2d080 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
2d090 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2d0a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d0b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c        string ful
2d0c0 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69  lTypeName = Stri
2d0d0 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20  ng.Format("{0}, 
2d0e0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2d0f0 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c         typeName,
2d100 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d   assemblyName);.
2d110 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2d120 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
2d130 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74  s(addElement.Get
2d140 41 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22  Attribute("type"
2d150 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2d160 20 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65          fullType
2d170 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70  Name, StringComp
2d180 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
2d190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2d1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d1b0 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41   addElement.SetA
2d1c0 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22 2c  ttribute("type",
2d1d0 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d   fullTypeName);.
2d1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d1f0 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
2d200 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d210 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d220 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66  (dirty || whatIf
2d230 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2d240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d250 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
2d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d270 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2d280 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2d290 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
2d2a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d2b0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2d2c0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2d2d0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2d2e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d300 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b   "addElement = {
2d310 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
2d320 61 64 64 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20  addElement)),.. 
2d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d340 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2d350 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2d360 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
2d370 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
2d380 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
2d390 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61  ment.Save(fileNa
2d3a0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
2d3b0 20 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64          filesMod
2d3c0 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  ified++;....    
2d3d0 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65              save
2d3e0 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
2d3f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2d400 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2d410 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2d420 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2d430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d470 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d  //....        [M
2d480 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
2d490 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
2d4a0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
2d4b0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2d4c0 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72   bool RemoveDbPr
2d4d0 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2d4f0 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ng fileName,..  
2d500 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2d510 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20   invariant,..   
2d520 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2d530 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2d540 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2d550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2d560 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
2d570 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2d580 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
2d590 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2d5a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d5b0 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20     bool dirty = 
2d5c0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2d5d0 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20      XmlDocument 
2d5e0 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58  document = new X
2d5f0 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d  mlDocument();...
2d600 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
2d610 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68  ument.PreserveWh
2d620 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b  itespace = true;
2d630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ..            do
2d640 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65  cument.Load(file
2d650 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2d660 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
2d670 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
2d680 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  cument.SelectSin
2d690 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
2d6a0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
2d6b0 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72  .Format(XPathFor
2d6c0 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61  AddElement, inva
2d6d0 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c  riant)) as XmlEl
2d6e0 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ement;....      
2d6f0 20 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65        if (addEle
2d700 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ment != null).. 
2d710 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2d730 64 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e  dElement.ParentN
2d740 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28  ode.RemoveChild(
2d750 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20  addElement);..  
2d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2d770 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2d780 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d790 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65            XmlEle
2d7a0 6d 65 6e 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65  ment removeEleme
2d7b0 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65  nt = document.Se
2d7c0 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d  lectSingleNode(.
2d7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d7e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58   String.Format(X
2d7f0 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
2d800 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29  ment, invariant)
2d810 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
2d820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d830 69 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  if (removeElemen
2d840 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
2d850 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d860 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76             remov
2d870 65 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e  eElement.ParentN
2d880 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28  ode.RemoveChild(
2d890 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d  removeElement);.
2d8a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d8b0 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
2d8c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d8e0 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66  (dirty || whatIf
2d8f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2d900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d910 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
2d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d930 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2d940 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2d950 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
2d960 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d970 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2d980 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2d990 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2d9a0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9c0 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b   "addElement = {
2d9d0 30 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  0}, removeElemen
2d9e0 74 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  t = {1}",..     
2d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da00 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64     ForDisplay(ad
2da10 64 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69  dElement), ForDi
2da20 73 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d  splay(removeElem
2da30 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ent)),..        
2da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da50 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2da60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2da70 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
2da80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2da90 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61       document.Sa
2daa0 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ve(fileName);...
2dab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dac0 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b   filesModified++
2dad0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2dae0 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75       saved = tru
2daf0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2db00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2db10 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2db20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2db30 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2db40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2db80 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2db90 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
2dba0 73 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  ssDbProviderFact
2dbb0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
2dbc0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
2dbd0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2dbe0 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
2dbf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2dc00 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
2dc10 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2dc20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  description,..  
2dc30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2dc40 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
2dc50 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
2dc60 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d  Name assemblyNam
2dc70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2dc80 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
2dc90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
2dca0 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
2dcb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2dcc0 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
2dcd0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2dce0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2dcf0 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
2dd00 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2dd10 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2dd20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2dd30 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2dd40 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f            ref bo
2dd50 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ol saved,..     
2dd60 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2dd70 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2dd80 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2dd90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
2dda0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2ddb0 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
2ddc0 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
2ddd0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
2dde0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ddf0 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
2de00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2de10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2de30 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e  id framework con
2de40 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64 61 74  fig callback dat
2de50 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
2de60 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2de70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2de80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2de90 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
2dea0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2dec0 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76  urn RemoveDbProv
2ded0 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
2dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2def0 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
2df00 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76  riant, whatIf, v
2df10 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
2df20 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
2df30 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
2df40 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
2df50 20 20 20 20 20 20 20 41 64 64 44 62 50 72 6f 76         AddDbProv
2df60 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
2df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df80 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
2df90 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73  riant, name, des
2dfa0 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61  cription, typeNa
2dfb0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2dfc0 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
2dfd0 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  yName, whatIf, v
2dfe0 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
2dff0 64 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  d, ref error);..
2e000 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2e010 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
2e020 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e040 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50  return RemoveDbP
2e050 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
2e060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e070 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
2e080 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66  nvariant, whatIf
2e090 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
2e0a0 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2e0b0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
2e0c0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
2e0d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2e0e0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2e0f0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2e100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e140 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e150 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d     #region Assem
2e160 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64  bly Folders Hand
2e170 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
2e180 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
2e190 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46  ing GetAssemblyF
2e1a0 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a  oldersKeyName(..
2e1b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2e1c0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2e1d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2e1e0 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
2e1f0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2e200 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
2e210 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
2e220 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2e230 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2e240 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
2e250 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2e260 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e270 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2e280 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2e290 69 73 20 72 65 67 69 73 74 72 79 20 6b 65 79 20  is registry key 
2e2a0 61 70 70 65 61 72 73 20 74 6f 20 61 6c 77 61 79  appears to alway
2e2b0 73 20 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79  s be 32-bit only
2e2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e2d0 20 20 20 20 20 20 20 28 69 2e 65 2e 20 70 72 6f         (i.e. pro
2e2e0 62 61 62 6c 79 20 62 65 63 61 75 73 65 20 69 74  bably because it
2e2f0 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79   is only used by
2e300 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20   Visual..       
2e310 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74       //       St
2e320 75 64 69 6f 2c 20 77 68 69 63 68 20 69 73 20 63  udio, which is c
2e330 75 72 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 20  urrently always 
2e340 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20  32-bit only)... 
2e350 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2e360 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2e370 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69  g format = !Stri
2e380 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2e390 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f  (platformName) ?
2e3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e3b0 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66    "{0}\\Microsof
2e3c0 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33  t\\{1}\\v{2}\\{3
2e3d0 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  }\\AssemblyFolde
2e3e0 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20  rsEx" :..       
2e3f0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
2e400 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
2e410 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c  {2}\\AssemblyFol
2e420 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20  dersEx";....    
2e430 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
2e440 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72  tring.Format(for
2e450 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e  mat, GetRootKeyN
2e460 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77  ame(perUser, wow
2e470 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
2e480 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
2e490 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2e4a0 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
2e4b0 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ame);..        }
2e4c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2e4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e510 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2e520 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2e530 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79  ol AddToAssembly
2e540 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
2e550 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2e560 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
2e570 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2e580 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2e590 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2e5a0 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
2e5b0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2e5c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
2e5d0 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
2e5e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
2e5f0 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
2e600 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2e610 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
2e620 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
2e630 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
2e640 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2e650 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2e660 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2e670 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2e680 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2e690 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2e6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2e6b0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2e6c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2e6d0 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65  eyName = GetAsse
2e6e0 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
2e6f0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2e700 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
2e710 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2e720 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2e730 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  me, perUser,..  
2e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f                wo
2e750 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
2e760 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2e770 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
2e780 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2e790 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7b0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2e7c0 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  me, true, whatIf
2e7d0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2e7e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e7f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e800 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2e820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e830 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2e840 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e860 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2e870 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
2e880 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
2e890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8a0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2e8b0 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
2e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e900 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2e910 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
2e920 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2e930 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
2e940 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e950 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
2e960 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
2e970 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e9a0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
2e9b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e9e0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2e9f0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2ea00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2ea20 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
2ea30 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2ea40 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
2ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea60 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
2ea70 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
2ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea90 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2eaa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eab0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2ead0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2eae0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb00 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64   subKey, null, d
2eb10 69 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66  irectory, whatIf
2eb20 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
2eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2eb40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2eb50 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2eb60 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
2eb70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2eb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebc0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2ebd0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2ebe0 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f  c bool RemoveFro
2ebf0 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
2ec00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
2ec10 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2ec20 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
2ec30 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
2ec40 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
2ec50 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2ec60 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2ec70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2ec80 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
2ec90 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2eca0 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
2ecb0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2ecc0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2ecd0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2ece0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2ecf0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2ed00 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2ed10 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2ed20 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2ed30 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2ed40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2ed50 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2ed60 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2ed70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ed80 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
2ed90 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79  me = GetAssembly
2eda0 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d  FoldersKeyName(.
2edb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2edc0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
2edd0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2ede0 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
2edf0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2ee00 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29            wow64)
2ee10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ee20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2ee30 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
2ee40 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2ee50 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2ee70 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
2ee80 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2ee90 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2eea0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2eeb0 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2eec0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2eed0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eef0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2ef00 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2ef30 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2ef40 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef60 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2ef70 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ef90 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2efa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2efb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2efc0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2efd0 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
2efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eff0 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
2f000 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  me, throwOnMissi
2f010 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
2f020 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
2f030 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2f040 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2f050 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2f060 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2f070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2f0b0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2f0c0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
2f0d0 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
2f0e0 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
2f0f0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2f100 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2f110 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f120 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
2f130 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2f140 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
2f150 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2f160 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
2f170 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2f180 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
2f190 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
2f1a0 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
2f1b0 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
2f1c0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
2f1d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2f1e0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2f1f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
2f200 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
2f210 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2f220 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2f230 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2f240 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2f250 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
2f260 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2f270 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f280 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73         AnyPair<s
2f290 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69  tring, bool> pai
2f2a0 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61  r = clientData a
2f2b0 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67  s AnyPair<string
2f2c0 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20  , bool>;....    
2f2d0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
2f2e0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2f2f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f300 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2f310 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65  = "invalid frame
2f320 77 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61  work callback da
2f330 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
2f340 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2f350 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2f360 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2f370 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
2f380 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f3a0 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41  turn RemoveFromA
2f3b0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
2f3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f3d0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
2f3e0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
2f3f0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
2f400 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
2f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f420 20 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e    LegacyProjectN
2f430 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  ame, perUser, wo
2f440 77 36 34 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  w64, false, what
2f450 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  If, verbose,..  
2f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f470 20 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d    ref error) &&.
2f480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f490 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f   AddToAssemblyFo
2f4a0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
2f4b0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2f4c0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
2f4d0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2f4e0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2f4f0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2f500 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74           Project
2f510 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 70 65  Name, pair.X, pe
2f520 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68  rUser, wow64, wh
2f530 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
2f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f550 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d      ref error);.
2f560 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2f570 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2f580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2f590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f5a0 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72   return RemoveFr
2f5b0 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  omAssemblyFolder
2f5c0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
2f5d0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2f5e0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
2f5f0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2f600 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  , platformName,.
2f610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f620 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65       ProjectName
2f630 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2f640 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
2f650 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2f660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2f670 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
2f680 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2f690 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
2f6a0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2f6b0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
2f6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f700 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2f710 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
2f720 74 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a  tudio Handling..
2f730 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2f740 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
2f750 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d  tVsRootKeyName(.
2f760 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2f770 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
2f780 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2f790 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  64..            
2f7a0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2f7b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f7c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
2f7d0 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
2f7e0 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d 0a  VisualStudio",..
2f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f800 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70  GetRootKeyName(p
2f810 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 29 3b  erUser, wow64));
2f820 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2f830 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2f840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2f880 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2f890 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
2f8a0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  GetVsKeyName(.. 
2f8b0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2f8c0 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
2f8d0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2f8e0 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
2f8f0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
2f900 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
2f910 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
2f920 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2f930 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f940 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
2f950 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
2f960 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f970 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
2f980 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
2f990 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2f9b0 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 47 65  {0}\\{1}{2}", Ge
2f9c0 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70  tVsRootKeyName(p
2f9d0 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 20  erUser, wow64), 
2f9e0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
2f9f0 20 20 20 20 20 20 20 20 20 20 20 20 73 75 66 66              suff
2fa00 69 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ix);..        }.
2fa10 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2fa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2fa70 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
2fa80 64 69 6f 20 44 61 74 61 20 53 6f 75 72 63 65 20  dio Data Source 
2fa90 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
2faa0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2fab0 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 53   bool AddVsDataS
2fac0 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
2fad0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2fae0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2faf0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2fb00 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
2fb10 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2fb20 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
2fb30 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
2fb40 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
2fb50 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
2fb60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2fb70 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2fb80 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2fb90 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2fba0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2fbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2fbc0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2fbd0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2fbe0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2fbf0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2fc00 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2fc10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2fc20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2fc30 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2fc40 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
2fc50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2fc60 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2fc70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2fc80 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
2fc90 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
2fca0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2fcb0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2fcc0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2fcd0 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
2fce0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2fcf0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2fd00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2fd10 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
2fd20 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
2fd30 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
2fd40 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c  suffix, perUser,
2fd50 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2fd60 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2fd70 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2fd80 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2fd90 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2fda0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fdb0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2fdc0 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
2fdd0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2fde0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe00 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
2fe10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fe20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2fe30 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2fe40 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2fe50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fe60 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2fe70 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2fe80 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
2fe90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fea0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2feb0 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
2fec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fed0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2fee0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2fef0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2ff00 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2ff10 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2ff20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2ff30 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2ff40 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2ff60 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c  , "DataSources",
2ff70 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
2ff80 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2ff90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffb0 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
2ffc0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2ffd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fff0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
30000 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
30010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30020 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
30030 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
30040 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61  y key: {0}\\Data
30050 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20  Sources",..     
30060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30070 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
30080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30090 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
300a0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
300b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
300c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300d0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
300e0 65 67 69 73 74 72 79 4b 65 79 20 64 61 74 61 53  egistryKey dataS
300f0 6f 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20  ourceKey =..    
30100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30110 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
30120 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
30130 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20  Key(subKey,..   
30140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30150 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
30160 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f  .DataSourceId.To
30170 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
30180 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
30190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301a0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
301b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
301c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
301d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301e0 20 20 20 69 66 20 28 64 61 74 61 53 6f 75 72 63     if (dataSourc
301f0 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  eKey == null).. 
30200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30210 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30230 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
30240 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
30250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
30270 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
30280 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
30290 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20  }\\{1}", key,.. 
302a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
302c0 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
302d0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
302e0 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
302f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30300 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30310 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
30320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30330 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
30340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
30350 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
30360 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
30370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30380 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65      dataSourceKe
30390 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e  y, null, String.
303a0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
303b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303c0 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61 62 61       "{0} Databa
303d0 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63  se File", Projec
303e0 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d  tName), whatIf,.
303f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30400 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
30410 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
30420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30430 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
30440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30450 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75   NOTE: This valu
30460 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31  e is new as of 1
30470 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20  .0.83.0...      
30480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30490 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
304a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
304b0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
304c0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
304d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304e0 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65      dataSourceKe
304f0 79 2c 20 22 44 65 66 61 75 6c 74 50 72 6f 76 69  y, "DefaultProvi
30500 64 65 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  der",..         
30510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30520 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
30530 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
30540 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
30550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30560 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
30570 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
30580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30590 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
305a0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
305b0 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63 65  ubKey(dataSource
305c0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
305d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305e0 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
305f0 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76 69  "SupportingProvi
30600 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20  ders\\{0}",..   
30610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30620 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
30630 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
30640 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
30650 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  mat)),..        
30660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30670 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
30680 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
30690 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
306a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
306b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
306c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
306d0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
306e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
306f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
30700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30730 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
30740 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
30750 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73  ic bool RemoveVs
30760 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20  DataSource(..   
30770 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
30780 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
30790 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
307a0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
307b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
307c0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
307d0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
307e0 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
307f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
30800 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
30810 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
30820 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
30830 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
30840 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
30850 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
30860 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
30870 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
30880 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
30890 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
308a0 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
308b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
308c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
308d0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
308e0 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
308f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30900 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
30910 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30920 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30930 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29  package == null)
30940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30960 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
30970 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a  d VS package";..
30980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30990 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
309a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
309b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
309c0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
309d0 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
309e0 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72  ion, suffix, per
309f0 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  User, wow64);...
30a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
30a10 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
30a20 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
30a30 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
30a40 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
30a50 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
30a60 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
30a70 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
30a80 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
30a90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30aa0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
30ab0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
30ac0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
30ae0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
30af0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
30b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
30b10 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
30b20 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
30b30 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
30b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b50 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
30b60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30b70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30b80 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
30b90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
30ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
30bb0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
30bc0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
30bd0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
30be0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
30bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c00 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72    key, "DataSour
30c10 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ces", true, what
30c20 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
30c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
30c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30c50 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
30c60 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
30c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30c90 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
30ca0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
30cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
30cd0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
30ce0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
30cf0 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a  \DataSources",..
30d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d10 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
30d20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
30d40 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
30d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30d70 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
30d80 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75  yHelper.DeleteSu
30d90 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20  bKeyTree(..     
30da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30db0 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61     subKey, packa
30dc0 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e  ge.DataSourceId.
30dd0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
30de0 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
30e00 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
30e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30e20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
30e30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
30e40 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
30e50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
30e60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
30e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
30eb0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
30ec0 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
30ed0 65 73 73 56 73 44 61 74 61 53 6f 75 72 63 65 28  essVsDataSource(
30ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
30ef0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
30f00 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
30f10 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
30f20 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
30f30 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
30f40 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
30f50 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
30f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
30f70 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d  ring directory,.
30f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
30f90 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
30fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
30fb0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
30fc0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
30fd0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
30fe0 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
30ff0 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
31000 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
31010 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
31020 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
31030 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
31040 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
31050 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
31060 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31070 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
31080 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
31090 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
310a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
310b0 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
310c0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
310d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
310e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
310f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31100 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
31110 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69  bool> pair = cli
31120 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61  entData as AnyPa
31130 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
31140 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31150 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c   if (pair == nul
31160 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
31170 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31180 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
31190 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20  lid VS callback 
311a0 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
311b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
311c0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
311d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
311e0 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
311f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 72 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61  return AddVsData
31220 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
31230 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
31240 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
31250 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
31260 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
31270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31280 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
31290 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
312a0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
312b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
312c0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
312d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
312e0 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
312f0 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  veVsDataSource(.
31300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31310 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
31320 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
31330 20 70 61 63 6b 61 67 65 2c 20 70 65 72 55 73 65   package, perUse
31340 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  r, wow64,..     
31350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
31360 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
31370 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
31380 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
31390 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
313a0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
313b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
313c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
313d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
313e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
313f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
31400 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
31410 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61  Visual Studio Da
31420 74 61 20 50 72 6f 76 69 64 65 72 20 48 61 6e 64  ta Provider Hand
31430 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
31440 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
31450 6c 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69  l AddVsDataProvi
31460 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
31470 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
31480 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
31490 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
314a0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
314b0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
314c0 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
314d0 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
314e0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
314f0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
31500 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
31510 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
31520 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
31530 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
31540 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
31550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31560 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
31570 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
31580 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
31590 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
315a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
315b0 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
315c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
315d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
315e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
315f0 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
31600 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
31610 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
31620 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
31630 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31640 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
31650 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
31660 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31670 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
31680 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
31690 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
316a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
316b0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
316c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
316d0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
316e0 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
316f0 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
31700 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ix, perUser, wow
31710 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
31720 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
31730 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
31740 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
31750 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
31760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31770 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
31780 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
31790 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
317a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
317b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
317c0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
317d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
317e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
317f0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
31800 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
31810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31820 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
31830 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
31840 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
31850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31860 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
31870 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
31880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31890 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
318a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
318c0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
318d0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
318e0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
318f0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
31900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31910 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44           key, "D
31920 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74  ataProviders", t
31930 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
31940 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
31950 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31970 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
31980 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
31990 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
319a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319b0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
319c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
319d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319e0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
319f0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
31a00 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72  key: {0}\\DataPr
31a10 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20  oviders",..     
31a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a30 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
31a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
31a60 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
31a70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a90 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
31aa0 65 67 69 73 74 72 79 4b 65 79 20 64 61 74 61 50  egistryKey dataP
31ab0 72 6f 76 69 64 65 72 4b 65 79 20 3d 0d 0a 20 20  roviderKey =..  
31ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ad0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
31ae0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
31af0 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20  ubKey(subKey,.. 
31b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b10 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
31b20 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
31b30 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
31b40 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
31b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b60 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
31b70 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
31b80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ba0 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61 50         if (dataP
31bb0 72 6f 76 69 64 65 72 4b 65 79 20 3d 3d 20 6e 75  roviderKey == nu
31bc0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
31be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bf0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
31c00 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
31c10 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
31c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c30 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63      "could not c
31c40 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b  reate registry k
31c50 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  ey: {0}\\{1}", k
31c60 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
31c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c80 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
31c90 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
31ca0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
31cb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cd0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
31ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31cf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
31d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d10 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
31d20 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
31d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d40 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
31d50 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c  ProviderKey, nul
31d60 6c 2c 20 44 65 73 63 72 69 70 74 69 6f 6e 2c 20  l, Description, 
31d70 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
31d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d90 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
31da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31db0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
31dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31dd0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
31de0 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77  his value is new
31df0 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e   as of 1.0.83.0.
31e00 20 20 48 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20    However,..    
31e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 20      //       it 
31e30 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 73  should only be s
31e40 65 74 20 69 66 20 74 68 65 20 70 61 63 6b 61 67  et if the packag
31e50 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  e assembly..    
31e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64      //       and
31e80 20 61 6c 6c 20 74 68 65 20 61 73 73 65 6d 62 6c   all the assembl
31e90 69 65 73 20 69 74 20 72 65 66 65 72 73 20 74 6f  ies it refers to
31ea0 20 61 72 65 20 62 65 69 6e 67 0d 0a 20 20 20 20   are being..    
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ec0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 6c 61      //       pla
31ed0 63 65 64 20 69 6e 74 6f 20 74 68 65 20 67 6c 6f  ced into the glo
31ee0 62 61 6c 20 61 73 73 65 6d 62 6c 79 20 63 61 63  bal assembly cac
31ef0 68 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  he...           
31f00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
31f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31f20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
31f30 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73 73 65 6d  kage.GlobalAssem
31f40 62 6c 79 43 61 63 68 65 29 0d 0a 20 20 20 20 20  blyCache)..     
31f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f80 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
31f90 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fb0 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
31fc0 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 41 73  ProviderKey, "As
31fd0 73 65 6d 62 6c 79 22 2c 0d 0a 20 20 20 20 20 20  sembly",..      
31fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ff0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
32000 65 2e 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 54  e.AssemblyName.T
32010 6f 53 74 72 69 6e 67 28 29 2c 0d 0a 20 20 20 20  oString(),..    
32020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32030 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
32040 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
32050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32060 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
32070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32080 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
32090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320a0 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61  // NOTE: This va
320b0 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66  lue is new as of
320c0 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20   1.0.83.0...    
320d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32100 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
32110 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32130 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
32140 65 72 4b 65 79 2c 20 22 41 73 73 6f 63 69 61 74  erKey, "Associat
32150 65 64 53 6f 75 72 63 65 22 2c 0d 0a 20 20 20 20  edSource",..    
32160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32170 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
32180 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53  DataSourceId.ToS
32190 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
321a0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
321b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
321d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
321e0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
321f0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
32200 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
32210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32220 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
32230 65 79 2c 20 22 49 6e 76 61 72 69 61 6e 74 4e 61  ey, "InvariantNa
32240 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e 74 4e 61  me", InvariantNa
32250 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
32260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32270 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
32280 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
322a0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
322b0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
322c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322d0 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
322e0 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f 67 79  Key, "Technology
322f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
32300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32310 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65  package.AdoNetTe
32320 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53 74 72  chnologyId.ToStr
32330 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
32340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
32360 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
32370 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32380 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
32390 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
323a0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
323b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323c0 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
323d0 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 20 66 69  , "CodeBase", fi
323e0 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 0d  leName, whatIf,.
323f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32400 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
32410 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
32420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32430 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
32440 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
32450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32460 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
32470 69 64 65 72 4b 65 79 2c 20 22 46 61 63 74 6f 72  iderKey, "Factor
32480 79 53 65 72 76 69 63 65 22 2c 0d 0a 20 20 20 20  yService",..    
32490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324a0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
324b0 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69  ServiceId.ToStri
324c0 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20  ng(VsIdFormat), 
324d0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
324e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324f0 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
32500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32510 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
32520 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
32530 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
32540 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
32550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32560 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
32570 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65  jects\\DataConne
32580 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22 2c  ctionUIControl",
32590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
325a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
325b0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
325c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
325d0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
325e0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
325f0 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
32600 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
32610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32620 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
32630 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e  bjects\\DataConn
32640 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 69 65 73  ectionProperties
32650 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
32660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32670 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
32680 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32690 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
326a0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
326b0 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
326c0 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
326d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326e0 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
326f0 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
32700 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72 74 22  nnectionSupport"
32710 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
32720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32730 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
32740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32750 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
32760 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
32770 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
32780 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
32790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327a0 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
327b0 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f 62 6a  Objects\\DataObj
327c0 65 63 74 53 75 70 70 6f 72 74 22 2c 20 77 68 61  ectSupport", wha
327d0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
327e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327f0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
32800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32810 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
32820 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
32830 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey(dataProviderK
32840 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
32850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32860 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63   "SupportedObjec
32870 74 73 5c 5c 44 61 74 61 56 69 65 77 53 75 70 70  ts\\DataViewSupp
32880 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ort", whatIf,.. 
32890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328a0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
328b0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
328c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
328e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
328f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
32900 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
32910 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
32920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32960 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
32970 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
32980 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44  c bool RemoveVsD
32990 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  ataProvider(..  
329a0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
329b0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
329c0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
329d0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
329e0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
329f0 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
32a00 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
32a10 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
32a20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
32a30 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
32a40 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
32a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32a60 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
32a70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
32a80 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
32a90 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
32aa0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
32ab0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
32ac0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
32ad0 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
32ae0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
32af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32b00 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
32b10 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
32b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32b30 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
32b40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
32b60 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
32b70 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
32b80 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65  sion, suffix, pe
32b90 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a  rUser, wow64);..
32ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
32bb0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
32bc0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
32bd0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
32be0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
32bf0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
32c00 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
32c10 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
32c20 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
32c30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
32c40 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
32c50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
32c60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
32c80 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
32c90 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
32ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
32cb0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
32cc0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
32cd0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
32ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cf0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
32d00 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
32d10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32d20 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
32d30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
32d50 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
32d60 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
32d70 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
32d80 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
32d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32da0 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f     key, "DataPro
32db0 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77  viders", true, w
32dc0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
32dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32de0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32df0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
32e00 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
32e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32e30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
32e40 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
32e50 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
32e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e70 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
32e80 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
32e90 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72  0}\\DataProvider
32ea0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
32eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ec0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
32ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ee0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
32ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32f00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
32f20 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
32f30 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
32f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f50 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
32f60 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76  package.DataProv
32f70 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28  iderId.ToString(
32f80 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
32f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fa0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
32fb0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
32fc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
32fd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32fe0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
32ff0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
33000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
33010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33050 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
33060 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
33070 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61  ol ProcessVsData
33080 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
33090 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
330a0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
330b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
330c0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
330d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
330e0 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
330f0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
33100 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
33110 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
33120 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
33130 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
33140 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
33150 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
33160 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
33170 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
33180 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
33190 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
331a0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
331b0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
331c0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
331d0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
331e0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
331f0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
33200 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
33210 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
33220 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
33230 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
33240 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
33250 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
33260 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
33270 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
33280 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33290 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
332a0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
332b0 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
332c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
332d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
332e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
332f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
33300 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
33310 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33320 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
33330 41 64 64 56 73 44 61 74 61 50 72 6f 76 69 64 65  AddVsDataProvide
33340 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
33350 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
33360 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66   vsVersion, suff
33370 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69  ix, package, pai
33380 72 2e 58 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20  r.X, perUser,.. 
33390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333a0 20 20 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66     wow64, whatIf
333b0 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
333c0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
333d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
333e0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
333f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33400 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
33410 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69  emoveVsDataProvi
33420 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
33430 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
33440 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  y, vsVersion, su
33450 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70  ffix, package, p
33460 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a  erUser, wow64,..
33470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33480 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
33490 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
334a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
334b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
334c0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
334d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
334e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
334f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33520 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
33530 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
33540 69 6f 20 50 61 63 6b 61 67 65 20 48 61 6e 64 6c  io Package Handl
33550 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
33560 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
33570 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61 63   InitializeVsPac
33580 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
33590 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
335a0 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  assemblyName,.. 
335b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
335c0 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  globalAssemblyCa
335d0 63 68 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  che,..          
335e0 20 20 72 65 66 20 50 61 63 6b 61 67 65 20 70 61    ref Package pa
335f0 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20  ckage..         
33600 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
33610 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
33620 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
33630 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
33640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33650 20 20 70 61 63 6b 61 67 65 20 3d 20 6e 65 77 20    package = new 
33660 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d 0a 20 20  Package();....  
33670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
33680 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61  ckage.AssemblyNa
33690 6d 65 20 3d 20 61 73 73 65 6d 62 6c 79 4e 61 6d  me = assemblyNam
336a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
336b0 20 20 20 20 70 61 63 6b 61 67 65 2e 47 6c 6f 62      package.Glob
336c0 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
336d0 3d 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  = globalAssembly
336e0 43 61 63 68 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  Cache;....      
336f0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
33700 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  e.AdoNetTechnolo
33710 67 79 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28  gyId = new Guid(
33720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33730 20 20 20 20 20 20 22 37 37 41 42 39 41 39 44 2d        "77AB9A9D-
33740 37 38 42 39 2d 34 42 41 37 2d 39 31 41 43 2d 38  78B9-4BA7-91AC-8
33750 37 33 46 35 33 33 38 46 31 44 32 22 29 3b 0d 0a  73F5338F1D2");..
33760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33770 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67    package.Packag
33780 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d  eId = new Guid(.
33790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
337a0 20 20 20 20 20 22 44 43 42 45 36 43 38 44 2d 30       "DCBE6C8D-0
337b0 45 35 37 2d 34 30 39 39 2d 41 31 38 33 2d 39 38  E57-4099-A183-98
337c0 46 46 37 34 43 36 34 44 39 43 22 29 3b 0d 0a 0d  FF74C64D9C");...
337d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
337e0 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65   package.Service
337f0 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a  Id = new Guid(..
33800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33810 20 20 20 20 22 44 43 42 45 36 43 38 44 2d 30 45      "DCBE6C8D-0E
33820 35 37 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46  57-4099-A183-98F
33830 46 37 34 43 36 34 44 39 44 22 29 3b 0d 0a 0d 0a  F74C64D9D");....
33840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33850 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
33860 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28  ceId = new Guid(
33870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33880 20 20 20 20 20 20 22 30 45 42 41 41 42 36 45 2d        "0EBAAB6E-
33890 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d 43  CA80-4B4A-8DDF-C
338a0 42 45 36 42 46 30 35 38 43 37 31 22 29 3b 0d 0a  BE6BF058C71");..
338b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
338c0 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72    package.DataPr
338d0 6f 76 69 64 65 72 49 64 20 3d 20 6e 65 77 20 47  oviderId = new G
338e0 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
338f0 20 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41            "0EBAA
33900 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44  B6E-CA80-4B4A-8D
33910 44 46 2d 43 42 45 36 42 46 30 35 38 43 37 30 22  DF-CBE6BF058C70"
33920 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
33930 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
33940 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
33950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
33990 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
339a0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41  te static bool A
339b0 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  ddVsPackage(..  
339c0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
339d0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
339e0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
339f0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
33a00 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
33a10 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
33a20 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
33a30 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
33a40 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
33a50 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
33a60 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
33a70 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
33a80 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
33a90 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
33aa0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
33ab0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
33ac0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
33ad0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
33ae0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
33af0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
33b00 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
33b10 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
33b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
33b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b40 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
33b50 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
33b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
33b70 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
33b80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
33b90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
33ba0 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
33bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
33bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bd0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
33be0 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
33bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
33c00 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
33c10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
33c20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
33c30 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
33c40 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
33c50 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55  on, suffix, perU
33c60 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ser, wow64);....
33c70 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
33c80 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
33c90 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
33ca0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
33cb0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
33cc0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
33cd0 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
33ce0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
33cf0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
33d00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33d10 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
33d20 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
33d30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33d40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
33d50 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
33d60 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
33d70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
33d80 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
33d90 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
33da0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
33db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
33dc0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
33dd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33de0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
33df0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
33e00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33e10 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
33e20 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
33e30 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
33e40 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
33e50 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e70 20 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73 22   key, "Packages"
33e80 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
33e90 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
33ea0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ec0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
33ed0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
33ee0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f00 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
33f10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
33f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f30 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
33f40 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
33f50 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63  ry key: {0}\\Pac
33f60 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  kages",..       
33f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f80 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
33f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fa0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
33fb0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
33fc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fe0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
33ff0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
34000 45 3a 20 2a 57 41 52 4e 49 4e 47 2a 20 43 68 61  E: *WARNING* Cha
34010 6e 67 69 6e 67 20 61 6e 79 20 6f 66 20 74 68 65  nging any of the
34020 73 65 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6c  se values will l
34030 69 6b 65 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  ikely..         
34040 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
34050 20 20 20 20 72 65 71 75 69 72 65 20 61 20 6e 65      require a ne
34060 77 20 22 70 61 63 6b 61 67 65 20 6c 6f 61 64 20  w "package load 
34070 6b 65 79 22 20 28 50 4c 4b 29 20 74 6f 20 62 65  key" (PLK) to be
34080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34090 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67        //       g
340a0 65 6e 65 72 61 74 65 64 20 69 6e 20 6f 72 64 65  enerated in orde
340b0 72 20 74 6f 20 70 72 6f 70 65 72 6c 79 20 73 75  r to properly su
340c0 70 70 6f 72 74 20 6c 6f 61 64 69 6e 67 20 74 68  pport loading th
340d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
340e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
340f0 70 61 63 6b 61 67 65 20 69 6e 74 6f 20 56 69 73  package into Vis
34100 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 38 20  ual Studio 2008 
34110 61 6e 64 20 65 61 72 6c 69 65 72 20 77 69 74 68  and earlier with
34120 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  out..           
34130 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
34140 20 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 56    the matching V
34150 69 73 75 61 6c 20 53 74 75 64 69 6f 20 53 44 4b  isual Studio SDK
34160 20 62 65 69 6e 67 20 69 6e 73 74 61 6c 6c 65 64   being installed
34170 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34180 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
34190 50 6c 65 61 73 65 20 72 65 66 65 72 20 74 6f 20  Please refer to 
341a0 74 68 65 20 22 53 51 4c 69 74 65 2e 44 65 73 69  the "SQLite.Desi
341b0 67 6e 65 72 5c 70 6c 6b 2e 74 78 74 22 20 66 69  gner\plk.txt" fi
341c0 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
341d0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
341e0 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e   for the existin
341f0 67 20 6f 66 66 69 63 69 61 6c 20 76 61 6c 75 65  g official value
34200 73 20 61 6e 64 20 75 70 64 61 74 65 20 74 68 65  s and update the
34210 6d 20 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  m if..          
34220 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
34230 20 20 20 6e 65 63 65 73 73 61 72 79 2e 20 20 41     necessary.  A
34240 6c 73 6f 2c 20 74 68 65 20 6e 65 77 6c 79 20 67  lso, the newly g
34250 65 6e 65 72 61 74 65 64 20 70 61 63 6b 61 67 65  enerated package
34260 20 6c 6f 61 64 0d 0a 20 20 20 20 20 20 20 20 20   load..         
34270 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
34280 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 2c 20      key itself, 
34290 77 68 69 63 68 20 69 73 20 61 20 31 32 38 20 63  which is a 128 c
342a0 68 61 72 61 63 74 65 72 20 61 6c 70 68 61 6e 75  haracter alphanu
342b0 6d 65 72 69 63 0d 0a 20 20 20 20 20 20 20 20 20  meric..         
342c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
342d0 20 20 20 20 73 74 72 69 6e 67 2c 20 6d 75 73 74      string, must
342e0 20 62 65 20 70 6c 61 63 65 64 20 69 6e 20 74 68   be placed in th
342f0 65 20 72 65 73 6f 75 72 63 65 20 73 74 72 69 6e  e resource strin
34300 67 20 6e 61 6d 65 64 0d 0a 20 20 20 20 20 20 20  g named..       
34310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
34320 20 20 20 20 20 20 22 34 30 30 22 20 69 6e 20 74        "400" in t
34330 68 65 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67  he "SQLite.Desig
34340 6e 65 72 5c 56 53 50 61 63 6b 61 67 65 2e 72 65  ner\VSPackage.re
34350 73 78 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20  sx" file..      
34360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
34370 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 6e 20         and then 
34380 74 68 65 20 64 65 73 69 67 6e 65 72 20 61 73 73  the designer ass
34390 65 6d 62 6c 79 20 69 74 73 65 6c 66 20 6d 75 73  embly itself mus
343a0 74 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  t be..          
343b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
343c0 20 20 20 72 65 63 6f 6d 70 69 6c 65 64 2e 20 20     recompiled.  
343d0 41 73 20 6f 66 20 74 68 69 73 20 77 72 69 74 69  As of this writi
343e0 6e 67 20 28 69 6e 20 46 65 62 72 75 61 72 79 20  ng (in February 
343f0 32 30 31 32 29 2c 0d 0a 20 20 20 20 20 20 20 20  2012),..        
34400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
34410 20 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69       the followi
34420 6e 67 20 55 52 4c 20 69 73 20 74 68 65 20 70 72  ng URL is the pr
34430 6f 70 65 72 20 70 6c 61 63 65 20 74 6f 20 67 65  oper place to ge
34440 6e 65 72 61 74 65 0d 0a 20 20 20 20 20 20 20 20  nerate..        
34450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
34460 20 20 20 20 20 70 61 63 6b 61 67 65 20 6c 6f 61       package loa
34470 64 20 6b 65 79 73 3a 0d 0a 20 20 20 20 20 20 20  d keys:..       
34480 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
34490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
344a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 74       //       ht
344b0 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69 63 72 6f 73  tp://msdn.micros
344c0 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75 73 2f 76 73  oft.com/en-us/vs
344d0 74 75 64 69 6f 2f 63 63 36 35 35 37 39 35 0d 0a  tudio/cc655795..
344e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
34500 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
34510 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
34520 65 79 20 70 61 63 6b 61 67 65 4b 65 79 20 3d 0d  ey packageKey =.
34530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34540 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
34550 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
34560 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c  teSubKey(subKey,
34570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
34590 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
345a0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
345b0 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  mat), whatIf,.. 
345c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345d0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
345e0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
345f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34610 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
34620 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
34630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34640 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34660 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
34670 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
34680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34690 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
346a0 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72  uld not create r
346b0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
346c0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
346d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346e0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61           key, pa
346f0 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
34700 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
34710 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mat));....      
34720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34730 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
34740 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
34750 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
34760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34770 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
34780 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
34790 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 6e 75  e(packageKey, nu
347a0 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
347b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
347d0 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63  {0} Designer Pac
347e0 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61  kage", ProjectNa
347f0 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
34800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34810 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
34820 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
34830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
34840 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
34850 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
34860 79 2c 20 22 43 6c 61 73 73 22 2c 0d 0a 20 20 20  y, "Class",..   
34870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34880 20 20 20 20 20 20 20 20 20 22 53 51 4c 69 74 65           "SQLite
34890 2e 44 65 73 69 67 6e 65 72 2e 53 51 4c 69 74 65  .Designer.SQLite
348a0 50 61 63 6b 61 67 65 22 2c 20 77 68 61 74 49 66  Package", whatIf
348b0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
348c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348d0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
348e0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
348f0 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 64 65  ackageKey, "Code
34900 42 61 73 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  Base",..        
34910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34920 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68      fileName, wh
34930 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
34940 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34950 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
34960 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
34970 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
34980 49 44 22 2c 20 34 30 30 2c 20 77 68 61 74 49 66  ID", 400, whatIf
34990 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
349a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
349b0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
349c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349d0 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
349e0 74 6f 72 79 20 3d 20 47 65 74 53 79 73 74 65 6d  tory = GetSystem
349f0 44 69 72 65 63 74 6f 72 79 28 77 6f 77 36 34 29  Directory(wow64)
34a00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34a10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
34a20 28 64 69 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75  (directory == nu
34a30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
34a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a50 20 64 69 72 65 63 74 6f 72 79 20 3d 20 53 74 72   directory = Str
34a60 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20  ing.Empty;....  
34a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a80 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
34a90 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
34aa0 63 6b 61 67 65 4b 65 79 2c 20 22 49 6e 70 72 6f  ckageKey, "Inpro
34ab0 63 53 65 72 76 65 72 33 32 22 2c 0d 0a 20 20 20  cServer32",..   
34ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ad0 20 20 20 20 20 20 20 20 20 50 61 74 68 2e 43 6f           Path.Co
34ae0 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
34af0 20 22 6d 73 63 6f 72 65 65 2e 64 6c 6c 22 29 2c   "mscoree.dll"),
34b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
34b20 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
34b30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34b40 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
34b50 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
34b60 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
34b70 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a 20  CompanyName",.. 
34b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b90 20 20 20 20 20 20 20 20 20 20 20 22 68 74 74 70             "http
34ba0 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74 61 2e 73  ://system.data.s
34bb0 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20 77 68 61  qlite.org/", wha
34bc0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
34bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34be0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
34bf0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
34c00 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 4d  e(packageKey, "M
34c10 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a 20 20 20  inEdition",..   
34c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c30 20 20 20 20 20 20 20 20 20 22 73 74 61 6e 64 61           "standa
34c40 72 64 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rd", whatIf, ver
34c50 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
34c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c70 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
34c80 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
34c90 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 4e 61  eKey, "ProductNa
34ca0 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me",..          
34cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cc0 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
34cd0 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61  "{0} Designer Pa
34ce0 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e  ckage", ProjectN
34cf0 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
34d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d10 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
34d20 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
34d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d40 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
34d50 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
34d60 65 79 2c 20 22 50 72 6f 64 75 63 74 56 65 72 73  ey, "ProductVers
34d70 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion",..         
34d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d90 20 20 20 22 31 2e 30 22 2c 20 77 68 61 74 49 66     "1.0", whatIf
34da0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
34db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34dc0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
34dd0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 74 6f  ckRegistryKey to
34de0 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a 20 20 20 20  olboxKey =..    
34df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e00 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
34e10 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
34e20 65 53 75 62 4b 65 79 28 70 61 63 6b 61 67 65 4b  eSubKey(packageK
34e30 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
34e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e50 20 20 20 20 20 22 54 6f 6f 6c 62 6f 78 22 2c 20       "Toolbox", 
34e60 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
34e70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34e80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ea0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 6f            if (to
34eb0 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c 6c  olboxKey == null
34ec0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
34ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f00 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
34f10 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
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 20 20 20 20 20 22 63                "c
34f40 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
34f50 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 22 20  registry key: " 
34f60 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
34f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f80 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 54 6f 6f         "{0}\\Too
34f90 6c 62 6f 78 22 2c 20 70 61 63 6b 61 67 65 4b 65  lbox", packageKe
34fa0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
34fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fc0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
34fd0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
34fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ff0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
35000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35010 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
35020 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
35030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35040 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 6f               too
35050 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66 61 75 6c  lboxKey, "Defaul
35060 74 20 49 74 65 6d 73 22 2c 20 33 2c 20 77 68 61  t Items", 3, wha
35070 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
35080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35090 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
350a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
350b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
350c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
350e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
350f0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
35100 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
35110 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
35120 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
35130 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
35140 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
35150 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c 20   "Menus", true, 
35160 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
35170 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
35180 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35190 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
351a0 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
351b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
351d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
351e0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
351f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
35200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35210 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
35220 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
35230 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20  {0}\\Menus",..  
35240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35250 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
35260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35270 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
35280 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
35290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
352a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
352b0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
352c0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
352d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
352e0 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
352f0 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
35300 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
35310 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
35320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35330 20 20 22 2c 20 31 30 30 30 2c 20 33 22 2c 20 77    ", 1000, 3", w
35340 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
35350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35360 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
35370 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
35380 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
35390 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
353a0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
353b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
353c0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
353d0 22 53 65 72 76 69 63 65 73 22 2c 20 74 72 75 65  "Services", true
353e0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
353f0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
35400 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35410 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35420 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
35430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35440 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35460 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
35470 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
35480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35490 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
354a0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
354b0 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73 22  : {0}\\Services"
354c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
354d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
354e0 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
354f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35500 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
35510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35520 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35530 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
35540 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
35550 65 79 20 73 65 72 76 69 63 65 4b 65 79 20 3d 0d  ey serviceKey =.
35560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35570 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
35580 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
35590 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c  teSubKey(subKey,
355a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
355b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
355c0 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e  ckage.ServiceId.
355d0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
355e0 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  mat), whatIf,.. 
355f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35600 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
35610 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
35620 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35640 20 20 20 20 20 69 66 20 28 73 65 72 76 69 63 65       if (service
35650 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
35660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35670 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35690 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
356a0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
356b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
356d0 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72  uld not create r
356e0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
356f0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
35700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35710 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61           key, pa
35720 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e  ckage.ServiceId.
35730 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
35740 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mat));....      
35750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35760 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
35770 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
35780 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
35790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
357a0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
357b0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
357c0 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20 6e 75  e(serviceKey, nu
357d0 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
357e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357f0 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
35800 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
35810 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c  Format), whatIf,
35820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
35840 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
35850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35860 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
35870 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76 69  r.SetValue(servi
35880 63 65 4b 65 79 2c 20 22 4e 61 6d 65 22 2c 0d 0a  ceKey, "Name",..
35890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358a0 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
358b0 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44  ng.Format("{0} D
358c0 65 73 69 67 6e 65 72 20 53 65 72 76 69 63 65 22  esigner Service"
358d0 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d  , ProjectName),.
358e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
358f0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
35900 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
35910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35920 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
35930 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
35940 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35950 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
35960 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
35970 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
35980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
359a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
359b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
359c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
359d0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
359e0 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65   RemoveVsPackage
359f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
35a00 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
35a10 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
35a20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
35a30 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
35a40 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
35a50 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
35a60 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
35a70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
35a80 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
35a90 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
35aa0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
35ab0 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
35ac0 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
35ad0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
35ae0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
35af0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
35b00 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
35b10 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
35b20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
35b30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35b40 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
35b50 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
35b60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35b70 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
35b80 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72   "invalid VS ver
35b90 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
35ba0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
35bb0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
35bc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35bd0 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
35be0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
35bf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35c00 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
35c10 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
35c20 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
35c30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
35c40 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
35c50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35c60 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
35c70 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d  me = GetVsKeyNam
35c80 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  e(vsVersion, suf
35c90 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  fix, perUser, wo
35ca0 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
35cb0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
35cc0 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
35cd0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
35ce0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
35cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d00 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
35d10 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
35d20 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
35d30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35d40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
35d50 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
35d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
35d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35d80 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
35d90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
35da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35db0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
35dc0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
35dd0 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
35de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35df0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
35e00 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
35e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
35e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35e40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
35e50 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
35e60 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
35e70 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
35e80 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
35e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35ea0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
35eb0 50 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65 2c  Packages", true,
35ec0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
35ed0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
35ee0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
35ef0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
35f00 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
35f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
35f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
35f40 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
35f50 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
35f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f70 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
35f80 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
35f90 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c   {0}\\Packages",
35fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
35fc0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35fe0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
35ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36000 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
36010 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
36020 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65  tryHelper.Delete
36030 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20  SubKeyTree(..   
36040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36050 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63       subKey, pac
36060 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54  kage.PackageId.T
36070 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
36080 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
36090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
360a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
360b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
360c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
360d0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
360e0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
360f0 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
36100 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
36110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36120 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
36130 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68  Menus", true, wh
36140 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
36150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36160 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36170 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
36180 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
36190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
361b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
361c0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
361d0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
361e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361f0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
36200 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
36210 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20  }\\Menus",..    
36220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36230 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
36240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36250 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
36260 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
36270 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
36280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36290 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
362a0 70 65 72 2e 44 65 6c 65 74 65 56 61 6c 75 65 28  per.DeleteValue(
362b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
362c0 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
362d0 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67  , package.Packag
362e0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
362f0 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
36300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36310 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e     throwOnMissin
36320 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  g, whatIf, verbo
36330 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
36340 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36350 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
36360 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
36370 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
36380 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
36390 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
363a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
363b0 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20  ey, "Services", 
363c0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
363d0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
363e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
363f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36400 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
36410 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
36420 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
36430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36440 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
36450 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
36460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36470 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
36480 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
36490 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69   key: {0}\\Servi
364a0 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
364b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364c0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
364d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
364f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
36500 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
36510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36520 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
36530 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
36540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36550 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
36560 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63  , package.Servic
36570 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
36580 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
36590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365a0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
365b0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
365c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
365d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
365e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
365f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
36600 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
36610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36650 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
36660 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
36670 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61 67 65  ProcessVsPackage
36680 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
36690 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
366a0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
366b0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
366c0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
366d0 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
366e0 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
366f0 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
36700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
36710 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
36720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
36730 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
36740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
36750 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
36760 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
36770 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
36780 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
36790 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
367a0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
367b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
367c0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
367d0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
367e0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
367f0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
36800 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36810 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
36820 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
36830 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
36840 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
36850 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
36860 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
36870 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
36880 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36890 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
368a0 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b  alid VS callback
368b0 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
368c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
368d0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
368e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
368f0 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
36900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
36910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36920 20 72 65 74 75 72 6e 20 41 64 64 56 73 50 61 63   return AddVsPac
36930 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
36940 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
36950 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
36960 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20  uffix, package, 
36970 70 61 69 72 2e 58 2c 20 70 65 72 55 73 65 72 2c  pair.X, perUser,
36980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36990 20 20 20 20 20 20 77 6f 77 36 34 2c 20 77 68 61        wow64, wha
369a0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
369b0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
369c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
369d0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
369e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
369f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
36a00 6e 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67  n RemoveVsPackag
36a10 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
36a20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
36a30 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66   vsVersion, suff
36a40 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65 72  ix, package, per
36a50 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20  User, wow64,..  
36a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a70 20 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67    throwOnMissing
36a80 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
36a90 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  e, ref error);..
36aa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
36ab0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
36ac0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
36ad0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
36ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
36b20 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
36b30 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  on Visual Studio
36b40 20 53 65 74 75 70 20 48 61 6e 64 6c 69 6e 67 0d   Setup Handling.
36b50 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
36b60 20 73 74 61 74 69 63 20 76 6f 69 64 20 56 73 44   static void VsD
36b70 65 76 45 6e 76 53 65 74 75 70 4f 75 74 70 75 74  evEnvSetupOutput
36b80 44 61 74 61 52 65 63 65 69 76 65 64 28 0d 0a 20  DataReceived(.. 
36b90 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
36ba0 74 20 73 65 6e 64 65 72 2c 0d 0a 20 20 20 20 20  t sender,..     
36bb0 20 20 20 20 20 20 20 44 61 74 61 52 65 63 65 69         DataRecei
36bc0 76 65 64 45 76 65 6e 74 41 72 67 73 20 65 0d 0a  vedEventArgs e..
36bd0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
36be0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36bf0 20 20 20 20 20 20 50 72 6f 63 65 73 73 20 70 72        Process pr
36c00 6f 63 65 73 73 20 3d 20 73 65 6e 64 65 72 20 61  ocess = sender a
36c10 73 20 50 72 6f 63 65 73 73 3b 0d 0a 0d 0a 20 20  s Process;....  
36c20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
36c30 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
36c40 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
36c50 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
36c60 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
36c70 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
36c80 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
36c90 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
36ca0 20 20 20 20 20 20 56 73 44 65 76 45 6e 76 53 65        VsDevEnvSe
36cb0 74 75 70 46 6f 72 6d 61 74 2c 20 46 6f 72 44 69  tupFormat, ForDi
36cc0 73 70 6c 61 79 28 70 72 6f 63 65 73 73 29 2c 0d  splay(process),.
36cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36ce0 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c   ForDisplay(e)),
36cf0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
36d00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
36d10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
36d60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
36d70 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 56 73  e static void Vs
36d80 44 65 76 45 6e 76 53 65 74 75 70 45 72 72 6f 72  DevEnvSetupError
36d90 44 61 74 61 52 65 63 65 69 76 65 64 28 0d 0a 20  DataReceived(.. 
36da0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
36db0 74 20 73 65 6e 64 65 72 2c 0d 0a 20 20 20 20 20  t sender,..     
36dc0 20 20 20 20 20 20 20 44 61 74 61 52 65 63 65 69         DataRecei
36dd0 76 65 64 45 76 65 6e 74 41 72 67 73 20 65 0d 0a  vedEventArgs e..
36de0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
36df0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36e00 20 20 20 20 20 20 50 72 6f 63 65 73 73 20 70 72        Process pr
36e10 6f 63 65 73 73 20 3d 20 73 65 6e 64 65 72 20 61  ocess = sender a
36e20 73 20 50 72 6f 63 65 73 73 3b 0d 0a 0d 0a 20 20  s Process;....  
36e30 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
36e40 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
36e50 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
36e60 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
36e70 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
36e80 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
36e90 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
36ea0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
36eb0 20 20 20 20 20 20 56 73 44 65 76 45 6e 76 53 65        VsDevEnvSe
36ec0 74 75 70 46 6f 72 6d 61 74 2c 20 46 6f 72 44 69  tupFormat, ForDi
36ed0 73 70 6c 61 79 28 70 72 6f 63 65 73 73 29 2c 0d  splay(process),.
36ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36ef0 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c   ForDisplay(e)),
36f00 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
36f10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
36f20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
36f70 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
36f80 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
36f90 64 56 73 44 65 76 45 6e 76 53 65 74 75 70 28 0d  dVsDevEnvSetup(.
36fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
36fb0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
36fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
36fd0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
36fe0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
36ff0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
37000 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
37010 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
37020 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
37030 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
37040 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
37050 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
37060 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37070 20 20 20 20 69 66 20 28 70 65 72 55 73 65 72 29      if (perUser)
37080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
37090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
370a0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
370b0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 56 69       // NOTE: Vi
370c0 73 75 61 6c 20 53 74 75 64 69 6f 20 64 6f 65 73  sual Studio does
370d0 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 72 75 6e   not support run
370e0 6e 69 6e 67 20 69 6e 20 27 73 65 74 75 70 27 0d  ning in 'setup'.
370f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37100 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 6f   //       mode o
37110 6e 20 61 20 70 65 72 2d 75 73 65 72 20 62 61 73  n a per-user bas
37120 69 73 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 73  is; therefore, s
37130 6b 69 70 20 72 75 6e 6e 69 6e 67 0d 0a 20 20 20  kip running..   
37140 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
37150 20 20 20 20 20 20 69 74 20 69 6e 20 74 68 61 74        it in that
37160 20 63 61 73 65 2e 0d 0a 20 20 20 20 20 20 20 20   case...        
37170 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
37180 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
37190 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
371a0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
371b0 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20  .Medium,..      
371c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
371d0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
371e0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
371f0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37210 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b  "Visual Studio {
37220 30 7d 20 27 73 65 74 75 70 27 20 6d 6f 64 65 20  0} 'setup' mode 
37230 69 73 20 70 65 72 2d 6d 61 63 68 69 6e 65 20 6f  is per-machine o
37240 6e 6c 79 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  nly, " +..      
37250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
37260 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
37270 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f  Display(vsVersio
37280 6e 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  n)), traceCatego
37290 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
372a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
372b0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
372c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
372d0 20 20 20 50 72 6f 63 65 73 73 53 74 61 72 74 49     ProcessStartI
372e0 6e 66 6f 20 73 74 61 72 74 49 6e 66 6f 20 3d 20  nfo startInfo = 
372f0 6e 65 77 20 50 72 6f 63 65 73 73 53 74 61 72 74  new ProcessStart
37300 49 6e 66 6f 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Info();....     
37310 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
37320 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
37330 53 65 74 20 74 68 65 20 63 6f 72 65 20 70 72 6f  Set the core pro
37340 70 65 72 74 69 65 73 20 66 6f 72 20 74 68 65 20  perties for the 
37350 70 72 6f 63 65 73 73 20 74 6f 20 73 74 61 72 74  process to start
37360 2e 20 20 49 6e 20 74 68 69 73 0d 0a 20 20 20 20  .  In this..    
37370 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
37380 20 63 61 73 65 2c 20 77 65 20 61 72 65 20 73 74   case, we are st
37390 61 72 74 69 6e 67 20 74 68 65 20 70 72 69 6d 61  arting the prima
373a0 72 79 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  ry Visual Studio
373b0 20 65 78 65 63 75 74 61 62 6c 65 0d 0a 20 20 20   executable..   
373c0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
373d0 20 20 28 64 65 76 65 6e 76 2e 65 78 65 29 20 69    (devenv.exe) i
373e0 6e 20 22 73 65 74 75 70 22 20 6d 6f 64 65 2c 20  n "setup" mode, 
373f0 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 72  so that it can r
37400 65 66 72 65 73 68 20 69 74 73 0d 0a 20 20 20 20  efresh its..    
37410 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
37420 20 6c 69 73 74 20 6f 66 20 69 6e 73 74 61 6c 6c   list of install
37430 65 64 20 70 61 63 6b 61 67 65 73 20 61 6e 64 20  ed packages and 
37440 74 68 65 69 72 20 61 73 73 6f 63 69 61 74 65 64  their associated
37450 20 72 65 73 6f 75 72 63 65 73 2e 0d 0a 20 20 20   resources...   
37460 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
37470 20 20 20 20 20 20 20 20 20 73 74 61 72 74 49 6e           startIn
37480 66 6f 2e 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  fo.FileName = Pa
37490 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
374a0 74 6f 72 79 2c 20 22 64 65 76 65 6e 76 2e 65 78  tory, "devenv.ex
374b0 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e");..          
374c0 20 20 73 74 61 72 74 49 6e 66 6f 2e 41 72 67 75    startInfo.Argu
374d0 6d 65 6e 74 73 20 3d 20 22 2f 73 65 74 75 70 22  ments = "/setup"
374e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ;..            s
374f0 74 61 72 74 49 6e 66 6f 2e 57 6f 72 6b 69 6e 67  tartInfo.Working
37500 44 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65  Directory = dire
37510 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  ctory;....      
37520 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
37530 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
37540 65 74 20 74 68 65 20 62 6f 6f 6c 65 61 6e 20 66  et the boolean f
37550 6c 61 67 20 70 72 6f 70 65 72 74 69 65 73 20 74  lag properties t
37560 68 61 74 20 72 65 71 75 69 72 65 20 6e 6f 6e 2d  hat require non-
37570 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 20  default..       
37580 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 76 61       //       va
37590 6c 75 65 73 20 66 6f 72 20 74 68 65 20 70 72 6f  lues for the pro
375a0 63 65 73 73 20 74 6f 20 73 74 61 72 74 2e 20 20  cess to start.  
375b0 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77 65  In this case, we
375c0 20 64 6f 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20   do not..       
375d0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 61       //       wa
375e0 6e 74 20 74 68 65 20 73 68 65 6c 6c 20 74 6f 20  nt the shell to 
375f0 62 65 20 75 73 65 64 20 66 6f 72 20 73 74 61 72  be used for star
37600 74 69 6e 67 20 74 68 65 20 70 72 6f 63 65 73 73  ting the process
37610 2e 20 20 49 6e 0d 0a 20 20 20 20 20 20 20 20 20  .  In..         
37620 20 20 20 2f 2f 20 20 20 20 20 20 20 61 64 64 69     //       addi
37630 74 69 6f 6e 2c 20 62 6f 74 68 20 73 74 61 6e 64  tion, both stand
37640 61 72 64 20 6f 75 74 70 75 74 20 61 6e 64 20 65  ard output and e
37650 72 72 6f 72 20 64 61 74 61 20 73 68 6f 75 6c 64  rror data should
37660 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
37670 20 2f 2f 20 20 20 20 20 20 20 72 65 64 69 72 65   //       redire
37680 63 74 65 64 2c 20 73 6f 20 69 74 20 63 61 6e 20  cted, so it can 
37690 62 65 20 6c 6f 67 67 65 64 20 70 72 6f 70 65 72  be logged proper
376a0 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly...           
376b0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
376c0 20 73 74 61 72 74 49 6e 66 6f 2e 55 73 65 53 68   startInfo.UseSh
376d0 65 6c 6c 45 78 65 63 75 74 65 20 3d 20 66 61 6c  ellExecute = fal
376e0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
376f0 20 73 74 61 72 74 49 6e 66 6f 2e 52 65 64 69 72   startInfo.Redir
37700 65 63 74 53 74 61 6e 64 61 72 64 4f 75 74 70 75  ectStandardOutpu
37710 74 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  t = true;..     
37720 20 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f         startInfo
37730 2e 52 65 64 69 72 65 63 74 53 74 61 6e 64 61 72  .RedirectStandar
37740 64 45 72 72 6f 72 20 3d 20 74 72 75 65 3b 0d 0a  dError = true;..
37750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 72  ..            Pr
37760 6f 63 65 73 73 20 70 72 6f 63 65 73 73 20 3d 20  ocess process = 
37770 6e 65 77 20 50 72 6f 63 65 73 73 28 29 3b 0d 0a  new Process();..
37780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
37790 6f 63 65 73 73 2e 53 74 61 72 74 49 6e 66 6f 20  ocess.StartInfo 
377a0 3d 20 73 74 61 72 74 49 6e 66 6f 3b 0d 0a 0d 0a  = startInfo;....
377b0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63              proc
377c0 65 73 73 2e 4f 75 74 70 75 74 44 61 74 61 52 65  ess.OutputDataRe
377d0 63 65 69 76 65 64 20 2b 3d 20 6e 65 77 20 44 61  ceived += new Da
377e0 74 61 52 65 63 65 69 76 65 64 45 76 65 6e 74 48  taReceivedEventH
377f0 61 6e 64 6c 65 72 28 0d 0a 20 20 20 20 20 20 20  andler(..       
37800 20 20 20 20 20 20 20 20 20 56 73 44 65 76 45 6e           VsDevEn
37810 76 53 65 74 75 70 4f 75 74 70 75 74 44 61 74 61  vSetupOutputData
37820 52 65 63 65 69 76 65 64 29 3b 0d 0a 0d 0a 20 20  Received);....  
37830 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 65 73            proces
37840 73 2e 45 72 72 6f 72 44 61 74 61 52 65 63 65 69  s.ErrorDataRecei
37850 76 65 64 20 2b 3d 20 6e 65 77 20 44 61 74 61 52  ved += new DataR
37860 65 63 65 69 76 65 64 45 76 65 6e 74 48 61 6e 64  eceivedEventHand
37870 6c 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ler(..          
37880 20 20 20 20 20 20 56 73 44 65 76 45 6e 76 53 65        VsDevEnvSe
37890 74 75 70 45 72 72 6f 72 44 61 74 61 52 65 63 65  tupErrorDataRece
378a0 69 76 65 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ived);....      
378b0 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
378c0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
378d0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
378e0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
378f0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
37900 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37910 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
37920 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
37930 61 63 6b 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ack, ForDisplay(
37940 73 74 61 72 74 49 6e 66 6f 29 2c 0d 0a 20 20 20  startInfo),..   
37950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37960 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
37970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37980 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
37990 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 27 77 68 61  // NOTE: In 'wha
379a0 74 2d 69 66 27 20 6d 6f 64 65 2c 20 64 6f 20 6e  t-if' mode, do n
379b0 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74 61 72  ot actually star
379c0 74 20 74 68 65 20 70 72 6f 63 65 73 73 2e 0d 0a  t the process...
379d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
379e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
379f0 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
37a00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37a10 20 20 20 20 20 20 20 20 20 70 72 6f 63 65 73 73           process
37a20 2e 53 74 61 72 74 28 29 3b 0d 0a 0d 0a 20 20 20  .Start();....   
37a30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
37a40 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
37a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
37a60 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
37a70 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
37a80 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
37a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37aa0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
37ab0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
37ac0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
37ad0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
37ae0 20 20 20 20 20 20 20 20 20 20 20 20 22 70 72 6f              "pro
37af0 63 65 73 73 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  cess = {0}", For
37b00 44 69 73 70 6c 61 79 28 70 72 6f 63 65 73 73 29  Display(process)
37b10 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
37b20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
37b30 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
37b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
37b50 72 6f 63 65 73 73 2e 42 65 67 69 6e 4f 75 74 70  rocess.BeginOutp
37b60 75 74 52 65 61 64 4c 69 6e 65 28 29 3b 0d 0a 20  utReadLine();.. 
37b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
37b80 72 6f 63 65 73 73 2e 42 65 67 69 6e 45 72 72 6f  rocess.BeginErro
37b90 72 52 65 61 64 4c 69 6e 65 28 29 3b 0d 0a 20 20  rReadLine();..  
37ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
37bb0 6f 63 65 73 73 2e 57 61 69 74 46 6f 72 45 78 69  ocess.WaitForExi
37bc0 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t();..          
37bd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
37be0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
37bf0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
37c00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
37c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
37c50 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
37c60 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d   static bool Rem
37c70 6f 76 65 56 73 44 65 76 45 6e 76 53 65 74 75 70  oveVsDevEnvSetup
37c80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  (..            V
37c90 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
37ca0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
37cb0 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
37cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
37cd0 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
37ce0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
37cf0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
37d00 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
37d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
37d20 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
37d30 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
37d40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37d50 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
37d60 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
37d70 69 6e 63 65 20 56 69 73 75 61 6c 20 53 74 75 64  ince Visual Stud
37d80 69 6f 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  io does not have
37d90 20 61 6e 20 27 75 6e 64 6f 27 20 6f 70 65 72 61   an 'undo' opera
37da0 74 69 6f 6e 20 66 6f 72 0d 0a 20 20 20 20 20 20  tion for..      
37db0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
37dc0 74 73 20 27 73 65 74 75 70 27 20 6d 6f 64 65 2c  ts 'setup' mode,
37dd0 20 73 69 6d 70 6c 79 20 65 78 65 63 75 74 65 20   simply execute 
37de0 74 68 65 20 73 61 6d 65 20 63 6f 6d 6d 61 6e 64  the same command
37df0 20 61 67 61 69 6e 2e 0d 0a 20 20 20 20 20 20 20   again...       
37e00 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 54 68       //       Th
37e10 69 73 20 73 68 6f 75 6c 64 20 66 6f 72 63 65 20  is should force 
37e20 69 74 20 74 6f 20 72 65 66 72 65 73 68 20 69 74  it to refresh it
37e30 73 20 6c 69 73 74 20 6f 66 20 69 6e 73 74 61 6c  s list of instal
37e40 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  led..           
37e50 20 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67   //       packag
37e60 65 73 20 61 6e 64 20 74 68 65 69 72 20 61 73 73  es and their ass
37e70 6f 63 69 61 74 65 64 20 72 65 73 6f 75 72 63 65  ociated resource
37e80 73 20 28 69 2e 65 2e 20 74 68 69 73 20 77 69 6c  s (i.e. this wil
37e90 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  l..            /
37ea0 2f 20 20 20 20 20 20 20 65 66 66 65 63 74 69 76  /       effectiv
37eb0 65 6c 79 20 27 72 65 6d 6f 76 65 27 20 74 68 65  ely 'remove' the
37ec0 20 70 61 63 6b 61 67 65 20 62 65 69 6e 67 20 70   package being p
37ed0 72 6f 63 65 73 73 65 64 20 73 69 6e 63 65 0d 0a  rocessed since..
37ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
37ef0 20 20 20 20 20 74 68 69 73 20 69 73 20 62 65 69       this is bei
37f00 6e 67 20 64 6f 6e 65 20 61 66 74 65 72 20 61 6c  ng done after al
37f10 6c 20 74 68 65 20 6f 74 68 65 72 20 63 68 61 6e  l the other chan
37f20 67 65 73 20 66 6f 72 20 74 68 65 0d 0a 20 20 20  ges for the..   
37f30 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
37f40 20 20 70 61 63 6b 61 67 65 20 72 65 6d 6f 76 61    package remova
37f50 6c 20 68 61 76 65 20 62 65 65 6e 20 63 6f 6d 70  l have been comp
37f60 6c 65 74 65 64 29 2e 0d 0a 20 20 20 20 20 20 20  leted)...       
37f70 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
37f80 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
37f90 73 44 65 76 45 6e 76 53 65 74 75 70 28 0d 0a 20  sDevEnvSetup(.. 
37fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
37fb0 73 56 65 72 73 69 6f 6e 2c 20 64 69 72 65 63 74  sVersion, direct
37fc0 6f 72 79 2c 20 70 65 72 55 73 65 72 2c 20 77 68  ory, perUser, wh
37fd0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
37fe0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
37ff0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
38000 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
38010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38040 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
38050 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
38060 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56  ic bool ProcessV
38070 73 44 65 76 45 6e 76 53 65 74 75 70 28 0d 0a 20  sDevEnvSetup(.. 
38080 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
38090 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
380a0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
380b0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
380c0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
380d0 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
380e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
380f0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
38100 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
38110 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
38120 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
38130 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
38140 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
38150 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
38160 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
38170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
38180 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
38190 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
381a0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
381b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
381c0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
381d0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
381e0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
381f0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
38200 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
38210 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
38220 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
38230 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
38240 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
38250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
38260 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
38270 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
38280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38290 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
382a0 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74   VS callback dat
382b0 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
382c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
382d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
382e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
382f0 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
38300 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
38310 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
38320 75 72 6e 20 41 64 64 56 73 44 65 76 45 6e 76 53  urn AddVsDevEnvS
38330 65 74 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20  etup(..         
38340 20 20 20 20 20 20 20 20 20 20 20 76 73 56 65 72             vsVer
38350 73 69 6f 6e 2c 20 64 69 72 65 63 74 6f 72 79 2c  sion, directory,
38360 20 70 65 72 55 73 65 72 2c 20 77 68 61 74 49 66   perUser, whatIf
38370 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
38380 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
38390 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
383a0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
383b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
383c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
383d0 65 6d 6f 76 65 56 73 44 65 76 45 6e 76 53 65 74  emoveVsDevEnvSet
383e0 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  up(..           
383f0 20 20 20 20 20 20 20 20 20 76 73 56 65 72 73 69           vsVersi
38400 6f 6e 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 70  on, directory, p
38410 65 72 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20  erUser, whatIf, 
38420 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
38430 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
38440 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
38450 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
38460 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  on..        #end
38470 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
38480 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
38490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
384d0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 70 70       #region App
384e0 6c 69 63 61 74 69 6f 6e 20 45 6e 74 72 79 20 50  lication Entry P
384f0 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 5b 4d  oint..        [M
38500 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
38510 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
38520 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
38530 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
38540 20 69 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20   int Main(..    
38550 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
38560 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20   args..         
38570 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
38580 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
38590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
385a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
385b0 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
385c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e  onfiguration = n
385d0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
385e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72        string err
385f0 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  or = null;....  
38600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
38610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
38650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38660 20 23 72 65 67 69 6f 6e 20 44 65 62 75 67 67 65   #region Debugge
38670 72 20 48 6f 6f 6b 0d 0a 20 20 20 20 20 20 20 20  r Hook..        
38680 20 20 20 20 20 20 20 20 69 66 20 28 45 6e 76 69          if (Envi
38690 72 6f 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69 72  ronment.GetEnvir
386a0 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22  onmentVariable("
386b0 42 72 65 61 6b 22 29 20 21 3d 20 6e 75 6c 6c 29  Break") != null)
386c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
386d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
386e0 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
386f0 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20  .WriteLine(..   
38700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38710 20 20 20 20 20 22 41 74 74 61 63 68 20 61 20 64       "Attach a d
38720 65 62 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65  ebugger to proce
38730 73 73 20 7b 30 7d 20 61 6e 64 20 22 20 2b 0d 0a  ss {0} and " +..
38740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38750 20 20 20 20 20 20 20 20 22 70 72 65 73 73 20 61          "press a
38760 6e 79 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e  ny key to contin
38770 75 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ue.",..         
38780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
38790 72 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e  rocess.GetCurren
387a0 74 50 72 6f 63 65 73 73 28 29 2e 49 64 29 3b 0d  tProcess().Id);.
387b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
387c0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
387d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
387f0 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
38800 6c 65 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29  le.ReadKey(true)
38810 3b 20 2f 2a 20 74 68 72 6f 77 2