System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6b2edadf785da642eeb158d7271c0a92e795f604:


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 0d 0a 20 20 20 20 20 20 20 20    else..        
248c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
248d0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
248e0 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29  value.ToString()
248f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24900 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e       if (result.
24910 4c 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20  Length == 0)..  
24920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24930 20 20 72 65 74 75 72 6e 20 22 3c 65 6d 70 74 79    return "<empty
24940 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  >";....         
24950 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
24960 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24980 20 20 20 20 74 79 70 65 2e 49 73 53 75 62 63 6c      type.IsSubcl
24990 61 73 73 4f 66 28 74 79 70 65 6f 66 28 56 61 6c  assOf(typeof(Val
249a0 75 65 54 79 70 65 29 29 20 3f 20 22 7b 30 7d 22  ueType)) ? "{0}"
249b0 20 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20   : "\"{0}\"",.. 
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249d0 20 20 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20     result);..   
249e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
249f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24a00 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
24a10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
24a20 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
24a30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24a80 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73        #region As
24a90 73 65 6d 62 6c 79 20 41 74 74 72 69 62 75 74 65  sembly Attribute
24aa0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
24ab0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
24ac0 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d   string GetAssem
24ad0 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
24ae0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  (..            A
24af0 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
24b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
24b10 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
24b20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
24b30 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly != null).. 
24b40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24b60 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
24b70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24b80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
24b90 73 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64  sembly.IsDefined
24ba0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24bc0 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f  ypeof(AssemblyCo
24bd0 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69  nfigurationAttri
24be0 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a  bute), false))..
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
24c20 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
24c30 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 63 6f  tionAttribute co
24c40 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20  nfiguration =.. 
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c60 20 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65             (Asse
24c70 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
24c80 6e 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20  nAttribute)..   
24c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ca0 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
24cb0 79 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69  y.GetCustomAttri
24cc0 62 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20  butes(..        
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ce0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41          typeof(A
24cf0 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
24d00 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 0d  tionAttribute),.
24d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d30 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20   false)[0];.... 
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
24d60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66  nfiguration.Conf
24d70 69 67 75 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20  iguration;..    
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
24da0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
24db0 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
24dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24de0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
24df0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
24e00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
24e10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24e20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
24e30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
24e40 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24e90 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
24ea0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
24eb0 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
24ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
24ed0 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d  sembly assembly.
24ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
24ef0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24f00 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
24f10 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly != null)..  
24f20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
24f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24f50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24f60 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
24f70 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28  embly.IsDefined(
24f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
24fa0 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74  peof(AssemblyTit
24fb0 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20 66 61  leAttribute), fa
24fc0 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lse))..         
24fd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ff0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 54 69        AssemblyTi
25000 74 6c 65 41 74 74 72 69 62 75 74 65 20 74 69 74  tleAttribute tit
25010 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  le =..          
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25030 20 20 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65    (AssemblyTitle
25040 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20  Attribute)..    
25050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25060 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79          assembly
25070 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62  .GetCustomAttrib
25080 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  utes(..         
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250a0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
250b0 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
250c0 62 75 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d  bute), false)[0]
250d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
250e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
250f0 75 72 6e 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b  urn title.Title;
25100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25110 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
25120 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25130 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
25140 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
25150 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25160 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
25170 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
25180 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25190 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
251a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
251b0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
251c0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
251d0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
251e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
251f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25220 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
25230 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
25240 20 46 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c   Framework Handl
25250 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
25260 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
25270 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52  ng GetFrameworkR
25280 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ootKeyName(..   
25290 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
252a0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
252b0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
252c0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
252d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
252e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
252f0 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c  ing.Format("{0}\
25300 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54  \Microsoft\\.NET
25310 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20  Framework",..   
25320 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
25330 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55  RootKeyName(perU
25340 73 65 72 2c 20 77 6f 77 36 34 29 29 3b 0d 0a 20  ser, wow64));.. 
25350 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25360 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
25370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
253b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
253c0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
253d0 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65  FrameworkKeyName
253e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
253f0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
25400 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
25410 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
25420 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
25430 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
25440 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
25450 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
25460 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
25470 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
25480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
25490 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
254a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
254b0 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e  ormat = !String.
254c0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c  IsNullOrEmpty(pl
254d0 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20  atformName) ?.. 
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
254f0 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
25500 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20  {1}\\v{2}\\{3}" 
25510 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
25520 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
25530 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d  ft\\{1}\\v{2}";.
25540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
25550 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
25560 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52  mat(format, GetR
25570 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73  ootKeyName(perUs
25580 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20  er, wow64),..   
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
255a0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
255b0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
255c0 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20  atformName);..  
255d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
255e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
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 0d 0a 0d 0a 20 20  //////////....  
25630 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
25640 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 49  atic string GetI
25650 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
25660 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
25670 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
25680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
25690 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
256a0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
256b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
256c0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
256d0 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 0d  mbly assembly =.
256e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
256f0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 2e 52 65       Assembly.Re
25700 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64  flectionOnlyLoad
25710 46 72 6f 6d 28 66 69 6c 65 4e 61 6d 65 29 3b 20  From(fileName); 
25720 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
25730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25740 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e  f (assembly != n
25750 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
25760 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25770 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52   assembly.ImageR
25780 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a  untimeVersion;..
25790 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
257a0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
257b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
257c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
257d0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
257e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
257f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
25800 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
25810 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25820 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25860 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
25870 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
25880 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61  ic string GetFra
25890 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
258a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
258b0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
258c0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
258d0 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
258e0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
258f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
25900 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
25910 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
25920 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
25930 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
25940 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
25950 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
25960 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
25970 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
25980 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
25990 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
259a0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
259b0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
259c0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
259d0 79 2c 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52  y, GetFrameworkR
259e0 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73  ootKeyName(perUs
259f0 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20  er, wow64),..   
25a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a10 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
25a20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
25a30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25a40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
25a50 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a70 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
25a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a90 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52  object value = R
25aa0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65  egistryHelper.Ge
25ab0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
25ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
25ad0 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c  , "InstallRoot",
25ae0 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76   null, whatIf, v
25af0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
25b00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25b10 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
25b20 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
25b30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25b40 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
25b50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25b60 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
25b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b80 20 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65     (string)value
25b90 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
25ba0 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72  "v{0}", framewor
25bb0 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20  kVersion));..   
25bc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25bd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
25be0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
25bf0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25c40 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
25c50 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c  Per-Framework/Pl
25c60 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d  atform Handling.
25c70 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25c80 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69   static void Ini
25c90 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b  tializeFramework
25ca0 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20  List(..         
25cb0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
25cc0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
25cd0 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
25ce0 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
25cf0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
25d00 20 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b     ref Framework
25d10 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69  List frameworkLi
25d20 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..            
25d30 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
25d40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
25d50 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e  ameworkList == n
25d60 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
25d70 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
25d80 69 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77  ist = new Framew
25d90 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  orkList();....  
25da0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
25db0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74  ameworkList.Root
25dc0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
25de0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74  ameworkList.Root
25df0 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a  Key = rootKey;..
25e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
25e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
25e60 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
25e70 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  st.Names == null
25e80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
25e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25ea0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
25eb0 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69  Names = new Stri
25ec0 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
25ee0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
25ef0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
25f00 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
25f10 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
25f20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
25f30 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41  workList.Names.A
25f40 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  dd(".NETFramewor
25f50 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  k");....        
25f60 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
25f70 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
25f80 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
25f90 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
25fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25fb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25fc0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
25fd0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64  rkList.Names.Add
25fe0 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61  (".NETCompactFra
25ff0 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20  mework");..     
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26010 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
26020 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70  es.Add(".NETComp
26030 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d  actFramework");.
26040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26050 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
26060 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e  st.Names.Add(".N
26070 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
26080 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rk");..         
26090 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
260a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
260b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
260c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26100 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
26110 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
26120 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
26130 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
26150 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
26160 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69  ions = new Versi
26170 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20  onMap();....    
26180 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26190 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
261a0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
261b0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b  iguration.NoDesk
261c0 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20  top)..          
261d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
261f0 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f 70  sionList desktop
26200 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65  VersionList = ne
26210 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
26220 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26230 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
26240 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
26250 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
26260 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29  ation.NoNetFx20)
26270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26280 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
26290 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  pVersionList.Add
262a0 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20  (new Version(2, 
262b0 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20  0, 50727));.... 
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
262e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
262f0 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61  TE: The .NET Fra
26300 6d 65 77 6f 72 6b 20 33 2e 35 20 64 6f 65 73 20  mework 3.5 does 
26310 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e  not have its own
26320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26330 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
26340 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65  irectory; howeve
26350 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20  r, it still may 
26360 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20  have assembly.. 
26370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26380 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64     //       fold
26390 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56  ers for use in V
263a0 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74  isual Studio, et
263b0 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c...            
263c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
263d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263e0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
263f0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
26400 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
26410 4e 65 74 46 78 33 35 29 0d 0a 20 20 20 20 20 20  NetFx35)..      
26420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26430 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
26440 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
26450 73 69 6f 6e 28 33 2c 20 35 29 29 3b 0d 0a 0d 0a  sion(3, 5));....
26460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26470 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
26480 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
26490 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
264a0 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20  n.NoNetFx40)..  
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264c0 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
264d0 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
264e0 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33   Version(4, 0, 3
264f0 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  0319));....     
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26510 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
26520 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
26530 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  The .NET Framewo
26540 72 6b 20 34 2e 35 20 64 6f 65 73 20 6e 6f 74 20  rk 4.5 does not 
26550 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20  have its own..  
26560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26570 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63    //       direc
26580 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69  tory; however, i
26590 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65  t still may have
265a0 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
265c0 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20  /       folders 
265d0 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61  for use in Visua
265e0 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a  l Studio, etc...
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26600 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
26610 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26620 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
26630 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
26640 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
26650 78 34 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x45)..          
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
26670 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
26680 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
26690 28 34 2c 20 35 2c 20 35 30 37 30 39 29 29 3b 0d  (4, 5, 50709));.
266a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
266b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
266d0 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
266e0 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 2e 31   Framework 4.5.1
266f0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69   does not have i
26700 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  ts own..        
26710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
26720 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20       directory; 
26730 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c  however, it stil
26740 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d  l may have assem
26750 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bly..           
26760 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
26770 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73    folders for us
26780 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64  e in Visual Stud
26790 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  io, etc...      
267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
267b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
267c0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
267d0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
267e0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
267f0 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 31 29 0d  ion.NoNetFx451).
26800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26810 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
26820 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
26830 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35  new Version(4, 5
26840 2c 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  , 1));....      
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
26860 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
26870 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46 72  ions.Add(".NETFr
26880 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20  amework",..     
26890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268a0 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
268b0 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20  nList);..       
268c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
268d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
268e0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
268f0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
26900 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f  nfiguration.NoCo
26910 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
26920 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26940 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
26950 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 43  sions.Add(".NETC
26960 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
26970 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26980 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
26990 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56  ersionList(new V
269a0 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20  ersion[] {..    
269b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269c0 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28      new Version(
269d0 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65 77  2, 0, 0, 0), new
269e0 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 30   Version(3, 5, 0
269f0 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  , 0)..          
26a00 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b 0d 0a            }));..
26a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
26a30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
26a90 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
26aa0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
26ab0 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
26ac0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
26ae0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
26af0 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74  rmNames = new St
26b00 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26b20 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
26b30 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
26b40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
26b50 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
26b70 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
26b80 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75 6c  ormNames.Add(nul
26b90 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
26ba0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
26bb0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
26bc0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
26bd0 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
26be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26bf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26c00 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
26c10 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
26c20 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65 74 50  mes.Add("PocketP
26c30 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  C");..          
26c40 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
26c50 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
26c60 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61 72 74  Names.Add("Smart
26c70 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20 20  phone");..      
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
26c90 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
26ca0 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 57  formNames.Add("W
26cb0 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20  indowsCE");..   
26cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
26ce0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26cf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
26d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
26d40 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
26d50 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46  tatic bool HaveF
26d60 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
26d70 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
26d80 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
26d90 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
26da0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
26db0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
26dc0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
26dd0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
26de0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
26df0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
26e00 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
26e10 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
26e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
26e30 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
26e40 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
26e50 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
26e60 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
26e70 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
26e80 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72  tring installDir
26e90 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..        
26ea0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
26eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
26ec0 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
26ed0 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61  etFrameworkKeyNa
26ee0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
26ef0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
26f00 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
26f10 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
26f20 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  me, perUser,..  
26f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f                wo
26f40 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
26f50 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
26f60 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
26f70 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
26f80 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
26f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fa0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
26fb0 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
26fc0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
26fd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26ff0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
27020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27030 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
27040 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f  Name != null) //
27050 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d   NOTE: Skip non-
27060 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20  desktop...      
27070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27080 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  turn true;....  
27090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
270a0 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
270b0 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
270c0 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
270d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
270e0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56  tKey, frameworkV
270f0 65 72 73 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c  ersion, perUser,
27100 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d   wow64, whatIf,.
27110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27120 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
27130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27140 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
27150 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63  ullOrEmpty(direc
27160 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
27170 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27180 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
27190 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
271a0 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73  (!Directory.Exis
271b0 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ts(directory))..
271c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
271e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
271f0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
27200 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
27210 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
27220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27230 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
27240 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
27250 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
27260 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
27270 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
27280 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e  amework {0} foun
27290 64 20 76 69 61 20 64 69 72 65 63 74 6f 72 79 20  d via directory 
272a0 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
272b0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
272c0 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
272d0 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73  Version), ForDis
272e0 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
272f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27300 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
27310 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
27320 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c            instal
27330 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72  lDirectory = dir
27340 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
27350 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27360 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
27370 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
27380 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
27390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
273e0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
273f0 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 52  l HaveFrameworkR
27400 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
27410 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
27420 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
27430 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
27440 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
27450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
27460 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
27470 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
27480 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
27490 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
274a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
274b0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
274c0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
274d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
274e0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
274f0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
27500 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
27510 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
27520 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
27530 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72   keyName = GetFr
27540 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d  ameworkKeyName(.
27550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27560 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
27570 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27580 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
27590 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
275a0 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29            wow64)
275b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
275c0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
275d0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
275e0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
275f0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
27600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
27610 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
27620 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
27630 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
27640 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27650 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
27660 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27680 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276a0 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  if (platformName
276b0 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54   != null) // NOT
276c0 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b  E: Skip non-desk
276d0 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  top...          
276e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
276f0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
27700 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
27710 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
27720 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
27730 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
27740 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
27750 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
27760 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
27770 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
27780 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
27790 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
277a0 20 66 6f 75 6e 64 20 76 69 61 20 72 65 67 69 73   found via regis
277b0 74 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20  try {1}.",..    
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277d0 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
277e0 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f  workVersion), Fo
277f0 72 44 69 73 70 6c 61 79 28 6b 65 79 4e 61 6d 65  rDisplay(keyName
27800 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
27810 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
27820 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
27830 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27840 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
27850 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27860 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
27870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
278c0 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
278d0 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
278e0 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
278f0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
27900 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68  tic bool ForEach
27910 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28  FrameworkConfig(
27920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
27930 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73  ckRegistry regis
27940 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
27950 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    FrameworkList 
27960 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a  frameworkList,..
27970 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
27980 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62  eworkConfigCallb
27990 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ack callback,.. 
279a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
279b0 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f  g version, /* NO
279c0 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f  TE: Optional. */
279d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
279e0 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
279f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
27a00 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
27a10 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
27a20 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  scription,..    
27a30 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
27a40 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
27a50 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
27a60 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
27a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
27a80 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
27a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
27aa0 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
27ab0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
27ac0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
27ad0 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
27ae0 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
27af0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
27b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
27b10 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
27b20 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f           ref boo
27b30 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20  l saved,..      
27b40 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
27b50 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
27b60 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
27b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
27b80 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75   (registry == nu
27b90 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27ba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27bb0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
27bc0 61 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d  alid registry";.
27bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27be0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
27bf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
27c10 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d  (frameworkList =
27c20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27c30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27c40 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
27c50 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f  "invalid framewo
27c60 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20  rk list";..     
27c70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27c80 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
27c90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27ca0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
27cb0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d  tryKey rootKey =
27cc0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52   frameworkList.R
27cd0 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
27ce0 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
27cf0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
27d00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27d10 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
27d20 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f  r = "invalid roo
27d30 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20  t key";..       
27d40 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27d50 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
27d60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27d70 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70       if (!IsSupp
27d80 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67  ortedRootKey(reg
27d90 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29  istry, rootKey))
27da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27dc0 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b   error = "root k
27dd0 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75  ey must be per-u
27de0 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69  ser or per-machi
27df0 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne";..          
27e00 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
27e10 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
27e20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27e30 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
27e40 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  ist.Names == nul
27e50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
27e60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27e70 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66     error = "no f
27e80 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66  ramework names f
27e90 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
27ea0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
27eb0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
27ec0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27ed0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
27ee0 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  kList.Versions =
27ef0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27f00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27f10 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
27f20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65  "no framework ve
27f30 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a  rsions found";..
27f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f50 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
27f60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27f70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27f80 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
27f90 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e  atformNames == n
27fa0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
27fb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27fc0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
27fd0 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20   platform names 
27fe0 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
27ff0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28000 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
28010 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28020 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
28030 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
28040 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  nt != frameworkL
28050 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
28060 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20  s.Count)..      
28070 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28080 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
28090 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
280a0 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63  framework name c
280b0 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f  ount {0} does no
280c0 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  t " +..         
280d0 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63             "matc
280e0 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20  h platform name 
280f0 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d  count {1}", fram
28100 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
28110 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  Count,..        
28120 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
28130 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
28140 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d  rmNames.Count);.
28150 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28160 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
28170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
28190 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
281a0 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65  0; index < frame
281b0 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
281c0 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ount; index++)..
281d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
281e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
281f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
28200 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
28210 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
28220 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e   framework (e.g.
28230 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22   ".NETFramework"
28240 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28250 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20     //       and 
28260 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
28270 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22  platform (e.g. "
28280 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20  WindowsCE")...  
28290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
282a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
282b0 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
282c0 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f  rkName = framewo
282d0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64  rkList.Names[ind
282e0 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex];..          
282f0 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
28300 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d  tformName = fram
28310 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
28320 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d  rmNames[index];.
28330 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28340 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
28350 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
28360 53 6b 69 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73  Skip all non-des
28370 6b 74 6f 70 20 66 72 61 6d 65 77 6f 72 6b 73 20  ktop frameworks 
28380 28 69 2e 65 2e 20 69 66 20 74 68 65 20 70 6c 61  (i.e. if the pla
28390 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  tform..         
283a0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
283b0 6e 61 6d 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c  name is not null
283c0 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
283d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
283e0 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74          if (plat
283f0 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  formName != null
28400 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28410 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
28420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28430 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
28440 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
28450 20 47 72 61 62 20 74 68 65 20 73 75 70 70 6f 72   Grab the suppor
28460 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ted versions of 
28470 74 68 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d  this particular.
28480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28490 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77   //       framew
284a0 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ork...          
284b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
284c0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
284d0 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56  nList frameworkV
284e0 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20  ersionList;.... 
284f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
28500 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75  f (version != nu
28510 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28520 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
28540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28550 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e      // NOTE: Man
28560 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20  ual override of 
28570 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77  the *ONE* framew
28580 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20  ork version..   
28590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285a0 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f   //       to pro
285b0 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
285c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285e0 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73     frameworkVers
285f0 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65  ionList = new Ve
28600 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20  rsionList();..  
28610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28620 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69    frameworkVersi
28630 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
28640 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29  ersion(version))
28650 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28660 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
28670 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
28680 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286a0 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72     if (!framewor
286b0 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54  kList.Versions.T
286c0 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  ryGetValue(..   
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286e0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
286f0 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d  rkName, out fram
28700 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
28710 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
28720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66                (f
28730 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
28740 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ist == null)).. 
28750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28760 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
28780 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
28790 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
287a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
287c0 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65       foreach (Ve
287d0 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
287e0 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77  ersion in framew
287f0 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d  orkVersionList).
28800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28810 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28820 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
28830 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
28840 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
28850 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
28860 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
28870 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
28880 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
28890 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
288a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288b0 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d     "frameworkNam
288c0 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f  e = {0}, framewo
288d0 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c  rkVersion = {1},
288e0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
288f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70                "p
28900 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32  latformName = {2
28910 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  }", ForDisplay(f
28920 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a  rameworkName),..
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28940 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
28950 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
28960 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
28970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
28980 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f  orDisplay(platfo
28990 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  rmName)), traceC
289a0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
289b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289c0 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44   string installD
289d0 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b  irectory = null;
289e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
289f0 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
28a00 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74  eFrameworkDirect
28a10 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a30 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
28a40 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
28a50 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
28a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a70 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72           platfor
28a80 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20  mName, perUser, 
28a90 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76  wow64, whatIf, v
28aa0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
28ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ac0 20 20 20 20 20 72 65 66 20 69 6e 73 74 61 6c 6c       ref install
28ad0 44 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  Directory))..   
28ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28af0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28b00 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
28b10 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
28b20 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
28b30 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
28b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b50 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
28b60 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
28b70 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
28b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28b90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
28ba0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
28bb0 20 64 69 72 65 63 74 6f 72 79 20 6e 6f 74 20 66   directory not f
28bc0 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20  ound, " +..     
28bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28be0 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67         "skipping
28bf0 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
28c00 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
28c10 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c30 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
28c40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28c50 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
28c60 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
28c70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28c90 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
28ca0 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
28cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cc0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
28cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28ce0 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
28cf0 63 74 6f 72 79 20 3d 20 69 6e 73 74 61 6c 6c 44  ctory = installD
28d00 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20  irectory;....   
28d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
28d30 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74  llOrEmpty(direct
28d40 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
28d50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d70 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
28d80 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
28d90 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
28da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28db0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
28dc0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
28dd0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
28de0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
28df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e00 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
28e10 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63  mework {0} direc
28e20 74 6f 72 79 20 69 73 20 69 6e 76 61 6c 69 64 2c  tory is invalid,
28e30 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
28e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e50 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
28e60 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
28e70 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d  eworkVersion)),.
28e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28e90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
28ea0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
28eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ec0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
28ed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28ee0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f00 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68  directory = Path
28f10 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
28f20 72 79 2c 20 22 43 6f 6e 66 69 67 22 29 3b 0d 0a  ry, "Config");..
28f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28f40 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63        if (!Direc
28f50 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65  tory.Exists(dire
28f60 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
28f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f90 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
28fa0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
28fb0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
28fc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
28fe0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
28ff0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
29000 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29020 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
29030 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72  ramework {0} dir
29040 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f 65 73 20  ectory {1} does 
29050 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  not " +..       
29060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29070 20 20 20 20 20 22 65 78 69 73 74 2c 20 73 6b 69       "exist, ski
29080 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
29090 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
290a0 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290c0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
290d0 28 64 69 72 65 63 74 6f 72 79 29 29 2c 20 74 72  (directory)), tr
290e0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
290f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29100 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
29110 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
29120 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29140 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
29150 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
29160 64 69 72 65 63 74 6f 72 79 2c 20 22 6d 61 63 68  directory, "mach
29170 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b 0d 0a 0d  ine.config");...
29180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29190 20 20 20 20 20 69 66 20 28 21 46 69 6c 65 2e 45       if (!File.E
291a0 78 69 73 74 73 28 66 69 6c 65 4e 61 6d 65 29 29  xists(fileName))
291b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
291c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
291d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291e0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
291f0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
29200 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
29210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29220 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
29230 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
29240 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
29250 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
29260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29270 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
29280 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31 7d 20 64  k {0} file {1} d
29290 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22  oes not exist, "
292a0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
292b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292c0 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46  "skipping...", F
292d0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
292e0 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
292f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29300 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
29310 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65 29 29 2c  play(fileName)),
29320 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
29330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29340 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
29350 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
29360 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29380 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61      bool localSa
29390 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ved = false;....
293a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293b0 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63      if (!callbac
293c0 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
293d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293e0 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
293f0 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72  ant, name, descr
29400 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65  iption, typeName
29410 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
29430 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 69 6e 73  ssemblyName, ins
29440 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 2c 20 63  tallDirectory, c
29450 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29470 20 20 20 20 20 20 20 20 70 65 72 55 73 65 72 2c          perUser,
29480 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d   wow64, throwOnM
29490 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20  issing, whatIf, 
294a0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
294b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294c0 20 20 20 20 20 20 72 65 66 20 6c 6f 63 61 6c 53        ref localS
294d0 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29  aved, ref error)
294e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
294f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29510 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
29520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29530 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
29540 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
29550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29560 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29580 20 69 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20   if (localSaved 
29590 26 26 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20  && !saved)..    
295a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295b0 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20          saved = 
295c0 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
295d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295e0 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29600 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
29610 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
29620 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
29630 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
29640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29650 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
29660 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
29670 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
29680 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296a0 20 20 20 20 20 20 20 22 6c 6f 63 61 6c 53 61 76         "localSav
296b0 65 64 20 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20  ed = {0}, saved 
296c0 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {1}",..       
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296e0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
296f0 6c 61 79 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c  lay(localSaved),
29700 20 46 6f 72 44 69 73 70 6c 61 79 28 73 61 76 65   ForDisplay(save
29710 64 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d)),..          
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29730 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
29740 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
29750 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
29760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
29770 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
29790 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
297a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
297b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
297c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
297d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
297e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
297f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29800 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
29810 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
29820 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
29830 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
29840 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
29850 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  achFrameworkRegi
29860 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
29870 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20     MockRegistry 
29880 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
29890 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
298a0 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69  List frameworkLi
298b0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
298c0 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74   FrameworkRegist
298d0 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62  ryCallback callb
298e0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
298f0 20 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e    string version
29900 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f  , /* NOTE: Optio
29910 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  nal. */..       
29920 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
29930 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
29940 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
29950 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
29960 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
29970 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
29980 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
29990 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
299a0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
299b0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
299c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
299d0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
299e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
299f0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
29a00 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
29a10 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
29a20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
29a40 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
29a50 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
29a60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29a70 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
29a80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29a90 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
29aa0 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  workList == null
29ab0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ad0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
29ae0 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73  id framework lis
29af0 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
29b00 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
29b10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
29b20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29b30 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
29b40 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65   rootKey = frame
29b50 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  workList.RootKey
29b60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29b70 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
29b80 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29b90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29ba0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
29bb0 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
29bc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29bd0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
29be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29bf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
29c00 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52  f (!IsSupportedR
29c10 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c  ootKey(registry,
29c20 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20   rootKey))..    
29c30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29c40 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
29c50 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
29c60 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
29c70 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
29c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c90 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
29ca0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29cc0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
29cd0 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
29ce0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
29d00 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
29d10 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rk names found";
29d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29d30 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
29d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
29d60 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
29d70 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
29d80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29da0 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
29db0 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
29dc0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
29dd0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29de0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
29df0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29e00 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
29e10 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
29e20 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
29e30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
29e50 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66  rror = "no platf
29e60 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  orm names found"
29e70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29e80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
29e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29ea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
29eb0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
29ec0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20  .Names.Count != 
29ed0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
29ee0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
29ef0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
29f00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29f10 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
29f20 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77  g.Format("framew
29f30 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  ork name count {
29f40 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d  0} does not " +.
29f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29f60 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74       "match plat
29f70 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20  form name count 
29f80 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c  {1}", frameworkL
29f90 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c  ist.Names.Count,
29fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29fb0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
29fc0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
29fd0 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  s.Count);....   
29fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
29ff0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2a000 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a010 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
2a020 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
2a030 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ex < frameworkLi
2a040 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20  st.Names.Count; 
2a050 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
2a060 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a070 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2a080 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2a090 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
2a0a0 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
2a0b0 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
2a0c0 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2a0e0 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
2a0f0 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
2a100 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
2a110 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
2a120 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2a130 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2a140 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2a150 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
2a160 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  .Names[index];..
2a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a180 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
2a190 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
2a1a0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2a1b0 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
2a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2a1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a1e0 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
2a1f0 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72  he supported ver
2a200 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61  sions of this pa
2a210 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20  rticular..      
2a220 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2a230 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20     framework... 
2a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a250 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2a260 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66     VersionList f
2a270 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2a280 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
2a290 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73          if (vers
2a2a0 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion != null)..  
2a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2a2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a2d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2a2f0 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65  NOTE: Manual ove
2a300 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e  rride of the *ON
2a310 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  E* framework ver
2a320 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
2a330 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2a340 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a     to process...
2a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a360 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2a370 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2a380 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
2a390 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
2a3a0 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  st();..         
2a3b0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2a3c0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e  workVersionList.
2a3d0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2a3e0 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20  version));..    
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2a410 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2a420 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a430 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a440 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  !frameworkList.V
2a450 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61  ersions.TryGetVa
2a460 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a480 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
2a490 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65   out frameworkVe
2a4a0 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20  rsionList) ||.. 
2a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4c0 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72         (framewor
2a4d0 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20  kVersionList == 
2a4e0 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
2a4f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a510 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2a520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a530 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a540 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
2a560 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66  reach (Version f
2a570 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
2a580 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  in frameworkVers
2a590 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20  ionList)..      
2a5a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2a5d0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2a5e0 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
2a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a600 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2a610 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2a620 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
2a630 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2a640 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61              "fra
2a650 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d  meworkName = {0}
2a660 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2a670 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20  on = {1}, " +.. 
2a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a690 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d         "platform
2a6a0 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72  Name = {2}", For
2a6b0 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
2a6c0 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  kName),..       
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6e0 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
2a6f0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
2a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a710 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2a720 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ay(platformName)
2a730 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
2a740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a750 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48            if (!H
2a760 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  aveFrameworkRegi
2a770 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a790 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
2a7a0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
2a7b0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7d0 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
2a7e0 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c  rmName, perUser,
2a7f0 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
2a800 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2a820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a830 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2a840 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2a850 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
2a860 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
2a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a880 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2a890 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2a8a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8c0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
2a8d0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 72   Framework {0} r
2a8e0 65 67 69 73 74 72 79 20 6e 6f 74 20 66 6f 75 6e  egistry not foun
2a8f0 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  d, " +..        
2a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a910 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e      "skipping...
2a920 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
2a930 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29  ameworkVersion))
2a940 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2a960 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2a970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a980 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2a990 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2a9a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9c0 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d    if (callback =
2a9d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9f0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
2aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa10 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
2aa20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2aa40 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
2aa50 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2aa60 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa80 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
2aa90 65 2c 20 6e 75 6c 6c 2c 20 63 6c 69 65 6e 74 44  e, null, clientD
2aaa0 61 74 61 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20  ata, perUser,.. 
2aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aac0 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34             wow64
2aad0 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
2aae0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2aaf0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab10 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
2ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ab40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ab50 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ab70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ab80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2ab90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2aba0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2abb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2abc0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2abd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2ac30 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20 53  ion Per-Visual S
2ac40 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61  tudio Version Ha
2ac50 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
2ac60 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
2ac70 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73  oid InitializeVs
2ac80 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20  List(..         
2ac90 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2aca0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2acb0 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
2acc0 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
2acd0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
2ace0 20 20 20 72 65 66 20 56 73 4c 69 73 74 20 76 73     ref VsList vs
2acf0 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  List..          
2ad00 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2ad10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ad20 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  vsList == null).
2ad30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ad40 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56 73   vsList = new Vs
2ad50 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
2ad60 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73         if (vsLis
2ad70 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c  t.RootKey == nul
2ad80 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ad90 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b      vsList.RootK
2ada0 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d  ey = rootKey;...
2adb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2adc0 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  (vsList.Versions
2add0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2ade0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2adf0 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
2ae00 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20  .Versions = new 
2ae10 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a  VersionList();..
2ae20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ae30 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2ae40 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2ae50 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2ae60 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20 20 20  NoVs2005)..     
2ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2ae80 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2ae90 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38  dd(new Version(8
2aea0 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d 0a  , 0)); // 2005..
2aeb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aec0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2aed0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2aee0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2aef0 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20  NoVs2008)..     
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2af10 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2af20 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39  dd(new Version(9
2af30 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d 0a  , 0)); // 2008..
2af40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2af50 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2af60 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2af70 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2af80 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20  NoVs2010)..     
2af90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2afa0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2afb0 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31  dd(new Version(1
2afc0 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d 0a  0, 0));// 2010..
2afd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2afe0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2aff0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2b000 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2b010 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20 20 20  NoVs2012)..     
2b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2b030 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2b040 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31  dd(new Version(1
2b050 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d 0a  1, 0));// 2012..
2b060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b070 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2b080 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2b090 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2b0a0 4e 6f 56 73 32 30 31 33 29 0d 0a 20 20 20 20 20  NoVs2013)..     
2b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2b0c0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2b0d0 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31  dd(new Version(1
2b0e0 32 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33 0d 0a  2, 0));// 2013..
2b0f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2b100 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b110 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2b120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2b160 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2b170 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56  tatic bool HaveV
2b180 73 56 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72  sVersionDirector
2b190 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2b1a0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2b1b0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2b1c0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2b1d0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2b1e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
2b1f0 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
2b200 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2b210 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2b220 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2b230 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2b240 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2b250 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2b260 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2b270 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72  tring installDir
2b280 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..        
2b290 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2b2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2b2b0 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
2b2c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2b2d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2b2e0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
2b2f0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
2b300 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
2b310 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
2b320 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ix, perUser, wow
2b330 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
2b340 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2b350 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
2b360 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2b370 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b390 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2b3a0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
2b3b0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2b3c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b3d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b3e0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b400 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2b410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b420 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
2b430 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2b440 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .GetValue(..    
2b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b460 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72  key, "InstallDir
2b470 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  ", null, whatIf,
2b480 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2b4a0 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72   (!(value is str
2b4b0 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ing))..         
2b4c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b4d0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
2b4e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2b4f0 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28  ng directory = (
2b500 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d  string)value;...
2b510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b520 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
2b530 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74  llOrEmpty(direct
2b540 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
2b550 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b560 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
2b570 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b580 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74  !Directory.Exist
2b590 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  s(directory)).. 
2b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2b5c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b5d0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2b5e0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2b5f0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
2b600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b610 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2b620 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2b630 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2b640 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2b650 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53         "Visual S
2b660 74 75 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20  tudio {0} found 
2b670 69 6e 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d  in directory {1}
2b680 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
2b690 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
2b6a0 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20  lay(vsVersion), 
2b6b0 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
2b6c0 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  tory)),..       
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2b6e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b700 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
2b710 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20   = directory;.. 
2b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b730 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2b740 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2b750 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b760 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2b770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2b7b0 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2b7c0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2b7d0 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2b7e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2b7f0 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
2b800 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
2b810 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
2b820 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20     MockRegistry 
2b830 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
2b840 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73         VsList vs
2b850 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
2b860 20 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52     VisualStudioR
2b870 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20  egistryCallback 
2b880 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
2b890 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
2b8a0 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
2b8b0 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
2b8c0 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
2b8d0 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
2b8e0 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
2b8f0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2b900 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2b910 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2b920 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2b930 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2b940 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2b950 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2b960 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2b970 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2b980 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2b990 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2b9a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b9b0 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79      if (registry
2b9c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2b9d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b9e0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2b9f0 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73  = "invalid regis
2ba00 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  try";..         
2ba10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ba20 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2ba30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2ba40 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d     if (vsList ==
2ba50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ba60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ba70 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2ba80 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22  invalid VS list"
2ba90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2baa0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2bab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2bac0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
2bad0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2bae0 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e  ootKey = vsList.
2baf0 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  RootKey;....    
2bb00 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
2bb10 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2bb20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2bb40 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f  or = "invalid ro
2bb50 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20  ot key";..      
2bb60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2bb70 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2bb80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2bb90 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70        if (!IsSup
2bba0 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65  portedRootKey(re
2bbb0 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29  gistry, rootKey)
2bbc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2bbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bbe0 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20    error = "root 
2bbf0 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d  key must be per-
2bc00 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68  user or per-mach
2bc10 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ine";..         
2bc20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2bc30 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2bc40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2bc50 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65     if (vsList.Ve
2bc60 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
2bc70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc90 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76  error = "no VS v
2bca0 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d  ersions found";.
2bcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bcc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2bcd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2bce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
2bcf0 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73  each (Version vs
2bd00 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73  Version in vsLis
2bd10 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20  t.Versions)..   
2bd20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2bd30 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2bd40 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2bd50 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2bd60 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
2bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2bd80 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2bd90 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2bda0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2bdc0 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22  vsVersion = {0}"
2bdd0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56  , ForDisplay(vsV
2bde0 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2be00 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2be10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2be20 20 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c    string install
2be30 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c  Directory = null
2be40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2be50 20 20 20 20 20 69 66 20 28 21 48 61 76 65 56 73       if (!HaveVs
2be60 56 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79  VersionDirectory
2be70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2be80 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2be90 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
2bea0 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20  uffix, perUser, 
2beb0 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a  wow64, whatIf,..
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bed0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
2bee0 20 72 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65   ref installDire
2bef0 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
2bf00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2bf30 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2bf40 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
2bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf60 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2bf70 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2bf80 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2bf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bfa0 20 20 20 20 20 20 20 20 20 22 56 69 73 75 61 6c           "Visual
2bfb0 20 53 74 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20   Studio {0} not 
2bfc0 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e  found, skipping.
2bfd0 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
2bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2bff0 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69  rDisplay(vsVersi
2c000 6f 6e 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  on)), traceCateg
2c010 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2c020 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2c030 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
2c040 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c050 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2c060 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c  (callback == nul
2c070 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2c080 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
2c090 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c0a0 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61       if (!callba
2c0b0 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2c0d0 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
2c0e0 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
2c0f0 2c 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f  , installDirecto
2c100 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
2c110 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 69               cli
2c120 65 6e 74 44 61 74 61 2c 20 70 65 72 55 73 65 72  entData, perUser
2c130 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e  , wow64, throwOn
2c140 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c  Missing, whatIf,
2c150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c160 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
2c170 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  e, ref error))..
2c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c190 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c1a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2c1b0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2c1c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2c1d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c1e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2c1f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
2c200 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2c210 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
2c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c260 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c270 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72  #region Configur
2c280 61 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64 6c  ation File Handl
2c290 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  ing..        [Me
2c2a0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2c2b0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2c2c0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2c2d0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2c2e0 62 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76 69 64  bool AddDbProvid
2c2f0 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
2c300 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2c310 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
2c320 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
2c330 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20  ariant,..       
2c340 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
2c350 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2c360 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f  tring descriptio
2c370 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2c380 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c  string typeName,
2c390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
2c3a0 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
2c3b0 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  blyName,..      
2c3c0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2c3d0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2c3e0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2c3f0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
2c400 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
2c410 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2c420 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2c430 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2c440 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c450 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c  bool dirty = fal
2c460 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2c470 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63   XmlDocument doc
2c480 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44  ument = new XmlD
2c490 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20  ocument();....  
2c4a0 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
2c4b0 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74 65  nt.PreserveWhite
2c4c0 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20  space = true;.. 
2c4d0 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
2c4e0 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d  ent.Load(fileNam
2c4f0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2c500 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61 64     XmlElement ad
2c510 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d  dElement = docum
2c520 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
2c530 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
2c540 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
2c550 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41 64 64  rmat(XPathForAdd
2c560 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61  Element, invaria
2c570 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65  nt)) as XmlEleme
2c580 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  nt;....         
2c590 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e     if (addElemen
2c5a0 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
2c5b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c5c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2c5d0 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73  g[] elementNames
2c5e0 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   = {..          
2c5f0 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65            "syste
2c600 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76  m.data", "DbProv
2c610 69 64 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a  iderFactories"..
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c630 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
2c640 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
2c650 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
2c660 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
2c670 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
2c680 2e 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74  .DocumentElement
2c690 3b 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69  ; /* configurati
2c6a0 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  on */....       
2c6b0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
2c6c0 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74   (string element
2c6d0 4e 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e  Name in elementN
2c6e0 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ames)..         
2c6f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2c710 64 45 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76 69  dElement = previ
2c720 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65 63  ousElement.Selec
2c730 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20  tSingleNode(..  
2c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c750 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d        elementNam
2c760 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74  e) as XmlElement
2c770 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c780 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64           if (add
2c790 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  Element == null)
2c7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c7b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7d0 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
2c7e0 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65  cument.CreateEle
2c7f0 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  ment(..         
2c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c810 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20     elementName, 
2c820 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
2c830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c840 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
2c850 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64  usElement.Append
2c860 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74  Child(addElement
2c870 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2c880 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8a0 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
2c8b0 20 3d 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a   = addElement;..
2c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2c8e0 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20       addElement 
2c8f0 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74  = document.Creat
2c900 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20  eElement(..     
2c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2c920 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70  add", String.Emp
2c930 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
2c940 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73          previous
2c950 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68  Element.AppendCh
2c960 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b  ild(addElement);
2c970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c980 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
2c990 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2c9a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c9b0 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
2c9c0 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65  ls(addElement.Ge
2c9d0 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65  tAttribute("name
2c9e0 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
2c9f0 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53           name, S
2ca00 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
2ca10 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20  Ordinal))..     
2ca20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ca30 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
2ca40 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74  ment.SetAttribut
2ca50 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b  e("name", name);
2ca60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ca70 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
2ca80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ca90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2caa0 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
2cab0 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
2cac0 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69  ttribute("invari
2cad0 61 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ant"),..        
2cae0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 76 61              inva
2caf0 72 69 61 6e 74 2c 20 53 74 72 69 6e 67 43 6f 6d  riant, StringCom
2cb00 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29  parison.Ordinal)
2cb10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2cb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cb30 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74    addElement.Set
2cb40 41 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72  Attribute("invar
2cb50 69 61 6e 74 22 2c 20 69 6e 76 61 72 69 61 6e 74  iant", invariant
2cb60 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2cb70 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
2cb80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2cb90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cba0 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
2cbb0 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65  ls(addElement.Ge
2cbc0 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63  tAttribute("desc
2cbd0 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20  ription"),..    
2cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbf0 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53 74 72  description, Str
2cc00 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
2cc10 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20  dinal))..       
2cc20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2cc30 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
2cc40 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28  nt.SetAttribute(
2cc50 22 64 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64  "description", d
2cc60 65 73 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20  escription);..  
2cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2cc80 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2cc90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2cca0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2ccb0 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20   fullTypeName = 
2ccc0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
2ccd0 30 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}, {1}",..     
2cce0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 4e             typeN
2ccf0 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d  ame, assemblyNam
2cd00 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2cd10 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
2cd20 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74  quals(addElement
2cd30 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22 74  .GetAttribute("t
2cd40 79 70 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ype"),..        
2cd50 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c              full
2cd60 54 79 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67  TypeName, String
2cd70 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
2cd80 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
2cd90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2cda0 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e       addElement.
2cdb0 53 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79  SetAttribute("ty
2cdc0 70 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d  pe", fullTypeNam
2cdd0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2cde0 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75       dirty = tru
2cdf0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2ce00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ce10 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68   if (dirty || wh
2ce20 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2ce30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ce40 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
2ce50 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2ce60 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2ce70 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2ce80 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
2ce90 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2ceb0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2cec0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2ced0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cef0 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74       "addElement
2cf00 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70   = {0}", ForDisp
2cf10 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 29  lay(addElement))
2cf20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2cf30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2cf40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2cf60 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
2cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf80 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69  document.Save(fi
2cf90 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
2cfa0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
2cfb0 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a  sModified++;....
2cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfd0 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  saved = true;.. 
2cfe0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d000 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
2d010 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2d020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d060 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d070 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
2d080 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
2d090 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
2d0a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2d0b0 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
2d0c0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
2d0d0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2d0e0 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
2d0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d100 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
2d110 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2d120 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
2d130 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
2d140 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
2d150 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64    ref bool saved
2d160 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2d170 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
2d180 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2d190 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d1a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74         bool dirt
2d1b0 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  y = false;..    
2d1c0 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d          XmlDocum
2d1d0 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e  ent document = n
2d1e0 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29  ew XmlDocument()
2d1f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d200 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72   document.Preser
2d210 76 65 57 68 69 74 65 73 70 61 63 65 20 3d 20 74  veWhitespace = t
2d220 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2d230 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28    document.Load(
2d240 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
2d250 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65            XmlEle
2d260 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74 20  ment addElement 
2d270 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63  = document.Selec
2d280 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20  tSingleNode(..  
2d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
2d2a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74  ring.Format(XPat
2d2b0 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20  hForAddElement, 
2d2c0 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20 58  invariant)) as X
2d2d0 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
2d2e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64            if (ad
2d2f0 64 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c  dElement != null
2d300 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2d310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d320 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61 72    addElement.Par
2d330 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68  entNode.RemoveCh
2d340 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b  ild(addElement);
2d350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d360 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
2d370 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2d380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
2d390 6c 45 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65 45  lElement removeE
2d3a0 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
2d3b0 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
2d3c0 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de(..           
2d3d0 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
2d3e0 61 74 28 58 50 61 74 68 46 6f 72 52 65 6d 6f 76  at(XPathForRemov
2d3f0 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  eElement, invari
2d400 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d  ant)) as XmlElem
2d410 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ent;....        
2d420 20 20 20 20 69 66 20 28 72 65 6d 6f 76 65 45 6c      if (removeEl
2d430 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ement != null)..
2d440 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d460 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2e 50 61 72  emoveElement.Par
2d470 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68  entNode.RemoveCh
2d480 69 6c 64 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  ild(removeElemen
2d490 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
2d4a0 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75       dirty = tru
2d4b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2d4c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2d4d0 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68   if (dirty || wh
2d4e0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2d4f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d500 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
2d510 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2d520 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2d530 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2d540 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
2d550 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
2d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2d570 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2d580 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2d590 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5b0 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74       "addElement
2d5c0 20 3d 20 7b 30 7d 2c 20 72 65 6d 6f 76 65 45 6c   = {0}, removeEl
2d5d0 65 6d 65 6e 74 20 3d 20 7b 31 7d 22 2c 0d 0a 20  ement = {1}",.. 
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5f0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2d600 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 2c 20 46  y(addElement), F
2d610 6f 72 44 69 73 70 6c 61 79 28 72 65 6d 6f 76 65  orDisplay(remove
2d620 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20  Element)),..    
2d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d640 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2d650 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2d660 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
2d670 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
2d680 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
2d690 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29  t.Save(fileName)
2d6a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d6b0 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69       filesModifi
2d6c0 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed++;....       
2d6d0 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d           saved =
2d6e0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2d6f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d700 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2d710 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2d720 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2d730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2d770 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2d780 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
2d790 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65 72  rocessDbProvider
2d7a0 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
2d7b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
2d7c0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
2d7d0 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72      string invar
2d7e0 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  iant,..         
2d7f0 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
2d800 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2d810 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  ing description,
2d820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d830 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a  ring typeName,..
2d840 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
2d850 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c  mblyName assembl
2d860 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
2d870 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
2d880 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
2d890 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
2d8a0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
2d8b0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
2d8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2d8d0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
2d8e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
2d8f0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
2d900 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2d910 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2d920 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2d930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2d940 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
2d950 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2d960 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
2d970 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2d980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d990 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
2d9a0 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
2d9b0 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
2d9c0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
2d9d0 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
2d9e0 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
2d9f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2da00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2da10 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2da20 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
2da30 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b   config callback
2da40 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
2da50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2da60 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2da70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2da80 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
2da90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2daa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dab0 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62   return RemoveDb
2dac0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
2dad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dae0 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
2daf0 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49  invariant, whatI
2db00 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
2db10 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
2db20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2db30 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20  error) &&..     
2db40 20 20 20 20 20 20 20 20 20 20 20 41 64 64 44 62             AddDb
2db50 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
2db60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2db70 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
2db80 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c  invariant, name,
2db90 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79   description, ty
2dba0 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
2dbc0 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49  emblyName, whatI
2dbd0 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
2dbe0 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72  saved, ref error
2dbf0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2dc00 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
2dc10 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2dc20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2dc30 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
2dc40 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
2dc50 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2dc60 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
2dc70 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68  e, invariant, wh
2dc80 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
2dc90 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ef saved,..     
2dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2dcb0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
2dcc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2dcd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2dce0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2dcf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2dd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2dd40 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41         #region A
2dd50 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20  ssembly Folders 
2dd60 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
2dd70 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2dd80 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d   string GetAssem
2dd90 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
2dda0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2ddb0 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
2ddc0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2ddd0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
2dde0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2ddf0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2de00 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2de10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2de20 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2de30 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2de40 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
2de50 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2de60 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2de70 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2de80 3a 20 54 68 69 73 20 72 65 67 69 73 74 72 79 20  : This registry 
2de90 6b 65 79 20 61 70 70 65 61 72 73 20 74 6f 20 61  key appears to a
2dea0 6c 77 61 79 73 20 62 65 20 33 32 2d 62 69 74 20  lways be 32-bit 
2deb0 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  only..          
2dec0 20 20 2f 2f 20 20 20 20 20 20 20 28 69 2e 65 2e    //       (i.e.
2ded0 20 70 72 6f 62 61 62 6c 79 20 62 65 63 61 75 73   probably becaus
2dee0 65 20 69 74 20 69 73 20 6f 6e 6c 79 20 75 73 65  e it is only use
2def0 64 20 62 79 20 56 69 73 75 61 6c 0d 0a 20 20 20  d by Visual..   
2df00 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2df10 20 20 53 74 75 64 69 6f 2c 20 77 68 69 63 68 20    Studio, which 
2df20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6c 77  is currently alw
2df30 61 79 73 20 33 32 2d 62 69 74 20 6f 6e 6c 79 29  ays 32-bit only)
2df40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2df50 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  /..            s
2df60 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21  tring format = !
2df70 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
2df80 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  mpty(platformNam
2df90 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  e) ?..          
2dfa0 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72        "{0}\\Micr
2dfb0 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d  osoft\\{1}\\v{2}
2dfc0 5c 5c 7b 33 7d 5c 5c 41 73 73 65 6d 62 6c 79 46  \\{3}\\AssemblyF
2dfd0 6f 6c 64 65 72 73 45 78 22 20 3a 0d 0a 20 20 20  oldersEx" :..   
2dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
2dff0 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31  }\\Microsoft\\{1
2e000 7d 5c 5c 76 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c  }\\v{2}\\Assembl
2e010 79 46 6f 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a  yFoldersEx";....
2e020 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e030 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
2e040 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74  (format, GetRoot
2e050 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c  KeyName(perUser,
2e060 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20   wow64),..      
2e070 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2e080 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
2e090 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
2e0a0 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ormName);..     
2e0b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e100 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e110 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2e120 63 20 62 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65  c bool AddToAsse
2e130 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
2e140 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2e150 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2e160 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2e170 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
2e180 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2e190 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
2e1a0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2e1b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2e1c0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2e1d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2e1e0 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
2e1f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2e200 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
2e210 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2e220 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2e230 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2e240 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2e250 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2e260 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2e270 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2e280 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2e290 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2e2a0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2e2b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2e2c0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
2e2d0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b  AssemblyFoldersK
2e2e0 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
2e2f0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2e300 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2e310 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2e320 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c  rmName, perUser,
2e330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e340 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20    wow64);....   
2e350 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2e360 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2e370 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
2e380 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
2e390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e3a0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2e3b0 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68  eyName, true, wh
2e3c0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2e3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3f0 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
2e400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e410 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e420 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2e430 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2e440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e450 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2e460 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2e470 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
2e480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e490 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2e4a0 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
2e4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e4c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2e4d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e4e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e4f0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2e500 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2e510 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2e520 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
2e530 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2e550 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
2e560 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2e570 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2e580 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e590 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
2e5a0 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
2e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2e5e0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2e5f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2e600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e610 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
2e620 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
2e630 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
2e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e650 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
2e660 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ubKeyName);.... 
2e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e680 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2e690 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2e6a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6c0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2e6d0 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6f0 20 20 20 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c       subKey, nul
2e700 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68  l, directory, wh
2e710 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2e720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e730 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2e740 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e750 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2e760 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e770 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2e780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2e7c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2e7d0 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
2e7e0 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c  eFromAssemblyFol
2e7f0 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
2e800 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2e810 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2e820 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2e830 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
2e840 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2e850 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
2e860 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2e870 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
2e880 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2e890 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
2e8a0 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
2e8b0 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2e8c0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2e8d0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2e8e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
2e8f0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2e900 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2e910 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2e920 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2e930 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2e940 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2e950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2e960 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2e970 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2e980 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65  eyName = GetAsse
2e990 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
2e9a0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2e9b0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
2e9c0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2e9d0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2e9e0 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  me, perUser,..  
2e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f                wo
2ea00 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
2ea10 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2ea20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
2ea30 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2ea40 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea60 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2ea70 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  me, true, whatIf
2ea80 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2ea90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2eaa0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2eab0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2ead0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eae0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2eaf0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb10 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2eb20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
2eb30 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
2eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb50 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2eb60 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2eb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eba0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ebb0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2ebc0 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
2ebd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ebe0 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
2ebf0 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d  eyName, throwOnM
2ec00 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20  issing, whatIf, 
2ec10 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2ec20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2ec30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2ec40 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2ec50 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2ec60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eca0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2ecb0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2ecc0 6c 20 50 72 6f 63 65 73 73 41 73 73 65 6d 62 6c  l ProcessAssembl
2ecd0 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
2ece0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2ecf0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2ed00 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2ed10 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
2ed20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2ed30 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
2ed40 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
2ed50 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
2ed60 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
2ed70 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2ed80 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
2ed90 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
2eda0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2edb0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2edc0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2edd0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2ede0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2edf0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2ee00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2ee10 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2ee20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2ee30 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2ee40 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2ee50 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2ee60 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2ee70 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
2ee80 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
2ee90 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
2eea0 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
2eeb0 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2eed0 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
2eee0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2ef00 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
2ef10 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63  ramework callbac
2ef20 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
2ef30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ef40 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2ef50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ef60 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
2ef70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ef80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ef90 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46    return RemoveF
2efa0 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  romAssemblyFolde
2efb0 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
2efc0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2efd0 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
2efe0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2eff0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
2f000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f010 20 20 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a        LegacyProj
2f020 65 63 74 4e 61 6d 65 2c 20 70 65 72 55 73 65 72  ectName, perUser
2f030 2c 20 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20  , wow64, false, 
2f040 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2f050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f060 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2f070 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
2f080 20 20 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62       AddToAssemb
2f090 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
2f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0b0 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
2f0c0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2f0d0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2f0e0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
2f100 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58  jectName, pair.X
2f110 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2f120 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2f130 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2f140 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
2f150 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2f160 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2f170 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2f180 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f190 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
2f1a0 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f  veFromAssemblyFo
2f1b0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
2f1c0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2f1d0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
2f1e0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2f1f0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2f200 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2f210 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74           Project
2f220 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77  Name, perUser, w
2f230 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  ow64, throwOnMis
2f240 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 0d 0a 20  sing, whatIf,.. 
2f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f260 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20     verbose, ref 
2f270 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
2f280 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2f290 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2f2a0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2f2b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2f2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2f300 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75      #region Visu
2f310 61 6c 20 53 74 75 64 69 6f 20 48 61 6e 64 6c 69  al Studio Handli
2f320 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
2f330 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
2f340 67 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61  g GetVsRootKeyNa
2f350 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2f360 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2f370 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2f380 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
2f390 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2f3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2f3b0 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
2f3c0 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f  at("{0}\\Microso
2f3d0 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f  ft\\VisualStudio
2f3e0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2f3f0 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61      GetRootKeyNa
2f400 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
2f410 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  4));..        }.
2f420 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2f430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f470 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2f480 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
2f490 69 6e 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  ing GetVsKeyName
2f4a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  (..            V
2f4b0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2f4c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2f4d0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
2f4e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2f4f0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2f500 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2f510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2f520 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2f530 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
2f540 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f560 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
2f570 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f580 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
2f590 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2f5a0 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d 22     "{0}\\{1}{2}"
2f5b0 2c 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61  , GetVsRootKeyNa
2f5c0 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
2f5d0 34 29 2c 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  4), vsVersion,..
2f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5f0 73 75 66 66 69 78 29 3b 0d 0a 20 20 20 20 20 20  suffix);..      
2f600 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2f610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f650 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2f660 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c    #region Visual
2f670 20 53 74 75 64 69 6f 20 44 61 74 61 20 53 6f 75   Studio Data Sou
2f680 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  rce Handling..  
2f690 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2f6a0 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44  atic bool AddVsD
2f6b0 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
2f6c0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2f6d0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2f6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2f6f0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2f700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2f710 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
2f720 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2f730 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2f740 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2f750 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2f760 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2f770 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2f780 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2f790 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2f7a0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2f7b0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2f7c0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2f7d0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2f7e0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
2f7f0 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
2f800 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f820 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2f830 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
2f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f850 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2f860 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f870 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2f880 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
2f890 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8b0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2f8c0 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
2f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f8e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2f8f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f900 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2f910 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
2f920 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
2f930 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55  on, suffix, perU
2f940 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ser, wow64);....
2f950 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2f960 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
2f970 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
2f980 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2f990 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2f9a0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2f9b0 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
2f9c0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2f9d0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2f9e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f9f0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
2fa00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2fa10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2fa30 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2fa40 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2fa60 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2fa70 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2fa80 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2faa0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
2fab0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2fac0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2fad0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2fae0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
2fb00 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2fb10 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
2fb20 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2fb30 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb50 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63   key, "DataSourc
2fb60 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
2fb70 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2fb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fba0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
2fbb0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2fbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fbe0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2fbf0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2fc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2fc20 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2fc30 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2fc40 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20  DataSources",.. 
2fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc60 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
2fc70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fc80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2fc90 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2fcb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fcc0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2fcd0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
2fce0 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a  ataSourceKey =..
2fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2fd10 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
2fd20 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d  eSubKey(subKey,.
2fd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2fd50 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
2fd60 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2fd70 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
2fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd90 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2fda0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2fdb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdd0 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61 53         if (dataS
2fde0 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c  ourceKey == null
2fdf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2fe00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2fe30 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2fe40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe60 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
2fe70 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
2fe80 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79  : {0}\\{1}", key
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 20 20 20 20 20                  
2feb0 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53     package.DataS
2fec0 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  ourceId.ToString
2fed0 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
2fee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ff00 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff40 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2ff50 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
2ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff70 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75 72          dataSour
2ff80 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72  ceKey, null, Str
2ff90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffb0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61           "{0} Da
2ffc0 74 61 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72  tabase File", Pr
2ffd0 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74  ojectName), what
2ffe0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30000 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
30010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30020 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
30030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30040 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
30050 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20  value is new as 
30060 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20  of 1.0.83.0...  
30070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30080 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
30090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300a0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
300b0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
300c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300d0 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75 72          dataSour
300e0 63 65 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 50  ceKey, "DefaultP
300f0 72 6f 76 69 64 65 72 22 2c 0d 0a 20 20 20 20 20  rovider",..     
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 70 61 63 6b 61 67 65 2e 44         package.D
30120 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
30130 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
30140 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
30150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30160 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
30170 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
30190 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
301a0 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 53 6f  ateSubKey(dataSo
301b0 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20  urceKey,..      
301c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301d0 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
301e0 6d 61 74 28 22 53 75 70 70 6f 72 74 69 6e 67 50  mat("SupportingP
301f0 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d  roviders\\{0}",.
30200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30210 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
30220 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
30230 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
30240 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20  dFormat)),..    
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 77 68 61 74 49 66 2c 20          whatIf, 
30270 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
30280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
30290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
302a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
302b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
302c0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
302d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
302e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
302f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
30330 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
30340 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
30350 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  veVsDataSource(.
30360 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
30370 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
30380 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
30390 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
303a0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
303b0 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
303c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
303d0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
303e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
303f0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
30400 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
30410 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
30420 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
30430 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
30440 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
30450 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
30460 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
30470 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
30480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
30490 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
304a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
304b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
304c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
304d0 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e  valid VS version
304e0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
304f0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30500 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
30510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30520 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
30530 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
30540 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30550 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
30560 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
30570 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
30580 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30590 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
305a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
305b0 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
305c0 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
305d0 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
305e0 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29   perUser, wow64)
305f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30600 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
30610 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
30620 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
30630 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
30640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
30650 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
30660 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
30670 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
30680 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30690 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
306a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
306b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
306c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306d0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
306e0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
306f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30700 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
30710 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
30720 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
30730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30740 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
30750 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
30760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30770 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
30780 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
30790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
307a0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
307b0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
307c0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
307d0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
307e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307f0 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
30800 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20  Sources", true, 
30810 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
30820 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30830 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30840 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
30850 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30870 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
30890 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
308a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
308b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308c0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
308d0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
308e0 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73  {0}\\DataSources
308f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
30900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30910 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
30920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30930 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
30940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30950 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30960 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
30970 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
30980 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
30990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309a0 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
309b0 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
309c0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
309d0 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
309e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309f0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
30a00 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
30a10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30a20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30a30 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
30a40 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
30a50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
30a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30aa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
30ab0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
30ac0 50 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75  ProcessVsDataSou
30ad0 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
30ae0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
30af0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
30b00 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
30b10 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
30b20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
30b30 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
30b40 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
30b50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
30b60 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
30b70 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
30b80 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
30b90 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
30ba0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
30bb0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
30bc0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
30bd0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
30be0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
30bf0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
30c00 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
30c10 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
30c20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
30c30 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
30c40 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
30c50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30c60 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
30c70 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
30c80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30c90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
30ca0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
30cb0 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
30cc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
30cd0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
30ce0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30cf0 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
30d00 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
30d10 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
30d20 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
30d30 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
30d40 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
30d50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30d60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30d70 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
30d80 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62  invalid VS callb
30d90 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
30da0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30db0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
30dc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30dd0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
30de0 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
30df0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30e00 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73      return AddVs
30e10 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20  DataSource(..   
30e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e30 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
30e40 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63  ion, suffix, pac
30e50 6b 61 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77  kage, perUser, w
30e60 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
30e70 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
30e80 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
30e90 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
30ea0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
30eb0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
30ec0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30ed0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30ee0 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72  RemoveVsDataSour
30ef0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
30f00 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
30f10 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  , vsVersion, suf
30f20 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65  fix, package, pe
30f30 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20  rUser, wow64,.. 
30f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f50 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
30f60 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
30f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
30f80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
30f90 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
30fa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
30fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ff0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
31000 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
31010 6f 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20  o Data Provider 
31020 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
31030 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
31040 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 50   bool AddVsDataP
31050 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
31060 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
31070 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
31080 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
31090 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
310a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
310b0 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
310c0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
310d0 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
310e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
310f0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
31100 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
31110 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
31120 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
31130 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
31140 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
31150 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
31160 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
31170 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
31180 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
31190 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
311a0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
311b0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
311c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
311d0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
311e0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
311f0 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
31200 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31210 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
31220 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31230 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
31240 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
31250 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31260 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
31270 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
31280 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
31290 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
312a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
312b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
312c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
312d0 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
312e0 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
312f0 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c  suffix, perUser,
31300 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
31310 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
31320 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
31330 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
31340 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
31350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31360 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
31370 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
31380 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
31390 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
313a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313b0 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
313c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
313d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
313e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
313f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
31400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31410 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
31420 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
31430 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
31440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31450 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
31460 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
31470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31480 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
31490 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
314a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
314b0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
314c0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
314d0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
314e0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
314f0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
31500 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
31510 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73  , "DataProviders
31520 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
31530 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
31540 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31560 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
31570 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
31580 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
315b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
315c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315d0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
315e0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
315f0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
31600 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20  taProviders",.. 
31610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31620 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
31630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31640 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
31650 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
31660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
31670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31680 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
31690 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
316a0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d  ataProviderKey =
316b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
316c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
316d0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
316e0 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
316f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
31710 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
31720 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
31730 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
31740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31750 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
31760 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
31770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31780 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31790 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
317a0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d  ataProviderKey =
317b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
317c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
317e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317f0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
31800 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
31810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31820 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
31830 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
31840 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
31850 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ", key,..       
31860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31870 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
31880 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
31890 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
318a0 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mat));....      
318b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
318d0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
318e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
318f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31900 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
31910 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
31920 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
31930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31940 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
31950 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69   null, Descripti
31960 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  on, whatIf,..   
31970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31980 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
31990 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
319a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
319b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
319c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
319d0 45 3a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73  E: This value is
319e0 20 6e 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38   new as of 1.0.8
319f0 33 2e 30 2e 20 20 48 6f 77 65 76 65 72 2c 0d 0a  3.0.  However,..
31a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a10 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
31a20 20 69 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20   it should only 
31a30 62 65 20 73 65 74 20 69 66 20 74 68 65 20 70 61  be set if the pa
31a40 63 6b 61 67 65 20 61 73 73 65 6d 62 6c 79 0d 0a  ckage assembly..
31a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a60 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
31a70 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 61 73 73   and all the ass
31a80 65 6d 62 6c 69 65 73 20 69 74 20 72 65 66 65 72  emblies it refer
31a90 73 20 74 6f 20 61 72 65 20 62 65 69 6e 67 0d 0a  s to are being..
31aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ab0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
31ac0 20 70 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65   placed into the
31ad0 20 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79   global assembly
31ae0 20 63 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20   cache...       
31af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b00 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
31b20 28 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41  (package.GlobalA
31b30 73 73 65 6d 62 6c 79 43 61 63 68 65 29 0d 0a 20  ssemblyCache).. 
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b70 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
31b80 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
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 20 20 20 20 20 20 20 20 20                  
31bb0 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
31bc0 20 22 41 73 73 65 6d 62 6c 79 22 2c 0d 0a 20 20   "Assembly",..  
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
31bf0 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61  ckage.AssemblyNa
31c00 6d 65 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a  me.ToString(),..
31c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c30 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
31c40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
31c50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c70 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
31c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c90 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
31ca0 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61  s value is new a
31cb0 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a  s of 1.0.83.0...
31cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cd0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cf0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
31d00 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
31d30 6f 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73 6f  oviderKey, "Asso
31d40 63 69 61 74 65 64 53 6f 75 72 63 65 22 2c 0d 0a  ciatedSource",..
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d60 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
31d70 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64  age.DataSourceId
31d80 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
31d90 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
31da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31db0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
31dc0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
31dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31de0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
31df0 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
31e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e10 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
31e20 64 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61  derKey, "Invaria
31e30 6e 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61  ntName", Invaria
31e40 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ntName,..       
31e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e60 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
31e70 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
31e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e90 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
31ea0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ec0 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
31ed0 69 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f  iderKey, "Techno
31ee0 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20  logy",..        
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f00 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e      package.AdoN
31f10 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54  etTechnologyId.T
31f20 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
31f30 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
31f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f50 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
31f60 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
31f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
31f80 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
31f90 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fb0 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
31fc0 72 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22  rKey, "CodeBase"
31fd0 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74  , fileName, what
31fe0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
31ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32000 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
32010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32020 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
32030 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32050 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
32060 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61  ProviderKey, "Fa
32070 63 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a  ctoryService",..
32080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32090 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
320a0 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f  age.ServiceId.To
320b0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
320c0 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
320d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320e0 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
320f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
32110 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
32120 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
32130 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
32140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32150 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
32160 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43  edObjects\\DataC
32170 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72  onnectionUIContr
32180 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ol",..          
32190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321a0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
321b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
321c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
321d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
321e0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
321f0 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32210 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
32220 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
32230 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72  ConnectionProper
32240 74 69 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ties",..        
32250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32260 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
32270 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
32280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32290 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
322a0 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
322b0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
322c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322d0 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
322e0 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
322f0 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70  taConnectionSupp
32300 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ort", whatIf,.. 
32310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32320 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
32330 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
32340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32350 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
32360 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
32370 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
32380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32390 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
323a0 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
323b0 61 4f 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c  aObjectSupport",
323c0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
323d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323e0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
323f0 0a 0d 0a 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 52 65 67 69 73             Regis
32410 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
32420 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
32430 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
32440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32450 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
32460 62 6a 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77  bjects\\DataView
32470 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66  Support", whatIf
32480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
324a0 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
324b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
324c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
324d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
324e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
324f0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
32500 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
32510 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
32520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
32560 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
32570 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
32580 65 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28  eVsDataProvider(
32590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
325a0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
325b0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
325c0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
325d0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
325e0 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
325f0 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
32600 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
32610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32620 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
32630 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
32640 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
32650 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
32660 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
32670 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
32680 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
32690 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
326a0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
326b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
326c0 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
326d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
326e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
326f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
32700 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
32710 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
32720 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32730 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32740 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32750 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
32760 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
32770 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
32780 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
32790 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
327a0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
327b0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
327c0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
327d0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
327e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
327f0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
32800 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
32810 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
32820 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32830 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
32840 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
32850 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32870 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
32880 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
32890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328a0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
328b0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
328c0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328e0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
328f0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
32900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32910 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
32920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32930 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32940 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
32950 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
32960 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
32970 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
32980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32990 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74         key, "Dat
329a0 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75  aProviders", tru
329b0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
329c0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
329d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
329e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
329f0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
32a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32a10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a30 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
32a40 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
32a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a60 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
32a70 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
32a80 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76  y: {0}\\DataProv
32a90 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20  iders",..       
32aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ab0 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
32ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ad0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
32ae0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
32af0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b10 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
32b20 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65  .DeleteSubKeyTre
32b30 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
32b40 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
32b50 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61  ey, package.Data
32b60 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72  ProviderId.ToStr
32b70 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
32b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32b90 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
32ba0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
32bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32bc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
32be0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
32bf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
32c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
32c50 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
32c60 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73  c bool ProcessVs
32c70 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20  DataProvider(.. 
32c80 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
32c90 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
32ca0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
32cb0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
32cc0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
32cd0 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
32ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
32cf0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
32d00 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
32d10 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
32d20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
32d30 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
32d40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
32d50 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
32d60 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
32d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32d80 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
32d90 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
32da0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
32db0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
32dc0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
32dd0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
32de0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
32df0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
32e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
32e10 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
32e20 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
32e30 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
32e40 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
32e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
32e60 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
32e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e90 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
32ea0 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74   VS callback dat
32eb0 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
32ec0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32ed0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32ee0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32ef0 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
32f00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
32f20 75 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f  urn AddVsDataPro
32f30 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
32f40 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
32f50 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
32f60 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
32f70 20 70 61 69 72 2e 58 2c 20 70 65 72 55 73 65 72   pair.X, perUser
32f80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32f90 20 20 20 20 20 20 20 77 6f 77 36 34 2c 20 77 68         wow64, wh
32fa0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
32fb0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
32fc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
32fd0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
32fe0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32ff0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
33000 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50  rn RemoveVsDataP
33010 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
33020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
33030 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
33040 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67  , suffix, packag
33050 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  e, perUser, wow6
33060 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
33070 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
33080 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
33090 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
330a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
330b0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
330c0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
330d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
330e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
330f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33110 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
33120 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20   #region Visual 
33130 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48  Studio Package H
33140 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
33150 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
33160 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56  void InitializeV
33170 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
33180 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
33190 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
331a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
331b0 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62  ool globalAssemb
331c0 6c 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20 20  lyCache,..      
331d0 20 20 20 20 20 20 72 65 66 20 50 61 63 6b 61 67        ref Packag
331e0 65 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  e package..     
331f0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
33200 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33210 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
33220 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
33230 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33240 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20        package = 
33250 6e 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a  new Package();..
33260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33270 20 20 70 61 63 6b 61 67 65 2e 41 73 73 65 6d 62    package.Assemb
33280 6c 79 4e 61 6d 65 20 3d 20 61 73 73 65 6d 62 6c  lyName = assembl
33290 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
332a0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
332b0 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
332c0 63 68 65 20 3d 20 67 6c 6f 62 61 6c 41 73 73 65  che = globalAsse
332d0 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 0d 0a 20 20  mblyCache;....  
332e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
332f0 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68  ckage.AdoNetTech
33300 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20 47  nologyId = new G
33310 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
33320 20 20 20 20 20 20 20 20 20 20 22 37 37 41 42 39            "77AB9
33330 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39 31  A9D-78B9-4BA7-91
33340 41 43 2d 38 37 33 46 35 33 33 38 46 31 44 32 22  AC-873F5338F1D2"
33350 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
33360 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61        package.Pa
33370 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47 75  ckageId = new Gu
33380 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
33390 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43           "DCBE6C
333a0 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38  8D-0E57-4099-A18
333b0 33 2d 39 38 46 46 37 34 43 36 34 44 39 43 22 29  3-98FF74C64D9C")
333c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
333d0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72       package.Ser
333e0 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69  viceId = new Gui
333f0 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
33400 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38          "DCBE6C8
33410 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33  D-0E57-4099-A183
33420 2d 39 38 46 46 37 34 43 36 34 44 39 44 22 29 3b  -98FF74C64D9D");
33430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33440 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
33450 53 6f 75 72 63 65 49 64 20 3d 20 6e 65 77 20 47  SourceId = new G
33460 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
33470 20 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41            "0EBAA
33480 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44  B6E-CA80-4B4A-8D
33490 44 46 2d 43 42 45 36 42 46 30 35 38 43 37 31 22  DF-CBE6BF058C71"
334a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
334b0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
334c0 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 6e  taProviderId = n
334d0 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20  ew Guid(..      
334e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30                "0
334f0 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34  EBAAB6E-CA80-4B4
33500 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38  A-8DDF-CBE6BF058
33510 43 37 30 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  C70");..        
33520 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
33530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
33540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33580 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
33590 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
335a0 6f 6c 20 41 64 64 56 73 50 61 63 6b 61 67 65 28  ol AddVsPackage(
335b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
335c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
335d0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
335e0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
335f0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
33600 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
33610 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
33620 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
33630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
33640 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
33650 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
33660 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
33670 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
33680 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
33690 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
336a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
336b0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
336c0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
336d0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
336e0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
336f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
33700 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
33710 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
33720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33730 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
33740 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
33750 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33760 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
33770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33780 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
33790 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
337a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
337b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
337c0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
337d0 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
337e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
337f0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
33800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33810 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
33820 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
33830 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
33840 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
33850 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b  perUser, wow64);
33860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33870 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
33880 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
33890 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
338a0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
338b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
338c0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
338d0 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
338e0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
338f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33900 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
33910 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
33920 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
33930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33940 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
33950 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
33960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33970 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
33980 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
33990 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
339a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339b0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
339c0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
339d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
339e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
339f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
33a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33a10 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
33a20 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
33a30 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
33a40 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
33a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a60 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61       key, "Packa
33a70 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ges", true, what
33a80 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
33a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
33aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33ab0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
33ac0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
33ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
33ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33af0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
33b00 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
33b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
33b30 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
33b40 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
33b50 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20  \Packages",..   
33b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b70 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
33b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33b90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
33ba0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
33bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
33bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33bd0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33bf0 20 4e 4f 54 45 3a 20 2a 57 41 52 4e 49 4e 47 2a   NOTE: *WARNING*
33c00 20 43 68 61 6e 67 69 6e 67 20 61 6e 79 20 6f 66   Changing any of
33c10 20 74 68 65 73 65 20 76 61 6c 75 65 73 20 77 69   these values wi
33c20 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20 20 20 20 20  ll likely..     
33c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33c40 2f 20 20 20 20 20 20 20 72 65 71 75 69 72 65 20  /       require 
33c50 61 20 6e 65 77 20 22 70 61 63 6b 61 67 65 20 6c  a new "package l
33c60 6f 61 64 20 6b 65 79 22 20 28 50 4c 4b 29 20 74  oad key" (PLK) t
33c70 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  o be..          
33c80 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
33c90 20 20 20 67 65 6e 65 72 61 74 65 64 20 69 6e 20     generated in 
33ca0 6f 72 64 65 72 20 74 6f 20 70 72 6f 70 65 72 6c  order to properl
33cb0 79 20 73 75 70 70 6f 72 74 20 6c 6f 61 64 69 6e  y support loadin
33cc0 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  g the..         
33cd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33ce0 20 20 20 20 70 61 63 6b 61 67 65 20 69 6e 74 6f      package into
33cf0 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32   Visual Studio 2
33d00 30 30 38 20 61 6e 64 20 65 61 72 6c 69 65 72 20  008 and earlier 
33d10 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20  without..       
33d20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
33d30 20 20 20 20 20 20 74 68 65 20 6d 61 74 63 68 69        the matchi
33d40 6e 67 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  ng Visual Studio
33d50 20 53 44 4b 20 62 65 69 6e 67 20 69 6e 73 74 61   SDK being insta
33d60 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  lled...         
33d70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33d80 20 20 20 20 50 6c 65 61 73 65 20 72 65 66 65 72      Please refer
33d90 20 74 6f 20 74 68 65 20 22 53 51 4c 69 74 65 2e   to the "SQLite.
33da0 44 65 73 69 67 6e 65 72 5c 70 6c 6b 2e 74 78 74  Designer\plk.txt
33db0 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  " file..        
33dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
33dd0 20 20 20 20 20 66 6f 72 20 74 68 65 20 65 78 69       for the exi
33de0 73 74 69 6e 67 20 6f 66 66 69 63 69 61 6c 20 76  sting official v
33df0 61 6c 75 65 73 20 61 6e 64 20 75 70 64 61 74 65  alues and update
33e00 20 74 68 65 6d 20 69 66 0d 0a 20 20 20 20 20 20   them if..      
33e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33e20 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79         necessary
33e30 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 6e 65 77  .  Also, the new
33e40 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70 61 63  ly generated pac
33e50 6b 61 67 65 20 6c 6f 61 64 0d 0a 20 20 20 20 20  kage load..     
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33e70 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74 73 65  /       key itse
33e80 6c 66 2c 20 77 68 69 63 68 20 69 73 20 61 20 31  lf, which is a 1
33e90 32 38 20 63 68 61 72 61 63 74 65 72 20 61 6c 70  28 character alp
33ea0 68 61 6e 75 6d 65 72 69 63 0d 0a 20 20 20 20 20  hanumeric..     
33eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33ec0 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20  /       string, 
33ed0 6d 75 73 74 20 62 65 20 70 6c 61 63 65 64 20 69  must be placed i
33ee0 6e 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 73  n the resource s
33ef0 74 72 69 6e 67 20 6e 61 6d 65 64 0d 0a 20 20 20  tring named..   
33f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f10 20 2f 2f 20 20 20 20 20 20 20 22 34 30 30 22 20   //       "400" 
33f20 69 6e 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44  in the "SQLite.D
33f30 65 73 69 67 6e 65 72 5c 56 53 50 61 63 6b 61 67  esigner\VSPackag
33f40 65 2e 72 65 73 78 22 20 66 69 6c 65 0d 0a 20 20  e.resx" file..  
33f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f60 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74    //       and t
33f70 68 65 6e 20 74 68 65 20 64 65 73 69 67 6e 65 72  hen the designer
33f80 20 61 73 73 65 6d 62 6c 79 20 69 74 73 65 6c 66   assembly itself
33f90 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20   must be..      
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33fb0 20 20 20 20 20 20 20 72 65 63 6f 6d 70 69 6c 65         recompile
33fc0 64 2e 20 20 41 73 20 6f 66 20 74 68 69 73 20 77  d.  As of this w
33fd0 72 69 74 69 6e 67 20 28 69 6e 20 46 65 62 72 75  riting (in Febru
33fe0 61 72 79 20 32 30 31 32 29 2c 0d 0a 20 20 20 20  ary 2012),..    
33ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34000 2f 2f 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c  //       the fol
34010 6c 6f 77 69 6e 67 20 55 52 4c 20 69 73 20 74 68  lowing URL is th
34020 65 20 70 72 6f 70 65 72 20 70 6c 61 63 65 20 74  e proper place t
34030 6f 20 67 65 6e 65 72 61 74 65 0d 0a 20 20 20 20  o generate..    
34040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34050 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65  //       package
34060 20 6c 6f 61 64 20 6b 65 79 73 3a 0d 0a 20 20 20   load keys:..   
34070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34080 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
34090 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
340a0 20 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69    http://msdn.mi
340b0 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75  crosoft.com/en-u
340c0 73 2f 76 73 74 75 64 69 6f 2f 63 63 36 35 35 37  s/vstudio/cc6557
340d0 39 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  95..            
340e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
340f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34100 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
34110 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b 65  tryKey packageKe
34120 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
34130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34140 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
34150 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
34160 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
34170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34180 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67    package.Packag
34190 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
341a0 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
341b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
341c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
341d0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
341e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
341f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34200 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
34210 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  kageKey == null)
34220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34250 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
34260 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
34270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34290 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
342a0 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
342b0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
342c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342d0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
342e0 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67  , package.Packag
342f0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
34300 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
34310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34320 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34330 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
34340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34350 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
34360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
34370 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
34380 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
34390 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
343a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343b0 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
343c0 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72  at("{0} Designer
343d0 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65   Package", Proje
343e0 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  ctName),..      
343f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34400 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
34410 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
34420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34430 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
34440 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
34450 67 65 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d  geKey, "Class",.
34460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34470 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
34480 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 53 51  Lite.Designer.SQ
34490 4c 69 74 65 50 61 63 6b 61 67 65 22 2c 20 77 68  LitePackage", wh
344a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
344b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
344c0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
344d0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
344e0 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
344f0 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20 20 20  CodeBase",..    
34500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34510 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
34520 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
34530 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
34540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
34550 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
34560 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
34570 79 2c 20 22 49 44 22 2c 20 34 30 30 2c 20 77 68  y, "ID", 400, wh
34580 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
34590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345a0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
345b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
345d0 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 53 79  irectory = GetSy
345e0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 77 6f  stemDirectory(wo
345f0 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34610 20 69 66 20 28 64 69 72 65 63 74 6f 72 79 20 3d   if (directory =
34620 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
34630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34640 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d       directory =
34650 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
34660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34670 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
34680 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
34690 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49  e(packageKey, "I
346a0 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c 0d  nprocServer32",.
346b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
346c0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61 74               Pat
346d0 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
346e0 6f 72 79 2c 20 22 6d 73 63 6f 72 65 65 2e 64 6c  ory, "mscoree.dl
346f0 6c 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  l"),..          
34700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34710 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
34720 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
34730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
34740 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
34750 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
34760 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22  y, "CompanyName"
34770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
34790 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61  http://system.da
347a0 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c  ta.sqlite.org/",
347b0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
347c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
347d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
347e0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
347f0 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
34800 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d  , "MinEdition",.
34810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34820 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 74               "st
34830 61 6e 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c  andard", whatIf,
34840 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
34850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34860 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
34870 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
34880 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75  ckageKey, "Produ
34890 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20  ctName",..      
348a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348b0 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
348c0 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65  mat("{0} Designe
348d0 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a  r Package", Proj
348e0 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  ectName),..     
348f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34900 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
34910 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
34920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34930 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
34940 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
34950 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74  ageKey, "Product
34960 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20  Version",..     
34970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34980 20 20 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68         "1.0", wh
34990 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
349a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
349b0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
349c0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
349d0 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a  y toolboxKey =..
349e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a00 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
34a10 72 65 61 74 65 53 75 62 4b 65 79 28 70 61 63 6b  reateSubKey(pack
34a20 61 67 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ageKey,..       
34a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a40 20 20 20 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f           "Toolbo
34a50 78 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  x", whatIf, verb
34a60 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
34a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
34a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
34aa0 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20   (toolboxKey == 
34ab0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
34ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ad0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34af0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
34b00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
34b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b30 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
34b40 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
34b50 3a 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  : " +..         
34b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b70 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
34b80 5c 54 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61  \Toolbox", packa
34b90 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  geKey);....     
34ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34bb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34bc0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
34bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34be0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c00 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
34c10 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
34c20 0a 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 20 20 20 20 20 20 20                  
34c40 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65   toolboxKey, "De
34c50 66 61 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c  fault Items", 3,
34c60 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
34c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c80 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
34c90 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
34cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
34cd0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34ce0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
34cf0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
34d00 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
34d10 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
34d20 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
34d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d40 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72  key, "Menus", tr
34d50 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
34d60 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
34d70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
34d90 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
34da0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34db0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34dd0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
34de0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
34df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e00 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
34e10 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
34e20 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c  ey: {0}\\Menus",
34e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
34e50 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
34e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34e70 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
34e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34ea0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
34eb0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
34ec0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
34ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
34ee0 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  Key, package.Pac
34ef0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
34f00 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
34f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f20 20 20 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33        ", 1000, 3
34f30 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
34f40 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
34f50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34f60 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34f70 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34f80 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
34f90 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
34fa0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
34fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
34fc0 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20  ey, "Services", 
34fd0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
34fe0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
34ff0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35010 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
35020 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
35030 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35050 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
35060 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
35070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35080 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
35090 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
350a0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69   key: {0}\\Servi
350b0 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
350c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350d0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
350e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350f0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
35100 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
35110 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
35120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35130 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
35140 74 72 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65  tryKey serviceKe
35150 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
35160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35170 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
35180 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
35190 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351b0 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63    package.Servic
351c0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
351d0 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
351e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
351f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
35200 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
35210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
35220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35230 20 20 20 20 20 20 20 20 20 69 66 20 28 73 65 72           if (ser
35240 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  viceKey == null)
35250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35260 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35280 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
35290 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
352a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
352b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352c0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
352d0 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
352e0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
352f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35300 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
35310 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63  , package.Servic
35320 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
35330 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
35340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35350 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35360 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
35370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35380 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
35390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
353a0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
353b0 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79  Value(serviceKey
353c0 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
353d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353e0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63       package.Pac
353f0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
35400 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
35410 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
35420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35430 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
35440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35450 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
35460 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73  elper.SetValue(s
35470 65 72 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65  erviceKey, "Name
35480 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
35490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
354b0 30 7d 20 44 65 73 69 67 6e 65 72 20 53 65 72 76  0} Designer Serv
354c0 69 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d  ice", ProjectNam
354d0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
354e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354f0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
35500 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
35510 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35520 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
35530 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
35540 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
35550 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
35560 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
35570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
355a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
355b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
355c0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
355d0 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61 63  bool RemoveVsPac
355e0 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
355f0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
35600 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
35610 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
35620 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
35630 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
35640 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
35650 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
35660 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
35670 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
35680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
35690 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
356a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
356b0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
356c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
356d0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
356e0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
356f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
35700 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
35710 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
35720 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35730 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
35740 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
35750 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35760 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
35770 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
35780 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
35790 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
357a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
357b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
357c0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
357d0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
357e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
357f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
35800 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
35810 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
35820 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
35830 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
35840 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
35850 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
35860 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
35870 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
35880 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72   suffix, perUser
35890 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
358a0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
358b0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
358c0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
358d0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
358e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
358f0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
35900 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
35910 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
35920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
35930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35940 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
35950 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
35960 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35970 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
35980 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
35990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
359a0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
359b0 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
359c0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
359d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
359e0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
359f0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
35a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35a10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
35a20 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
35a30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35a40 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
35a50 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
35a60 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
35a70 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
35a80 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
35a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
35aa0 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74  y, "Packages", t
35ab0 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
35ac0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
35ad0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
35af0 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
35b00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
35b10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b30 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
35b40 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
35b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b60 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
35b70 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
35b80 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67  key: {0}\\Packag
35b90 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
35ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bb0 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
35bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bd0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
35be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35bf0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
35c10 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
35c20 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
35c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35c40 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
35c50 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
35c60 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
35c70 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
35c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c90 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
35ca0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
35cb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35cc0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
35cd0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
35ce0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
35cf0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
35d00 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
35d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
35d20 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65  y, "Menus", true
35d30 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
35d40 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
35d50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35d60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35d70 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
35d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35d90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35db0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
35dc0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
35dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35de0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
35df0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
35e00 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a  : {0}\\Menus",..
35e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
35e30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35e40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
35e50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
35e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
35e80 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
35e90 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61  yHelper.DeleteVa
35ea0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
35eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
35ec0 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61  bKey, package.Pa
35ed0 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
35ee0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
35ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f00 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69         throwOnMi
35f10 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76  ssing, whatIf, v
35f20 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
35f30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
35f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
35f50 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
35f60 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
35f70 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
35f80 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
35f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fa0 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65     key, "Service
35fb0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
35fc0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
35fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ff0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
36000 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
36010 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
36020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36030 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
36040 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
36050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36060 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
36070 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
36080 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53  stry key: {0}\\S
36090 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20  ervices",..     
360a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360b0 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
360c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
360e0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
360f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
36100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36110 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
36120 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  er.DeleteSubKeyT
36130 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
36140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
36150 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65  bKey, package.Se
36160 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  rviceId.ToString
36170 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
36180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36190 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
361a0 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
361b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
361c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
361d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
361e0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
361f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
36200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36240 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
36250 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
36260 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63  ool ProcessVsPac
36270 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
36280 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
36290 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
362a0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
362b0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
362c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
362d0 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
362e0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
362f0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
36300 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
36310 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
36320 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
36330 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
36340 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
36350 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
36360 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
36370 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
36380 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
36390 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
363a0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
363b0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
363c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
363d0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
363e0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
363f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36400 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
36410 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
36420 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
36430 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
36440 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
36450 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
36460 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
36470 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36480 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
36490 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
364a0 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
364b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
364c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
364d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
364e0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
364f0 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
36500 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36510 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
36520 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
36530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36540 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
36550 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
36560 67 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55  ge, pair.X, perU
36570 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
36580 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c            wow64,
36590 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
365a0 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
365b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
365c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
365d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
365e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
365f0 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 61  eturn RemoveVsPa
36600 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
36610 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
36620 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
36630 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
36640 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
36650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36660 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73        throwOnMis
36670 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
36680 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
36690 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
366a0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
366b0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
366c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
366d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
366e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
366f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36710 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
36720 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
36730 75 64 69 6f 20 53 65 74 75 70 20 48 61 6e 64 6c  udio Setup Handl
36740 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
36750 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
36760 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 4f 75   VsDevEnvSetupOu
36770 74 70 75 74 44 61 74 61 52 65 63 65 69 76 65 64  tputDataReceived
36780 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  (..            o
36790 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 0d 0a 20  bject sender,.. 
367a0 20 20 20 20 20 20 20 20 20 20 20 44 61 74 61 52             DataR
367b0 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67 73  eceivedEventArgs
367c0 20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   e..            
367d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
367e0 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65 73            Proces
367f0 73 20 70 72 6f 63 65 73 73 20 3d 20 73 65 6e 64  s process = send
36800 65 72 20 61 73 20 50 72 6f 63 65 73 73 3b 0d 0a  er as Process;..
36810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
36820 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
36830 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
36840 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20  ty.Medium,..    
36850 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
36860 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
36870 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
36880 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
36890 20 20 20 20 20 20 20 20 20 20 56 73 44 65 76 45            VsDevE
368a0 6e 76 53 65 74 75 70 46 6f 72 6d 61 74 2c 20 70  nvSetupFormat, p
368b0 72 6f 63 65 73 73 2e 49 64 2c 20 65 2e 44 61 74  rocess.Id, e.Dat
368c0 61 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a),..           
368d0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
368e0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
368f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
36900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36940 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
36950 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
36960 64 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 45  d VsDevEnvSetupE
36970 72 72 6f 72 44 61 74 61 52 65 63 65 69 76 65 64  rrorDataReceived
36980 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  (..            o
36990 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 0d 0a 20  bject sender,.. 
369a0 20 20 20 20 20 20 20 20 20 20 20 44 61 74 61 52             DataR
369b0 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67 73  eceivedEventArgs
369c0 20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   e..            
369d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
369e0 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65 73            Proces
369f0 73 20 70 72 6f 63 65 73 73 20 3d 20 73 65 6e 64  s process = send
36a00 65 72 20 61 73 20 50 72 6f 63 65 73 73 3b 0d 0a  er as Process;..
36a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
36a20 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
36a30 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
36a40 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20  ty.Medium,..    
36a50 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
36a60 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
36a70 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
36a80 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
36a90 20 20 20 20 20 20 20 20 20 20 56 73 44 65 76 45            VsDevE
36aa0 6e 76 53 65 74 75 70 46 6f 72 6d 61 74 2c 20 70  nvSetupFormat, p
36ab0 72 6f 63 65 73 73 2e 49 64 2c 20 65 2e 44 61 74  rocess.Id, e.Dat
36ac0 61 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a),..           
36ad0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
36ae0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
36af0 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
36b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
36b50 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
36b60 6c 20 41 64 64 56 73 44 65 76 45 6e 76 53 65 74  l AddVsDevEnvSet
36b70 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  up(..           
36b80 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
36b90 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
36ba0 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
36bb0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
36bc0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
36bd0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
36be0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
36bf0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
36c00 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
36c10 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
36c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
36c30 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
36c40 20 20 20 20 20 20 20 20 69 66 20 28 70 65 72 55          if (perU
36c50 73 65 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ser)..          
36c60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36c70 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
36c80 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
36c90 3a 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  : Visual Studio 
36ca0 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
36cb0 20 72 75 6e 6e 69 6e 67 20 69 6e 20 27 73 65 74   running in 'set
36cc0 75 70 27 0d 0a 20 20 20 20 20 20 20 20 20 20 20  up'..           
36cd0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f       //       mo
36ce0 64 65 20 6f 6e 20 61 20 70 65 72 2d 75 73 65 72  de on a per-user
36cf0 20 62 61 73 69 73 3b 20 74 68 65 72 65 66 6f 72   basis; therefor
36d00 65 2c 20 73 6b 69 70 20 72 75 6e 6e 69 6e 67 0d  e, skip running.
36d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36d20 20 2f 2f 20 20 20 20 20 20 20 69 74 20 69 6e 20   //       it in 
36d30 74 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 20 20  that case...    
36d40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
36d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
36d70 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
36d80 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
36d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36da0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
36db0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
36dc0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
36dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36de0 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 75 64      "Visual Stud
36df0 69 6f 20 7b 30 7d 20 27 73 65 74 75 70 27 20 6d  io {0} 'setup' m
36e00 6f 64 65 20 69 73 20 70 65 72 2d 6d 61 63 68 69  ode is per-machi
36e10 6e 65 20 6f 6e 6c 79 2c 20 22 20 2b 0d 0a 20 20  ne only, " +..  
36e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e30 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
36e40 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
36e50 72 73 69 6f 6e 29 29 2c 20 74 72 61 63 65 43 61  rsion)), traceCa
36e60 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
36e70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
36e80 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
36e90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36ea0 20 20 20 20 20 20 20 50 72 6f 63 65 73 73 53 74         ProcessSt
36eb0 61 72 74 49 6e 66 6f 20 73 74 61 72 74 49 6e 66  artInfo startInf
36ec0 6f 20 3d 20 6e 65 77 20 50 72 6f 63 65 73 73 53  o = new ProcessS
36ed0 74 61 72 74 49 6e 66 6f 28 29 3b 0d 0a 0d 0a 20  tartInfo();.... 
36ee0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
36ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
36f00 54 45 3a 20 53 65 74 20 74 68 65 20 63 6f 72 65  TE: Set the core
36f10 20 70 72 6f 70 65 72 74 69 65 73 20 66 6f 72 20   properties for 
36f20 74 68 65 20 70 72 6f 63 65 73 73 20 74 6f 20 73  the process to s
36f30 74 61 72 74 2e 20 20 49 6e 20 74 68 69 73 0d 0a  tart.  In this..
36f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
36f50 20 20 20 20 20 63 61 73 65 2c 20 77 65 20 61 72       case, we ar
36f60 65 20 73 74 61 72 74 69 6e 67 20 74 68 65 20 70  e starting the p
36f70 72 69 6d 61 72 79 20 56 69 73 75 61 6c 20 53 74  rimary Visual St
36f80 75 64 69 6f 20 65 78 65 63 75 74 61 62 6c 65 0d  udio executable.
36f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
36fa0 20 20 20 20 20 20 28 64 65 76 65 6e 76 2e 65 78        (devenv.ex
36fb0 65 29 20 69 6e 20 22 73 65 74 75 70 22 20 6d 6f  e) in "setup" mo
36fc0 64 65 2c 20 73 6f 20 74 68 61 74 20 69 74 20 63  de, so that it c
36fd0 61 6e 20 72 65 66 72 65 73 68 20 69 74 73 0d 0a  an refresh its..
36fe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
36ff0 20 20 20 20 20 6c 69 73 74 20 6f 66 20 69 6e 73       list of ins
37000 74 61 6c 6c 65 64 20 70 61 63 6b 61 67 65 73 20  talled packages 
37010 61 6e 64 20 74 68 65 69 72 20 61 73 73 6f 63 69  and their associ
37020 61 74 65 64 20 72 65 73 6f 75 72 63 65 73 2e 0d  ated resources..
37030 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
37040 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61  .            sta
37050 72 74 49 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65 20  rtInfo.FileName 
37060 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
37070 69 72 65 63 74 6f 72 79 2c 20 22 64 65 76 65 6e  irectory, "deven
37080 76 2e 65 78 65 22 29 3b 0d 0a 20 20 20 20 20 20  v.exe");..      
37090 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e        startInfo.
370a0 41 72 67 75 6d 65 6e 74 73 20 3d 20 22 2f 73 65  Arguments = "/se
370b0 74 75 70 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  tup";..         
370c0 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 57 6f 72     startInfo.Wor
370d0 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 20 3d 20  kingDirectory = 
370e0 64 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20  directory;....  
370f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
37100 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
37110 45 3a 20 53 65 74 20 74 68 65 20 62 6f 6f 6c 65  E: Set the boole
37120 61 6e 20 66 6c 61 67 20 70 72 6f 70 65 72 74 69  an flag properti
37130 65 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20  es that require 
37140 6e 6f 6e 2d 64 65 66 61 75 6c 74 0d 0a 20 20 20  non-default..   
37150 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
37160 20 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65    values for the
37170 20 70 72 6f 63 65 73 73 20 74 6f 20 73 74 61 72   process to star
37180 74 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  t.  In this case
37190 2c 20 77 65 20 64 6f 20 6e 6f 74 0d 0a 20 20 20  , we do not..   
371a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
371b0 20 20 77 61 6e 74 20 74 68 65 20 73 68 65 6c 6c    want the shell
371c0 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
371d0 73 74 61 72 74 69 6e 67 20 74 68 65 20 70 72 6f  starting the pro
371e0 63 65 73 73 2e 20 20 49 6e 0d 0a 20 20 20 20 20  cess.  In..     
371f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
37200 61 64 64 69 74 69 6f 6e 2c 20 62 6f 74 68 20 73  addition, both s
37210 74 61 6e 64 61 72 64 20 6f 75 74 70 75 74 20 61  tandard output a
37220 6e 64 20 65 72 72 6f 72 20 64 61 74 61 20 73 68  nd error data sh
37230 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 20  ould be..       
37240 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
37250 64 69 72 65 63 74 65 64 2c 20 73 6f 20 69 74 20  directed, so it 
37260 63 61 6e 20 62 65 20 6c 6f 67 67 65 64 20 70 72  can be logged pr
37270 6f 70 65 72 6c 79 2e 0d 0a 20 20 20 20 20 20 20  operly...       
37280 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
37290 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 55       startInfo.U
372a0 73 65 53 68 65 6c 6c 45 78 65 63 75 74 65 20 3d  seShellExecute =
372b0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
372c0 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 52       startInfo.R
372d0 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 4f  edirectStandardO
372e0 75 74 70 75 74 20 3d 20 74 72 75 65 3b 0d 0a 20  utput = true;.. 
372f0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
37300 49 6e 66 6f 2e 52 65 64 69 72 65 63 74 53 74 61  Info.RedirectSta
37310 6e 64 61 72 64 45 72 72 6f 72 20 3d 20 74 72 75  ndardError = tru
37320 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
37330 20 20 50 72 6f 63 65 73 73 20 70 72 6f 63 65 73    Process proces
37340 73 20 3d 20 6e 65 77 20 50 72 6f 63 65 73 73 28  s = new Process(
37350 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37360 20 20 70 72 6f 63 65 73 73 2e 4f 75 74 70 75 74    process.Output
37370 44 61 74 61 52 65 63 65 69 76 65 64 20 2b 3d 20  DataReceived += 
37380 6e 65 77 20 44 61 74 61 52 65 63 65 69 76 65 64  new DataReceived
37390 45 76 65 6e 74 48 61 6e 64 6c 65 72 28 0d 0a 20  EventHandler(.. 
373a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
373b0 73 44 65 76 45 6e 76 53 65 74 75 70 4f 75 74 70  sDevEnvSetupOutp
373c0 75 74 44 61 74 61 52 65 63 65 69 76 65 64 29 3b  utDataReceived);
373d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
373e0 70 72 6f 63 65 73 73 2e 45 72 72 6f 72 44 61 74  process.ErrorDat
373f0 61 52 65 63 65 69 76 65 64 20 2b 3d 20 6e 65 77  aReceived += new
37400 20 44 61 74 61 52 65 63 65 69 76 65 64 45 76 65   DataReceivedEve
37410 6e 74 48 61 6e 64 6c 65 72 28 0d 0a 20 20 20 20  ntHandler(..    
37420 20 20 20 20 20 20 20 20 20 20 20 20 56 73 44 65              VsDe
37430 76 45 6e 76 53 65 74 75 70 45 72 72 6f 72 44 61  vEnvSetupErrorDa
37440 74 61 52 65 63 65 69 76 65 64 29 3b 0d 0a 0d 0a  taReceived);....
37450 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
37460 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
37470 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
37480 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
37490 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
374a0 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
374b0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
374c0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
374d0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
374e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
374f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
37500 66 69 6c 65 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20  fileName = {0}, 
37510 61 72 67 75 6d 65 6e 74 73 20 3d 20 7b 31 7d 2c  arguments = {1},
37520 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
37530 20 20 20 20 20 20 20 20 20 20 22 77 6f 72 6b 69            "worki
37540 6e 67 44 69 72 65 63 74 6f 72 79 20 3d 20 7b 32  ngDirectory = {2
37550 7d 2c 20 75 73 65 53 68 65 6c 6c 45 78 65 63 75  }, useShellExecu
37560 74 65 20 3d 20 7b 33 7d 2c 20 22 20 2b 0d 0a 20  te = {3}, " +.. 
37570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37580 20 20 20 22 72 65 64 69 72 65 63 74 53 74 61 6e     "redirectStan
37590 64 61 72 64 4f 75 74 70 75 74 20 3d 20 7b 34 7d  dardOutput = {4}
375a0 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
375b0 20 20 20 20 20 20 20 20 20 20 20 22 72 65 64 69             "redi
375c0 72 65 63 74 53 74 61 6e 64 61 72 64 45 72 72 6f  rectStandardErro
375d0 72 20 3d 20 7b 35 7d 22 2c 20 46 6f 72 44 69 73  r = {5}", ForDis
375e0 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
375f0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
37600 49 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65 29 2c 20  Info.FileName), 
37610 46 6f 72 44 69 73 70 6c 61 79 28 73 74 61 72 74  ForDisplay(start
37620 49 6e 66 6f 2e 41 72 67 75 6d 65 6e 74 73 29 2c  Info.Arguments),
37630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37640 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
37650 28 73 74 61 72 74 49 6e 66 6f 2e 57 6f 72 6b 69  (startInfo.Worki
37660 6e 67 44 69 72 65 63 74 6f 72 79 29 2c 20 46 6f  ngDirectory), Fo
37670 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
37680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
37690 74 61 72 74 49 6e 66 6f 2e 55 73 65 53 68 65 6c  tartInfo.UseShel
376a0 6c 45 78 65 63 75 74 65 29 2c 20 46 6f 72 44 69  lExecute), ForDi
376b0 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
376c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
376d0 74 49 6e 66 6f 2e 52 65 64 69 72 65 63 74 53 74  tInfo.RedirectSt
376e0 61 6e 64 61 72 64 4f 75 74 70 75 74 29 2c 20 46  andardOutput), F
376f0 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
37700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37710 73 74 61 72 74 49 6e 66 6f 2e 52 65 64 69 72 65  startInfo.Redire
37720 63 74 53 74 61 6e 64 61 72 64 45 72 72 6f 72 29  ctStandardError)
37730 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
37740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37750 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
37760 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 27 77    // NOTE: In 'w
37770 68 61 74 2d 69 66 27 20 6d 6f 64 65 2c 20 64 6f  hat-if' mode, do
37780 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74   not actually st
37790 61 72 74 20 74 68 65 20 70 72 6f 63 65 73 73 2e  art the process.
377a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
377b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
377c0 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
377d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
377e0 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 65             proce
377f0 73 73 2e 53 74 61 72 74 28 29 3b 0d 0a 20 20 20  ss.Start();..   
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f               pro
37810 63 65 73 73 2e 42 65 67 69 6e 4f 75 74 70 75 74  cess.BeginOutput
37820 52 65 61 64 4c 69 6e 65 28 29 3b 0d 0a 20 20 20  ReadLine();..   
37830 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f               pro
37840 63 65 73 73 2e 42 65 67 69 6e 45 72 72 6f 72 52  cess.BeginErrorR
37850 65 61 64 4c 69 6e 65 28 29 3b 0d 0a 20 20 20 20  eadLine();..    
37860 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63              proc
37870 65 73 73 2e 57 61 69 74 46 6f 72 45 78 69 74 28  ess.WaitForExit(
37880 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
37890 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
378a0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
378b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
378c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
378d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
37910 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
37920 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
37930 65 56 73 44 65 76 45 6e 76 53 65 74 75 70 28 0d  eVsDevEnvSetup(.
37940 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
37950 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
37960 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
37970 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
37980 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
37990 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
379a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
379b0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
379c0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
379d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
379e0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
379f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
37a00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37a10 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
37a20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 69 6e      // NOTE: Sin
37a30 63 65 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  ce Visual Studio
37a40 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61   does not have a
37a50 6e 20 27 75 6e 64 6f 27 20 6f 70 65 72 61 74 69  n 'undo' operati
37a60 6f 6e 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  on for..        
37a70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 73      //       its
37a80 20 27 73 65 74 75 70 27 20 6d 6f 64 65 2c 20 73   'setup' mode, s
37a90 69 6d 70 6c 79 20 65 78 65 63 75 74 65 20 74 68  imply execute th
37aa0 65 20 73 61 6d 65 20 63 6f 6d 6d 61 6e 64 20 61  e same command a
37ab0 67 61 69 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20  gain...         
37ac0 20 20 20 2f 2f 20 20 20 20 20 20 20 54 68 69 73     //       This
37ad0 20 73 68 6f 75 6c 64 20 66 6f 72 63 65 20 69 74   should force it
37ae0 20 74 6f 20 72 65 66 72 65 73 68 20 69 74 73 20   to refresh its 
37af0 6c 69 73 74 20 6f 66 20 69 6e 73 74 61 6c 6c 65  list of installe
37b00 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  d..            /
37b10 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 73  /       packages
37b20 20 61 6e 64 20 74 68 65 69 72 20 61 73 73 6f 63   and their assoc
37b30 69 61 74 65 64 20 72 65 73 6f 75 72 63 65 73 20  iated resources 
37b40 28 69 2e 65 2e 20 74 68 69 73 20 77 69 6c 6c 0d  (i.e. this will.
37b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
37b60 20 20 20 20 20 20 65 66 66 65 63 74 69 76 65 6c        effectivel
37b70 79 20 27 72 65 6d 6f 76 65 27 20 74 68 65 20 70  y 'remove' the p
37b80 61 63 6b 61 67 65 20 62 65 69 6e 67 20 70 72 6f  ackage being pro
37b90 63 65 73 73 65 64 20 73 69 6e 63 65 0d 0a 20 20  cessed since..  
37ba0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
37bb0 20 20 20 74 68 69 73 20 69 73 20 62 65 69 6e 67     this is being
37bc0 20 64 6f 6e 65 20 61 66 74 65 72 20 61 6c 6c 20   done after all 
37bd0 74 68 65 20 6f 74 68 65 72 20 63 68 61 6e 67 65  the other change
37be0 73 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20  s for the..     
37bf0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
37c00 70 61 63 6b 61 67 65 20 72 65 6d 6f 76 61 6c 20  package removal 
37c10 68 61 76 65 20 62 65 65 6e 20 63 6f 6d 70 6c 65  have been comple
37c20 74 65 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  ted)...         
37c30 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
37c40 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44     return AddVsD
37c50 65 76 45 6e 76 53 65 74 75 70 28 0d 0a 20 20 20  evEnvSetup(..   
37c60 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 56               vsV
37c70 65 72 73 69 6f 6e 2c 20 64 69 72 65 63 74 6f 72  ersion, director
37c80 79 2c 20 70 65 72 55 73 65 72 2c 20 77 68 61 74  y, perUser, what
37c90 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
37ca0 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
37cb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
37cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
37d10 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
37d20 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44   bool ProcessVsD
37d30 65 76 45 6e 76 53 65 74 75 70 28 0d 0a 20 20 20  evEnvSetup(..   
37d40 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
37d50 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
37d60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
37d70 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
37d80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
37d90 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
37da0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
37db0 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
37dc0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
37dd0 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
37de0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
37df0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
37e00 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
37e10 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
37e20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
37e30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
37e40 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
37e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
37e60 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
37e70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
37e80 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
37e90 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
37ea0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
37eb0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
37ec0 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
37ed0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
37ee0 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
37ef0 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
37f00 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
37f10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
37f20 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
37f30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
37f50 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
37f60 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  S callback data"
37f70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
37f80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
37f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
37fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
37fb0 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
37fc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37fd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
37fe0 6e 20 41 64 64 56 73 44 65 76 45 6e 76 53 65 74  n AddVsDevEnvSet
37ff0 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  up(..           
38000 20 20 20 20 20 20 20 20 20 76 73 56 65 72 73 69           vsVersi
38010 6f 6e 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 70  on, directory, p
38020 65 72 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20  erUser, whatIf, 
38030 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
38040 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
38050 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
38060 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
38070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
38080 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
38090 6f 76 65 56 73 44 65 76 45 6e 76 53 65 74 75 70  oveVsDevEnvSetup
380a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
380b0 20 20 20 20 20 20 20 76 73 56 65 72 73 69 6f 6e         vsVersion
380c0 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 70 65 72  , directory, per
380d0 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20 76 65  User, whatIf, ve
380e0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
380f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
38100 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
38110 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
38120 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
38130 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
38140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38180 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
38190 20 20 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69     #region Appli
381a0 63 61 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69  cation Entry Poi
381b0 6e 74 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  nt..        [Met
381c0 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
381d0 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
381e0 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
381f0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
38200 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20 20  nt Main(..      
38210 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
38220 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rgs..           
38230 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
38240 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
38250 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
38260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
38270 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
38280 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c  figuration = nul
38290 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
382a0 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72      string error
382b0 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
382c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
382d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
382e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
382f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
38310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
38320 72 65 67 69 6f 6e 20 44 65 62 75 67 67 65 72 20  region Debugger 
38330 48 6f 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  Hook..          
38340 20 20 20 20 20 20 69 66 20 28 45 6e 76 69 72 6f        if (Enviro
38350 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f 6e  nment.GetEnviron
38360 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22 42 72  mentVariable("Br
38370 65 61 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eak") != null)..
38380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38390 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
383a0 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
383b0 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20  riteLine(..     
383c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383d0 20 20 20 22 41 74 74 61 63 68 20 61 20 64 65 62     "Attach a deb
383e0 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73  ugger to process
383f0 20 7b 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20 20   {0} and " +..  
38400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38410 20 20 20 20 20 20 22 70 72 65 73 73 20 61 6e 79        "press any
38420 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 65   key to continue
38430 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
38440 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
38450 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50  cess.GetCurrentP
38460 72 6f 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a 0d  rocess().Id);...
38470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38480 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
38490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
384a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
384b0 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
384c0 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20  .ReadKey(true); 
384d0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
384e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
38500 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 49          catch (I
38510 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
38520 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e  xception) // Con
38530 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20  sole.ReadKey..  
38540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38550 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
38560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
38570 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
38580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38590 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
385a0 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 67            Debugg
385b0 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20  er.Break();..   
385c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
385d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385e0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
385f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
38600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
38640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38650 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64   #region Command
38660 20 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67   Line Processing
38670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38680 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61    if (!Configura
38690 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a  tion.FromArgs(..
386a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386b0 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 74 72          args, tr
386c0 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 72  ue, ref configur
386d0 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72  ation, ref error
386e0 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
386f0 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69            !Confi
38700 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73  guration.Process
38710 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
38720 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 2c             args,
38730 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
38740 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29  true, ref error)
38750 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
38760 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67           !Config
38770 75 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e  uration.CheckRun
38780 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
38790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387a0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
387b0 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65  ion, true, ref e
387c0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
387d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
387e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
387f0 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
38800 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  age(TracePriorit
38810 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.H