System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a39d9bad3eca3ea45ba6c070974a7b6b763da190:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73  m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67  ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73   System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69  ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63  n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65  Lite..{..    #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65  gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72  gates..    inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69  nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20   message, /* in 
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69  ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  n */..    );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 20 20  ing invariant,  
03d0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20  scription,      
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69  semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
04a0: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20  ring directory, 
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  /..        objec
04d0: 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  t clientData,   
04e0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
04f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
0500: 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20  User,           
0510: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0520: 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0540: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0550: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
0560: 73 73 69 6e 67 2c 20 20 20 20 20 20 20 2f 2a 20  ssing,       /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0580: 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20  ool whatIf,     
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
05b0: 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20   verbose,       
05c0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
05d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
05e0: 6c 20 73 61 76 65 64 2c 20 20 20 20 20 20 20 20  l saved,        
05f0: 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
0600: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
0610: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
0620: 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20    /* out */..   
0630: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f   );....    /////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0680: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
0690: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
06a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65  bool FrameworkRe
06b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
06c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
06d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
06e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69  ey rootKey, /* i
06f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0700: 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
0710: 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  me,             
0720: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0730: 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
0740: 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 20 20 20  workVersion,    
0750: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0760: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
0770: 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 20 20 20  latformName,    
0780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0790: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
07a0: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20  ing directory,  
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
07d0: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
07e0: 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 20  ata,            
07f0: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
0810: 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  ser,            
0820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0830: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0840: 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20   wow64,         
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0860: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0870: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
0880: 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20  sing,           
0890: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
08a0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
08b0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f,              
08c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
08d0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
08e0: 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20  verbose,        
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0900: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0910: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
0940: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f    );....    ////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69  ///////....    i
09a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
09b0: 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64   bool VisualStud
09c0: 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  ioRegistryCallba
09d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
09e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
09f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0a00: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0a10: 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
0a20: 69 6f 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20  ion,            
0a30: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0a40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
0a50: 66 66 69 78 2c 20 20 20 20 20 20 20 20 20 20 20  ffix,           
0a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c            /* in,
0a70: 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20   optional */..  
0a80: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
0a90: 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
0aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0ab0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0ac0: 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20 20 20  g directory,    
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0ae0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0af0: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
0b00: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
0b10: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0b20: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
0b30: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
0b40: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
0b50: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
0b60: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20  ow64,           
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0b80: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0b90: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0ba0: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
0bb0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0bc0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0be0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0bf0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
0c00: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20  rbose,          
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0c20: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  n */..        re
0c30: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
0c60: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
0c70: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
0cd0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d  gion Public Enum
0ce0: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46  erations..    [F
0cf0: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62  lags()]..    pub
0d00: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c  lic enum Install
0d10: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Flags..    {..  
0d20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
0d30: 72 6d 61 6c 20 46 6c 61 67 73 0d 0a 20 20 20 20  rmal Flags..    
0d40: 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d      None = 0x0,.
0d50: 0a 20 20 20 20 20 20 20 20 47 6c 6f 62 61 6c 41  .        GlobalA
0d60: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 30  ssemblyCache = 0
0d70: 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41 73 73  x1,..        Ass
0d80: 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d 20 30  emblyFolders = 0
0d90: 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44 62 50  x2,..        DbP
0da0: 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 20 3d  roviderFactory =
0db0: 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 56   0x4,..        V
0dc0: 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38 2c 0d  sPackage = 0x8,.
0dd0: 0a 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61  .        VsPacka
0de0: 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
0df0: 43 61 63 68 65 20 3d 20 30 78 31 30 2c 0d 0a 20  Cache = 0x10,.. 
0e00: 20 20 20 20 20 20 20 56 73 44 61 74 61 53 6f 75         VsDataSou
0e10: 72 63 65 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20  rce = 0x20,..   
0e20: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
0e30: 64 65 72 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20  der = 0x40,..   
0e40: 20 20 20 20 20 56 73 44 65 76 45 6e 76 53 65 74       VsDevEnvSet
0e50: 75 70 20 3d 20 30 78 38 30 2c 0d 0a 20 20 20 20  up = 0x80,..    
0e60: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0e70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
0e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
0ed0: 67 69 6f 6e 20 43 6f 6d 70 6f 73 69 74 65 20 46  gion Composite F
0ee0: 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 46 72  lags..        Fr
0ef0: 61 6d 65 77 6f 72 6b 20 3d 20 47 6c 6f 62 61 6c  amework = Global
0f00: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 20  AssemblyCache | 
0f10: 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20  AssemblyFolders 
0f20: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
0f30: 20 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65         DbProvide
0f40: 72 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a 20 20 20  rFactory,....   
0f50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0fa0: 20 20 20 20 20 20 20 20 56 73 20 3d 20 56 73 50          Vs = VsP
0fb0: 61 63 6b 61 67 65 20 7c 20 56 73 50 61 63 6b 61  ackage | VsPacka
0fc0: 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
0fd0: 43 61 63 68 65 20 7c 20 56 73 44 61 74 61 53 6f  Cache | VsDataSo
0fe0: 75 72 63 65 20 7c 0d 0a 20 20 20 20 20 20 20 20  urce |..        
0ff0: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
1000: 64 65 72 20 7c 20 56 73 44 65 76 45 6e 76 53 65  der | VsDevEnvSe
1010: 74 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tup,....        
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1070: 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77 6f     All = Framewo
1080: 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20 20 20  rk | Vs,....    
1090: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
10e0: 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65 70 74         AllExcept
10f0: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
1100: 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 28 47 6c  che = All & ~(Gl
1110: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
1120: 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e |..           
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1140: 20 20 20 20 20 20 20 20 20 20 20 20 56 73 50 61              VsPa
1150: 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d  ckageGlobalAssem
1160: 62 6c 79 43 61 63 68 65 29 2c 0d 0a 20 20 20 20  blyCache),..    
1170: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1180: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 65 66  /....        Def
11e0: 61 75 6c 74 20 3d 20 41 6c 6c 0d 0a 20 20 20 20  ault = All..    
11f0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61  ////....    [Fla
1250: 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69  gs()]..    publi
1260: 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69 6f  c enum TracePrio
1270: 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  rity..    {..   
1280: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
1290: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
12a0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
12b0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
12c0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
12d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
12e0: 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a 20 20 20  mLow = 0x8,..   
12f0: 20 20 20 20 20 4d 65 64 69 75 6d 20 3d 20 30 78       Medium = 0x
1300: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  10,..        Med
1310: 69 75 6d 48 69 67 68 20 3d 20 30 78 32 30 2c 0d  iumHigh = 0x20,.
1320: 0a 20 20 20 20 20 20 20 20 48 69 67 68 20 3d 20  .        High = 
1330: 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x40,..        H
1340: 69 67 68 65 72 20 3d 20 30 78 38 30 2c 0d 0a 20  igher = 0x80,.. 
1350: 20 20 20 20 20 20 20 48 69 67 68 65 73 74 20 3d         Highest =
1360: 20 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20   0x100,..       
1370: 20 44 65 66 61 75 6c 74 20 3d 20 4d 65 64 69 75   Default = Mediu
1380: 6d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  m..    }..    #e
1390: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
13f0: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 73 74 61     #region Insta
1400: 6c 6c 65 72 20 43 6c 61 73 73 0d 0a 23 69 66 20  ller Class..#if 
1410: 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35  NET_40 || NET_45
1420: 20 7c 7c 20 4e 45 54 5f 34 35 31 0d 0a 20 20 20   || NET_451..   
1430: 20 5b 53 65 63 75 72 69 74 79 43 72 69 74 69 63   [SecurityCritic
1440: 61 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20 20  al()]..#else..  
1450: 20 20 5b 53 65 63 75 72 69 74 79 50 65 72 6d 69    [SecurityPermi
1460: 73 73 69 6f 6e 28 53 65 63 75 72 69 74 79 41 63  ssion(SecurityAc
1470: 74 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64 2c  tion.LinkDemand,
1480: 20 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20 3d   UnmanagedCode =
1490: 20 74 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66 0d   true)]..#endif.
14a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
14b0: 61 74 69 63 20 63 6c 61 73 73 20 49 6e 73 74 61  atic class Insta
14c0: 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ller..    {..   
14d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 6e 73       #region Uns
14e0: 61 66 65 20 4e 61 74 69 76 65 20 4d 65 74 68 6f  afe Native Metho
14f0: 64 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ds Class..      
1500: 20 20 5b 53 75 70 70 72 65 73 73 55 6e 6d 61 6e    [SuppressUnman
1510: 61 67 65 64 43 6f 64 65 53 65 63 75 72 69 74 79  agedCodeSecurity
1520: 28 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ()]..        pri
1530: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
1540: 73 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  s UnsafeNativeMe
1550: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 7b  thods..        {
1560: 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
1570: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1580: 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e 33 32 20  on Native Win32 
1590: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
15a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
15b0: 6f 6e 73 74 20 69 6e 74 20 4d 41 58 5f 50 41 54  onst int MAX_PAT
15c0: 48 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20 20  H = 260;....    
15d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1620: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1630: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 43 53 49  te const int CSI
1640: 44 4c 5f 53 59 53 54 45 4d 58 38 36 20 3d 20 30  DL_SYSTEMX86 = 0
1650: 78 30 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20 20  x0029;....      
1660: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
16b0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
16c0: 20 63 6f 6e 73 74 20 69 6e 74 20 53 48 47 46 50   const int SHGFP
16d0: 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 20 3d 20  _TYPE_CURRENT = 
16e0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
16f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1740: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1750: 73 74 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30 3b  st int S_OK = 0;
1760: 20 2f 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d 0a   /* HRESULT */..
1770: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1780: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1790: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17e0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
17f0: 20 4e 61 74 69 76 65 20 57 69 6e 64 6f 77 73 20   Native Windows 
1800: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
1810: 20 20 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 28       [DllImport(
1820: 22 73 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c 0d  "shfolder.dll",.
1830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1840: 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69   CallingConventi
1850: 6f 6e 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e 76  on = CallingConv
1860: 65 6e 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d 0a  ention.Winapi,..
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 43 68 61 72 53 65 74 20 3d 20 43 68 61 72 53 65  CharSet = CharSe
1890: 74 2e 41 75 74 6f 2c 20 42 65 73 74 46 69 74 4d  t.Auto, BestFitM
18a0: 61 70 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c 0d  apping = false,.
18b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c0: 20 54 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61 62   ThrowOnUnmappab
18d0: 6c 65 43 68 61 72 20 3d 20 74 72 75 65 2c 20 53  leChar = true, S
18e0: 65 74 4c 61 73 74 45 72 72 6f 72 20 3d 20 74 72  etLastError = tr
18f0: 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ue)]..          
1900: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1910: 20 65 78 74 65 72 6e 20 69 6e 74 20 53 48 47 65   extern int SHGe
1920: 74 46 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20 20  tFolderPath(..  
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
1940: 74 50 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c 20  tPtr hWndOwner, 
1950: 69 6e 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e 74  int nFolder, Int
1960: 50 74 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e 74  Ptr hToken, uint
1970: 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20   flags,..       
1980: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1990: 62 75 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41 58  buffer /* >= MAX
19a0: 5f 50 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20 20  _PATH */);..    
19b0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
19c0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
19d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1a30: 6c 69 63 20 57 72 61 70 70 65 72 20 4d 65 74 68  lic Wrapper Meth
1a40: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
1a50: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
1a60: 74 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44  tring GetSystemD
1a70: 69 72 65 63 74 6f 72 79 28 29 0d 0a 20 20 20 20  irectory()..    
1a80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a90: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1aa0: 72 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74  r buffer = IntPt
1ab0: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
1ac0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1af0: 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20         buffer = 
1b00: 4d 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f 54  Marshal.AllocCoT
1b10: 61 73 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20 20  askMem(..       
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b30: 20 73 69 7a 65 6f 66 28 63 68 61 72 29 20 2a 20   sizeof(char) * 
1b40: 28 4d 41 58 5f 50 41 54 48 20 2b 20 31 29 29 3b  (MAX_PATH + 1));
1b50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b60: 20 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66          if (buff
1b70: 65 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  er != IntPtr.Zer
1b80: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
1b90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb0: 20 20 20 69 66 20 28 53 48 47 65 74 46 6f 6c 64     if (SHGetFold
1bc0: 65 72 50 61 74 68 28 49 6e 74 50 74 72 2e 5a 65  erPath(IntPtr.Ze
1bd0: 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro,..           
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 20 20 20 20 20 43 53 49 44 4c 5f 53 59 53 54 45       CSIDL_SYSTE
1c00: 4d 58 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65 72  MX86, IntPtr.Zer
1c10: 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o,..            
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 20 20 20 20 53 48 47 46 50 5f 54 59 50 45 5f 43      SHGFP_TYPE_C
1c40: 55 52 52 45 4e 54 2c 20 62 75 66 66 65 72 29 20  URRENT, buffer) 
1c50: 3d 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20 20  == S_OK)..      
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c90: 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
1ca0: 50 74 72 54 6f 53 74 72 69 6e 67 41 75 74 6f 28  PtrToStringAuto(
1cb0: 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20  buffer);..      
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1ce0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1d10: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1d20: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1d30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d60: 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20 74     // TODO: Is t
1d70: 68 69 73 20 74 68 65 20 72 69 67 68 74 20 65 72  his the right er
1d80: 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f 6c  ror handling sol
1d90: 75 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ution..         
1da0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1db0: 20 20 20 20 74 6f 20 75 73 65 20 61 74 20 74 68      to use at th
1dc0: 69 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20 20  is point?..     
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1de0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1df0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1e00: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1e10: 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1e20: 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e40: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1e50: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1e60: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e80: 20 20 20 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f         "Could no
1e90: 74 20 67 65 74 20 73 79 73 74 65 6d 20 64 69 72  t get system dir
1ea0: 65 63 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65 29  ectory: {0}", e)
1eb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ec0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1ed0: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef0: 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20    throw;..      
1f00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
1f20: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1f30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f50: 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74  (buffer != IntPt
1f60: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f90: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
1fa0: 46 72 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62 75  FreeCoTaskMem(bu
1fb0: 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffer);..        
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd0: 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e  buffer = IntPtr.
1fe0: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
1ff0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2010: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2020: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
2030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2040: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2050: 72 65 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a  region..#endif..
2060: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2070: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2080: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
20e0: 69 6f 6e 20 50 72 69 76 61 74 65 20 48 65 6c 70  ion Private Help
20f0: 65 72 20 43 6c 61 73 73 65 73 0d 0a 20 20 20 20  er Classes..    
2100: 20 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79 50      #region AnyP
2110: 61 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  air Class..     
2120: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
2130: 64 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72 3c  d class AnyPair<
2140: 54 31 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20 20  T1, T2>..       
2150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2160: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
2170: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
2180: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2190: 20 20 20 20 20 20 20 20 20 2f 2f 20 57 41 52 4e           // WARN
21a0: 49 4e 47 3a 20 54 68 69 73 20 63 6f 6e 73 74 72  ING: This constr
21b0: 75 63 74 6f 72 20 70 72 6f 64 75 63 65 73 20 61  uctor produces a
21c0: 6e 20 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d 70  n immutable "emp
21d0: 74 79 22 20 70 61 69 72 0d 0a 20 20 20 20 20 20  ty" pair..      
21e0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
21f0: 20 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20    object...     
2200: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2210: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e         public An
2220: 79 50 61 69 72 28 29 0d 0a 20 20 20 20 20 20 20  yPair()..       
2230: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
2240: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2260: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
2270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2280: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22e0: 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72    public AnyPair
22f0: 28 54 31 20 78 29 0d 0a 20 20 20 20 20 20 20 20  (T1 x)..        
2300: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29          : this()
2310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2330: 20 74 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20 20   this.x = x;..  
2340: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2350: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23b0: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20  blic AnyPair(T1 
23c0: 78 2c 20 54 32 20 79 29 0d 0a 20 20 20 20 20 20  x, T2 y)..      
23d0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
23e0: 28 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  (x)..           
23f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2400: 20 20 20 20 74 68 69 73 2e 79 20 3d 20 79 3b 0d      this.y = y;.
2410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2420: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2430: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2440: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2490: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
24a0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
24b0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
24c0: 70 72 69 76 61 74 65 20 54 31 20 78 3b 0d 0a 20  private T1 x;.. 
24d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
24e0: 63 20 54 31 20 58 0d 0a 20 20 20 20 20 20 20 20  c T1 X..        
24f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2500: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2510: 75 72 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20 20  urn x; }..      
2520: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2530: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2580: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2590: 65 20 54 32 20 79 3b 0d 0a 20 20 20 20 20 20 20  e T2 y;..       
25a0: 20 20 20 20 20 70 75 62 6c 69 63 20 54 32 20 59       public T2 Y
25b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
25c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 79 3b   get { return y;
25e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2600: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
2610: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2620: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2630: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2680: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54         #region T
2690: 72 61 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a 20  raceOps Class.. 
26a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
26b0: 74 61 74 69 63 20 63 6c 61 73 73 20 54 72 61 63  tatic class Trac
26c0: 65 4f 70 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  eOps..        {.
26d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
26e0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
26f0: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
2700: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
2710: 74 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74  t string Default
2720: 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 22 23  DebugFormat = "#
2730: 7b 30 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b  {0:000} @ {1}: {
2740: 32 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  2}";..          
2750: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2760: 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72  string DefaultTr
2770: 61 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30  aceFormat = "#{0
2780: 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d  :000} @ {1}: {2}
2790: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
27a0: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
27b0: 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31 44 61  string Iso8601Da
27c0: 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d  teTimeOutputForm
27d0: 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  at =..          
27e0: 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d 2e 64        "yyyy.MM.d
27f0: 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 66 66  dTHH:mm:ss.fffff
2800: 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ff";..          
2810: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2870: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2880: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
2890: 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
28a0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28b0: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
28c0: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
28d0: 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ect();..        
28e0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
28f0: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65 62 75  ic long nextDebu
2900: 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gId;..          
2910: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2920: 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63 65 49   long nextTraceI
2930: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
2940: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 49  private static I
2950: 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e  List<TraceListen
2960: 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65 6e 65  er> debugListene
2970: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
2980: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2990: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
29a0: 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 54 72  bugPriority = Tr
29b0: 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61  acePriority.Defa
29c0: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
29d0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
29e0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
29f0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 54  racePriority = T
2a00: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
2a10: 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ault;..         
2a20: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2a30: 63 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  c string debugFo
2a40: 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 44 65  rmat = DefaultDe
2a50: 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
2a60: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2a70: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
2a80: 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66 61  aceFormat = Defa
2a90: 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ultTraceFormat;.
2aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2ab0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2ac0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b10: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2b20: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
2b30: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
2b40: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
2b50: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
2b60: 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74  ity DebugPriorit
2b70: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
2b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b90: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
2ba0: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
2bb0: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20   debugPriority; 
2bc0: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
2bd0: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
2be0: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62  (syncRoot) { deb
2bf0: 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  ugPriority = val
2c00: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
2c10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c20: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2c70: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2c80: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
2c90: 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69  rity TracePriori
2ca0: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
2cb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cc0: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
2cd0: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
2ce0: 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n tracePriority;
2cf0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
2d00: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
2d10: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
2d20: 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61  acePriority = va
2d30: 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  lue; } }..      
2d40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2da0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2db0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
2dc0: 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20  ebugFormat..    
2dd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2de0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2df0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
2e00: 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
2e10: 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20  ormat; } }..    
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2e30: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
2e40: 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20  ) { debugFormat 
2e50: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
2e60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2ed0: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
2ee0: 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a  ng TraceFormat..
2ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2f10: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
2f20: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74 72  oot) { return tr
2f30: 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a  aceFormat; } }..
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f50: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
2f60: 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46 6f 72  Root) { traceFor
2f70: 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  mat = value; } }
2f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2fa0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2fb0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3000: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
3010: 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20 53 75  n Interactive Su
3020: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20  pport Methods.. 
3030: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
3040: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
3050: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
3060: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
3070: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3080: 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 53 68   DialogResult Sh
3090: 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  owMessage(..    
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
30b0: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
30c0: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
30d0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
30e0: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
30f0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
3100: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
3110: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
3120: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
3130: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
3140: 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
3150: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3160: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
3170: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
3180: 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20  g category,..   
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
31a0: 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20 62  sageBoxButtons b
31b0: 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  uttons,..       
31c0: 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
31d0: 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20  BoxIcon icon..  
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
31f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3210: 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65 73  DialogResult res
3220: 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73 75  ult = DialogResu
3230: 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20  lt.OK;....      
3240: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
3250: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
3260: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
3270: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3280: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3290: 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73 61 67  Callback, messag
32a0: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  e, category);...
32b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32c0: 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66 6f 72   if (SystemInfor
32d0: 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74 65 72  mation.UserInter
32e0: 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20 20 20  active)..       
32f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3310: 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d 20 47  string title = G
3320: 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
3330: 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20  assembly);....  
3340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3350: 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d 20 6e    if (title == n
3360: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69                ti
3380: 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74 69 6f  tle = Applicatio
3390: 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a  n.ProductName;..
33a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33b0: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 4d        result = M
33c0: 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 28 6d  essageBox.Show(m
33d0: 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c 20 62  essage, title, b
33e0: 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a  uttons, icon);..
33f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3400: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72        DebugAndTr
3410: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
3420: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
3430: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3440: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3450: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
3460: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 20 22 55 73 65 72 20 63 68 6f 69 63 65 20 6f    "User choice o
3490: 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70  f {0}.", ForDisp
34a0: 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20  lay(result)),.. 
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c0: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29         category)
34d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34f0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
3500: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
3520: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
3530: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
3540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3550: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
3560: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
3570: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
3580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3590: 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f 69 63    "Default choic
35a0: 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  e of {0}.", ForD
35b0: 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c  isplay(result)),
35c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35d0: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b        category);
35e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35f0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
3600: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
3610: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
3620: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
3630: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3680: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
3690: 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70 70  ion Tracing Supp
36a0: 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ort Methods..   
36b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
36c0: 73 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 75  static void Setu
36d0: 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28  pDebugListeners(
36e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
36f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3700: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65    if (debugListe
3710: 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ners == null).. 
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3730: 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72     debugListener
3740: 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 72 61  s = new List<Tra
3750: 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b 0d 0a  ceListener>();..
3760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3770: 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73    debugListeners
3780: 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65  .Add(new Console
3790: 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29  TraceListener())
37a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
37b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3800: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3810: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3820: 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49   long NextDebugI
3830: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
3840: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3850: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
3860: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
3870: 28 72 65 66 20 6e 65 78 74 44 65 62 75 67 49 64  (ref nextDebugId
3880: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3890: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
38a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
38f0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3900: 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65  c long NextTrace
3910: 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  Id()..          
3920: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3930: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65       return Inte
3940: 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e  rlocked.Incremen
3950: 74 28 72 65 66 20 6e 65 78 74 54 72 61 63 65 49  t(ref nextTraceI
3960: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
3970: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3980: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
39d0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
39e0: 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74  ic string TimeSt
39f0: 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61 74  amp(DateTime dat
3a00: 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  eTime)..        
3a10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61         return da
3a30: 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28  teTime.ToString(
3a40: 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f  Iso8601DateTimeO
3a50: 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20  utputFormat);.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3ac0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
3ad0: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
3ae0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
3af0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
3b00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
3b10: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
3b20: 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20  MethodName(..   
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61               Sta
3b40: 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61  ckTrace stackTra
3b50: 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
3b60: 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a       int level..
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ba0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
3bb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3be0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
3bf0: 66 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20  f a valid stack 
3c00: 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75  trace was not su
3c10: 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20  pplied by the.. 
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c30: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
3c40: 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e  er, create one n
3c50: 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ow based on the 
3c60: 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20  current..       
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3c80: 20 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20        execution 
3c90: 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20  stack...        
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cc0: 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61      if (stackTra
3cd0: 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ce == null)..   
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d20: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3d30: 20 47 72 61 62 20 74 68 65 20 63 75 72 72 65 6e   Grab the curren
3d40: 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63  t execution stac
3d50: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d80: 20 20 20 20 20 20 20 20 73 74 61 63 6b 54 72 61          stackTra
3d90: 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72  ce = new StackTr
3da0: 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ace();....      
3db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dc0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3de0: 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b   NOTE: Always sk
3df0: 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61  ip this call fra
3e00: 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70 74 75  me when we captu
3e10: 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
3e30: 20 20 20 20 20 74 68 65 20 73 74 61 63 6b 20 74       the stack t
3e40: 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  race...         
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3e60: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3e70: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c             level
3e80: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
3e90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3eb0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3ec0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3ed0: 45 3a 20 47 65 74 20 74 68 65 20 73 70 65 63 69  E: Get the speci
3ee0: 66 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65  fied stack frame
3ef0: 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65   (always add one
3f00: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
3f10: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3f20: 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68    skip this meth
3f30: 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  od)...          
3f40: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f60: 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61    StackFrame sta
3f70: 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54  ckFrame = stackT
3f80: 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65  race.GetFrame(le
3f90: 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  vel);....       
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3fc0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
3fd0: 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72  t the method for
3fe0: 20 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65   the stack frame
3ff0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4000: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
4020: 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64  ethodBase method
4030: 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d  Base = stackFram
4040: 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a  e.GetMethod();..
4050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4060: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4080: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74   NOTE: Get the t
4090: 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68  ype for the meth
40a0: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
40b0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40d0: 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74   Type type = met
40e0: 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e  hodBase.Declarin
40f0: 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  gType;....      
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4120: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
4130: 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  et the name of t
4140: 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  he method...    
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4160: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4170: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
4180: 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65  ame = methodBase
4190: 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Name;....      
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
41b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
41c0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
41d0: 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72  eturn the proper
41e0: 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73  ly formatted res
41f0: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ult...          
4200: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4220: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
4230: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
4240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4250: 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79   "{0}{1}{2}", ty
4260: 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65  pe.Name, Type.De
4270: 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d  limiter, name);.
4280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4290: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
42a0: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
42b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42d0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
42e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
42f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4300: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
4310: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
4320: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4330: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4370: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4380: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4390: 69 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72  ic void DebugCor
43a0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
43b0: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
43c0: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
43d0: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
43e0: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
43f0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4400: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4410: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
4420: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
4430: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 69 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65  if (debugListene
4460: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4490: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
44a0: 61 63 68 20 28 54 72 61 63 65 4c 69 73 74 65 6e  ach (TraceListen
44b0: 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e 20 64  er listener in d
44c0: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a  ebugListeners)..
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4500: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e         listener.
4510: 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61 67  WriteLine(messag
4520: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  e, category);.. 
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65             liste
4550: 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20  ner.Flush();..  
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4570: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
45b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
45c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4600: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4610: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4620: 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72 65 28   void TraceCore(
4630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4640: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
4650: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4660: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
4670: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
4680: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
4690: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
46a0: 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
46b0: 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Root)..         
46c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
46e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
46f0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
4700: 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 67 65  rite the message
4710: 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69   to all the acti
4720: 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ve trace..      
4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4740: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 73         listeners
4750: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4760: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
4780: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d  race.WriteLine(m
4790: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
47a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
47b0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 46 6c          Trace.Fl
47c0: 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ush();..        
47d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
47e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
47f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4840: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
4850: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
4860: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
4870: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
4880: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4890: 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64   string DebugAnd
48a0: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
48b0: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
48c0: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
48d0: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
48e0: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
48f0: 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ack debugCallbac
4900: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
4910: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
4920: 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  k traceCallback,
4930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4940: 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63 65    Exception exce
4950: 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
4960: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
4970: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
4980: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4990: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
49a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
49b0: 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  xception != null
49c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
49d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65         return De
49e0: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
49f0: 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67  ePriority, debug
4a00: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a20: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
4a30: 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65  , new StackTrace
4a40: 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75 65  (exception, true
4a50: 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  ), 0,..         
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
4a70: 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e  xception.ToStrin
4a80: 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  g(), category);.
4a90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4aa0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b10: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4b20: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
4b30: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
4b40: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
4b50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4b60: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
4b70: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4b90: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
4ba0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
4bb0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4bc0: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
4bd0: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4be0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
4bf0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
4c00: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
4c10: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
4c20: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
4c30: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4c40: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
4c50: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4c60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4c70: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4c80: 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65  rn DebugAndTrace
4c90: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4ca0: 20 20 20 20 20 20 20 74 72 61 63 65 50 72 69 6f         tracePrio
4cb0: 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62  rity, debugCallb
4cc0: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
4cd0: 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20  ck, null, 1,..  
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cf0: 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67    message, categ
4d00: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
4d10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4d20: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d60: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4d70: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
4d80: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
4d90: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
4da0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
4db0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
4dc0: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
4dd0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4de0: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
4df0: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
4e00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4e10: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4e20: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4e40: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
4e50: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
4e70: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
4e80: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
4e90: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
4ea0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4eb0: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
4ec0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4ed0: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
4ee0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
4ef0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4f00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4f10: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4f20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4f30: 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20  TE: Always skip 
4f40: 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20  this call frame 
4f50: 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72 61  if the stack tra
4f60: 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  ce is..         
4f70: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
4f80: 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74  going to be capt
4f90: 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f  ured by GetMetho
4fa0: 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20  dName...        
4fb0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4fd0: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75  stackTrace == nu
4fe0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4ff0: 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b           level++
5000: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5010: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5020: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5030: 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65 73  : Format the mes
5040: 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61 79  sage for display
5050: 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20   (once)...      
5060: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
5080: 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20 3d  ring formatted =
5090: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
50a0: 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}: {1}",..    
50b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50c0: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74  GetMethodName(st
50d0: 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29  ackTrace, level)
50e0: 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  , message);.... 
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5100: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
5110: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
5120: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
5130: 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20  k is invalid or 
5140: 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72 69  the trace priori
5150: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
5160: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20      //       of 
5170: 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20  this message is 
5180: 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20 77  less than what w
5190: 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74  e currently want
51a0: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
51b0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 65       //       de
51c0: 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20  bug, skip it... 
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
51e0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
51f0: 20 20 20 69 66 20 28 28 64 65 62 75 67 43 61 6c     if ((debugCal
5200: 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26  lback != null) &
5210: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
5220: 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72 69         (tracePri
5230: 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72  ority >= DebugPr
5240: 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20  iority))..      
5250: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5270: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5280: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5290: 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 62  : Invoke the deb
52a0: 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ug callback with
52b0: 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a   the formatted..
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52d0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73      //       mes
52e0: 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61 74  sage and the cat
52f0: 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64 20  egory specified 
5300: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
5310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
5320: 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20       caller...  
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5340: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5350: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
5360: 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65  allback(formatte
5370: 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  d, category);.. 
5380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5390: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
53a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
53b0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
53c0: 20 49 66 20 74 68 65 20 74 72 61 63 65 20 63 61   If the trace ca
53d0: 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69  llback is invali
53e0: 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70  d or the trace p
53f0: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
5400: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5410: 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67    of this messag
5420: 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77  e is less than w
5430: 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79  hat we currently
5440: 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20   want to..      
5450: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5460: 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20 69     trace, skip i
5470: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
5480: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5490: 20 20 20 20 20 20 20 20 69 66 20 28 28 74 72 61          if ((tra
54a0: 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
54b0: 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
54c0: 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61              (tra
54d0: 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54 72  cePriority >= Tr
54e0: 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a 20  acePriority)).. 
54f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5510: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5530: 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68   NOTE: Invoke th
5540: 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
5550: 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74   with the format
5560: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
5570: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5580: 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68    message and th
5590: 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69  e category speci
55a0: 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
55b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55c0: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
55d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
55e0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
55f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5600: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72  raceCallback(for
5610: 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79  matted, category
5620: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5640: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5650: 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20  message;..      
5660: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5670: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5680: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5690: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
56a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
56b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
5700: 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72  gion MockRegistr
5710: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
5720: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
5730: 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74  class MockRegist
5740: 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  ry : IDisposable
5750: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5760: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
5770: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
5780: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
5790: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
57a0: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
57b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
57c0: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
57d0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
57e0: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
57f0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5800: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
5810: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
5820: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5830: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5870: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5880: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5890: 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ockRegistry(..  
58a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
58b0: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
58c0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
58e0: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
58f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5900: 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74         this.what
5910: 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20  If = whatIf;..  
5920: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5930: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5990: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
59a0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
59b0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
59c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
59d0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
59e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
59f0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5a00: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
5a10: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
5a20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5a30: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
5a40: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
5a50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5a60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5ac0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5ad0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5ae0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
5af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b00: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
5b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b20: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b50: 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c 20 72  : this(whatIf, r
5b60: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
5b70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5b80: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
5b90: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
5ba0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5bb0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5bc0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
5bd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5c20: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
5c30: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
5c40: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
5c50: 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
5c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5c70: 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
5c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ca0: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
5cb0: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68  sed(); return wh
5cc0: 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
5cd0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
5ce0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5cf0: 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
5d00: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5d70: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5d80: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
5d90: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
5da0: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
5db0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5dc0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
5dd0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
5de0: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
5df0: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
5e00: 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
5e10: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
5e20: 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20  adOnly = value; 
5e30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5e40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5ea0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5eb0: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
5ec0: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
5ed0: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
5ee0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5ef0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
5f00: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
5f10: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
5f20: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
5f30: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5f40: 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b 20  ; safe = value; 
5f50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fb0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5fc0: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
5fd0: 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73 73  egistryKey class
5fe0: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
5ff0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
6000: 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73  RegistryKey Clas
6010: 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20  sesRoot..       
6020: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6030: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
6040: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6060: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6070: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6080: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6090: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e  classesRoot == n
60a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
60c0: 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65 77 20  assesRoot = new 
60d0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
60e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6100: 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73 52 6f  gistry.ClassesRo
6110: 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ot, whatIf, read
6120: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6140: 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61 73 73      return class
6150: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
6160: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6170: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6180: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
61d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
61e0: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
61f0: 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e 66 69  Key currentConfi
6200: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
6210: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6220: 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 43 6f  tryKey CurrentCo
6230: 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20  nfig..          
6240: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6250: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
6260: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6280: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6290: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
62a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72           if (cur
62b0: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75  rentConfig == nu
62c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
62e0: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 65 77  rentConfig = new
62f0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6300: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
6320: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 43  egistry.CurrentC
6330: 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c 20 72  onfig, whatIf, r
6340: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6350: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6360: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75         return cu
6370: 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20  rrentConfig;..  
6380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
63a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
63b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6400: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
6410: 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74  istryKey current
6420: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
6430: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
6440: 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e  gistryKey Curren
6450: 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20  tUser..         
6460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6470: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6480: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64a0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
64b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
64c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
64d0: 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e 75 6c  rrentUser == nul
64e0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
64f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72              curr
6500: 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20 4d 6f  entUser = new Mo
6510: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6530: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6540: 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
6550: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
6560: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6580: 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e 74    return current
6590: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
65a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
65b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
65c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
65d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6610: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6620: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
6630: 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  y dynData;..    
6640: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
6650: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 44  ockRegistryKey D
6660: 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ynData..        
6670: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6680: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6690: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
66c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
66d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
66e0: 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d  ynData == null).
66f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6700: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
6710: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6720: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6740: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 44 79       Registry.Dy
6750: 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72  nData, whatIf, r
6760: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6770: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 79         return dy
6790: 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  nData;..        
67a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
67b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
67c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
67d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6810: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6820: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6830: 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b  ey localMachine;
6840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6850: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6860: 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68 69 6e  yKey LocalMachin
6870: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
6880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6890: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
68a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
68c0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
68d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
68e0: 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d        if (localM
68f0: 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c 29 0d  achine == null).
6900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6910: 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61           localMa
6920: 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b  chine = new Mock
6930: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
6940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6950: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
6960: 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c  ry.LocalMachine,
6970: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
6980: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
6990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69a0: 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d 61 63   return localMac
69b0: 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  hine;..         
69c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
69d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
69e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
69f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6a30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6a40: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
6a50: 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y performanceDat
6a60: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
6a70: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6a80: 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d 61 6e  tryKey Performan
6a90: 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ceData..        
6aa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6ab0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ae0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6af0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6b00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
6b10: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d  erformanceData =
6b20: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b40: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
6b50: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6b60: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b80: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 50 65       Registry.Pe
6b90: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c 20 77  rformanceData, w
6ba0: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
6bb0: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
6bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6bd0: 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61 6e 63  eturn performanc
6be0: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
6bf0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6c00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6c10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6c60: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6c70: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6c80: 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20 20 20  ey users;..     
6c90: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
6ca0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 55 73  ckRegistryKey Us
6cb0: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
6cc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6cd0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
6ce0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d00: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6d20: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
6d30: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d50: 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65 77 20      users = new 
6d60: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6d90: 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20 77 68  gistry.Users, wh
6da0: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
6db0: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6dd0: 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 20 20  turn users;..   
6de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6e00: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
6e10: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6e20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6e70: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6e80: 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 72 79  Public "Registry
6e90: 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  " Methods..     
6ea0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62         public ob
6eb0: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a  ject GetValue(..
6ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ed0: 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d  string keyName,.
6ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ef0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d   string valueNam
6f00: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
6f10: 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75      object defau
6f20: 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  ltValue..       
6f30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
6f40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6f50: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
6f60: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6f80: 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 47  eturn Registry.G
6f90: 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c  etValue(keyName,
6fa0: 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65 66 61   valueName, defa
6fb0: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
6fc0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6fd0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7020: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
7030: 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65  ic void SetValue
7040: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7050: 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
7060: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
7070: 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
7080: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
7090: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
70a0: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
70b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
70c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
70d0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
70e0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
70f0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
7100: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7120: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
7130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
7140: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
7150: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
7160: 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  ame, value);..  
7170: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7180: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
71d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
71e0: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
71f0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
7200: 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
7210: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
7220: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
7230: 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ueName,..       
7240: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
7250: 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  value,..        
7260: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
7270: 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75 65 4b  ValueKind valueK
7280: 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ind..           
7290: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
72a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
72b0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
72c0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
72d0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
72e0: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7300: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
7310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
7320: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
7330: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
7340: 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75  ame, value, valu
7350: 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20  eKind);..       
7360: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7370: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
73e0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
73f0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
7400: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
7410: 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79  id CheckReadOnly
7420: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
7430: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7440: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
7450: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
7460: 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d  In "read-only" m
7470: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
7480: 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73   all write acces
7490: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
74a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
74b0: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
74c0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
74e0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
74f0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7500: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
7510: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
7520: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7530: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
7540: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
7550: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7590: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
75a0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
75b0: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
75c0: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
75d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
75e0: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
75f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7600: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
7610: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
7620: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
7630: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7640: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
7650: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
7660: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7670: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
7680: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7690: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
76a0: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
76c0: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
76d0: 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  y).Name);..     
76e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
76f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7740: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
7750: 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
7760: 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
7770: 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20  Dispose(..      
7780: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
7790: 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20  isposing..      
77a0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
77b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
77d0: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7800: 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67     if (disposing
7810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7820: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7840: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7860: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7880: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
7890: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
78a0: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
78b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
78c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7900: 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 21 3d   (classesRoot !=
7910: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7950: 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c 6f 73 65  lassesRoot.Close
7960: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7980: 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e   classesRoot = n
7990: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
79b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
79c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
79d0: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 21 3d 20  urrentConfig != 
79e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
7a20: 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43 6c 6f 73  rrentConfig.Clos
7a30: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20    currentConfig 
7a60: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7aa0: 20 28 63 75 72 72 65 6e 74 55 73 65 72 20 21 3d   (currentUser !=
7ab0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ad0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7af0: 75 72 72 65 6e 74 55 73 65 72 2e 43 6c 6f 73 65  urrentUser.Close
7b00: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b20: 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e   currentUser = n
7b30: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7b50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7b60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
7b70: 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d  ynData != null).
7b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7b90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 2e          dynData.
7bc0: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 20 20 20 20 20 20 64 79 6e 44 61 74 61 20 3d 20        dynData = 
7bf0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7c10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7c30: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 21 3d 20  localMachine != 
7c40: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
7c80: 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c 6f 73 65  calMachine.Close
7c90: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cb0: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20   localMachine = 
7cc0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7ce0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7d00: 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20  performanceData 
7d10: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d50: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
7d60: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d80: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
7d90: 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a  ceData = null;..
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dd0: 20 20 20 20 20 69 66 20 28 75 73 65 72 73 20 21       if (users !
7de0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e20: 75 73 65 72 73 2e 43 6c 6f 73 65 28 29 3b 0d 0a  users.Close();..
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72              user
7e50: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
7e80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ea0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7ee0: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
7ef0: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
7f00: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
7f10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7f50: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f   // NOTE: This o
7f80: 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73  bject is now dis
7f90: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fc0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
7fd0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
7fe0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7ff0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8000: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
8010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8060: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8070: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
8080: 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
8090: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
80a0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
80b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80d0: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80f0: 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c  GC.SuppressFinal
8100: 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ize(this);..    
8110: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8120: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
8130: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
8140: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8180: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8190: 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
81a0: 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  ructor..        
81b0: 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72      ~MockRegistr
81c0: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y()..           
81d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
81e0: 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73      Dispose(fals
81f0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8200: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8210: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
8220: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
8230: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
8240: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8290: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
82a0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
82b0: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69  Class..        i
82c0: 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63  nternal sealed c
82d0: 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74 72  lass MockRegistr
82e0: 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73 61 62  yKey : IDisposab
82f0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
8300: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
8310: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
8320: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
8330: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
8340: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a  kRegistryKey()..
8350: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
8370: 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20  hatIf = true;.. 
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8390: 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d  eadOnly = true;.
83a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
83b0: 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20   safe = true;.. 
83c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
83d0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
83e0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
83f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8430: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8440: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
8450: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
8460: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
8470: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8480: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8490: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
84a0: 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20  yKey key..      
84b0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
84c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
84d0: 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  his()..         
84e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
84f0: 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79 20 3d        this.key =
8500: 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20   key;..         
8510: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8520: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8560: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8570: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8580: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85a0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
85b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85c0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
85d0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
85e0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
85f0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
8600: 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey)..           
8610: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8620: 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65 79 4e      this.subKeyN
8630: 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61 6d 65  ame = subKeyName
8640: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8650: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
86b0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
86c0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
86e0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8700: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
8710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8720: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
8740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8750: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
8760: 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20 20 20  bKeyName)..     
8770: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8780: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
8790: 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d  hatIf = whatIf;.
87a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
87b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8800: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8810: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
8820: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8830: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
8840: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
8850: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8860: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
8870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8880: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
8890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
88a0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol readOnly..   
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88d0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b  : this(key, subK
88e0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 29 0d  eyName, whatIf).
88f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8910: 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 3d 20  this.readOnly = 
8920: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
8930: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8940: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8990: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
89a0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
89b0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
89c0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
89d0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
89e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
89f0: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
8a00: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
8a10: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
8a20: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
8a30: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  dOnly,..        
8a40: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66          bool saf
8a50: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8a60: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8a70: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
8a80: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
8a90: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d  atIf, readOnly).
8aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ac0: 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 65  this.safe = safe
8ad0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8ae0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b30: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8b40: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8b50: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8b70: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8b90: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
8ba0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8bc0: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8bd0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
8be0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8bf0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8c00: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8c10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8c20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8c70: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
8c80: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
8c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ca0: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
8cb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8cc0: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ce0: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8d10: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e     : this(key, n
8d20: 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ull, whatIf, rea
8d30: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
8d40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8d50: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
8d60: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
8d70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8d80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8dd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8de0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e00: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
8e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e20: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e40: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a  bool readOnly,..
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e60: 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20  bool safe..     
8e70: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8e90: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8ea0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
8eb0: 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  , safe)..       
8ec0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8ed0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8ee0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8ef0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8f00: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
8f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
8f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8f70: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
8f80: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
8f90: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
8fa0: 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  Close()..       
8fb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8fc0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
8fe0: 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73 65 64  OTE: No disposed
8ff0: 20 63 68 65 63 6b 20 68 65 72 65 20 62 65 63 61   check here beca
9000: 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68 69 73  use calling this
9010: 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20   method..       
9020: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
9030: 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75 73 74    should be just
9040: 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20 44 69   like calling Di
9050: 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  spose...        
9060: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9070: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
9080: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
9090: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
90a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
90b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9100: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
9110: 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey CreateSubKey(
9120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9130: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
9140: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
9150: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9160: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9170: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9180: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
9190: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
91a0: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
91c0: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
91d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91e0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
91f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9200: 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a     if (whatIf)..
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9220: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9230: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9250: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
9260: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
9270: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
9280: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  If this..       
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
92a0: 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77 65 20        fails, we 
92b0: 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75  will simply retu
92c0: 72 6e 20 74 68 65 20 77 72 61 70 70 65 64 20 72  rn the wrapped r
92d0: 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  oot key..       
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
92f0: 20 20 20 20 20 20 69 74 73 65 6c 66 20 73 69 6e        itself sin
9300: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
9310: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 27 77 68 61   allowed in 'wha
9320: 74 2d 69 66 27 0d 0a 20 20 20 20 20 20 20 20 20  t-if'..         
9330: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
9340: 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e      mode anyhow.
9350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9360: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
9380: 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
9390: 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65   = key.OpenSubKe
93a0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  y(subKeyName);..
93b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
93c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73 75        return (su
93d0: 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d  bKey != null) ?.
93e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
93f0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
9400: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9430: 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72  ubKey, whatIf, r
9440: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a  eadOnly, safe) :
9450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9460: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f            new Mo
9470: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94a0: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
94b0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
94c0: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
94d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
94f0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
9500: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9510: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9520: 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
9530: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
9540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9550: 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79  key.CreateSubKey
9560: 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68  (subKeyName), wh
9570: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
9580: 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  safe);..        
9590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
95a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
95b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
95c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9600: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9610: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
9620: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
9630: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
9640: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
9650: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
9660: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
96a0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
96b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
96c0: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
96d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
96e0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
96f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9710: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
9720: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
9730: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
9740: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
9750: 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  leteSubKey(subKe
9760: 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  yName, throwOnMi
9770: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9780: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9790: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
97a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
97e0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
97f0: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
9800: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
9810: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9820: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
9830: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9840: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9850: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9860: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9880: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
9890: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
98a0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
98b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
98c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
98d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
98e0: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
98f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9900: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
9910: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
9920: 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  yName);..       
9930: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9940: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9990: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
99a0: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
99b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
99c0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
99d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
99e0: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
99f0: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
9a00: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9a10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9a20: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9a30: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
9a40: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
9a50: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9a70: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a90: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9ab0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65   key.DeleteValue
9ae0: 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  (name, throwOnMi
9af0: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9b00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9b10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9b60: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9b70: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
9b80: 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20 20  eyNames()..     
9b90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9ba0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9bb0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9bd0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bf0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
9c00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c10: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
9c20: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
9c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9c40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9ca0: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
9cb0: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
9cc0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9cd0: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
9ce0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
9cf0: 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20  defaultValue..  
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9d50: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
9d60: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9d70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9d80: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
9d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9da0: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61   key.GetValue(na
9db0: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
9dc0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9dd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9de0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9e30: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
9e40: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
9e50: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
9e60: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9e70: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
9e80: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9e90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9eb0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ed0: 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 62 4b   return OpenSubK
9ee0: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66  ey(subKeyName, f
9ef0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
9f00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9f10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9f60: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
9f70: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
9f80: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9fa0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d 0a 20  bool writable.. 
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a000: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a010: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a020: 20 20 20 20 20 69 66 20 28 77 72 69 74 61 62 6c       if (writabl
a030: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
a040: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
a050: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
a060: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a070: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
a0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a0b0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
a0c0: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
a0d0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
a0f0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f  eyName, whatIf ?
a100: 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c   false : writabl
a110: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
a120: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73         return (s
a130: 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f  ubKey != null) ?
a140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a150: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
a160: 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b 65 79  gistryKey(subKey
a170: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
a180: 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75 6c 6c  ly, safe) : null
a190: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a1a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
a200: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
a210: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
a220: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
a230: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
a240: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
a250: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
a260: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
a270: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a280: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
a290: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
a2a0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
a2b0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a2d0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2f0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a310: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
a320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a330: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
a340: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  me, value);..   
a350: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a360: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a370: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
a380: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a3d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
a3e0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a400: 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a  ic string Name..
a410: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a430: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
a440: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a450: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a460: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a480: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
a490: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a4b0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4d0: 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e 67 2e   return !String.
a4e0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 75  IsNullOrEmpty(su
a4f0: 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  bKeyName) ?..   
a500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a510: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
a520: 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  at("{0}\\{1}", k
a530: 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e  ey.Name, subKeyN
a540: 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20  ame) :..        
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a560: 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  key.Name;..     
a570: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a580: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a5f0: 69 76 61 74 65 20 52 65 67 69 73 74 72 79 4b 65  ivate RegistryKe
a600: 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  y key;..        
a610: 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69 73      public Regis
a620: 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20  tryKey Key..    
a630: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a640: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
a650: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a660: 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b 20 72  ; CheckSafe(); r
a670: 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20  eturn key; }..  
a680: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a690: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a6f0: 69 76 61 74 65 20 73 74 72 69 6e 67 20 73 75 62  ivate string sub
a700: 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  KeyName;..      
a710: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
a720: 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a  ing SubKeyName..
a730: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a750: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
a760: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 75 62  ed(); return sub
a770: 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  KeyName; }..    
a780: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a790: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a7e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a7f0: 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
a800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a810: 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
a820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a840: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
a850: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77  osed(); return w
a860: 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
a870: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a880: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a8d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
a8e0: 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b  e bool readOnly;
a8f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a900: 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e  blic bool ReadOn
a910: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
a920: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a930: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
a940: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
a950: 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20   readOnly; }..  
a960: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a970: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a9d0: 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d  blic bool safe;.
a9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a9f0: 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20  lic bool Safe.. 
aa00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
aa20: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
aa30: 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65  d(); return safe
aa40: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
aa50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
aa60: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
aa70: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
aa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
aac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
aad0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
aae0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
aaf0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
ab00: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a  heckReadOnly()..
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ab30: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
ab40: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22     // NOTE: In "
ab50: 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c  read-only" mode,
ab60: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
ab70: 20 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a   write access...
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab90: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
aba0: 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
abb0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
abc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
abd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
abe0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
abf0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
ac00: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20  eption();..     
ac10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ac20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ac30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ac70: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ac80: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53 61 66  te void CheckSaf
ac90: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
aca0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
acb0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
acc0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
acd0: 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64 65 2c   In "safe" mode,
ace0: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
acf0: 20 64 69 72 65 63 74 20 61 63 63 65 73 73 20 74   direct access t
ad00: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
ad10: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
ad20: 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69 73 74  contained regist
ad30: 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20  ry key...       
ad40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ad60: 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  (!safe)..       
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ad80: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
ad90: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
ada0: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
adb0: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  onException();..
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
add0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
ade0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
adf0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae30: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ae40: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
ae50: 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76  System.Object Ov
ae60: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20  errides..       
ae70: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
ae80: 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74  ride string ToSt
ae90: 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 20 20  ring()..        
aea0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aeb0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
aec0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
aed0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
aee0: 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20  n this.Name;..  
aef0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
af00: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
af10: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
af20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
af30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
af70: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6d        #region Im
af80: 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73 69 6f  plicit Conversio
af90: 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20 20 20  n Operators..   
afa0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
afb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 42           // BUGB
afc0: 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f 20 20  UG: Remove me?  
afd0: 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 73  This should be s
afe0: 61 66 65 20 62 65 63 61 75 73 65 20 69 6e 20 27  afe because in '
aff0: 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20 20  what-if'..      
b000: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
b010: 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73 20 61   mode all keys a
b020: 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64 2d 6f  re opened read-o
b030: 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  nly...          
b040: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b050: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
b060: 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 74 6f  implicit operato
b070: 72 20 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  r RegistryKey(..
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
b0a0: 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  key..           
b0b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
b0c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b0d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b         return (k
b0e0: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6b 65  ey != null) ? ke
b0f0: 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  y.Key : null;.. 
b100: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b110: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
b120: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b130: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b170: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b180: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b190: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
b1a0: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
b1b0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b1c0: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
b1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b1e0: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
b1f0: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
b200: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
b210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b220: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
b230: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
b240: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b250: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
b260: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b270: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
b280: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
b2a0: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
b2b0: 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  yKey).Name);..  
b2c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b330: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
b340: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
b350: 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
b370: 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
b390: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b3b0: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
b3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b3e0: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
b3f0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
b400: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b420: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
b450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b460: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
b470: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
b480: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4e0: 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c   if (key != null
b4f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b500: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b520: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 6c            key.Cl
b530: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d      key = null;.
b560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b570: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b590: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b5a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b5e0: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
b5f0: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
b600: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b620: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b660: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b670: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
b680: 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
b690: 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b6c0: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
b6d0: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b6f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b700: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
b710: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b720: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b760: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b770: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b780: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
b790: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
b7a0: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
b7b0: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
b7c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b7d0: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
b7e0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
b7f0: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
b800: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
b810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
b830: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b840: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b890: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b8a0: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
b8b0: 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52            ~MockR
b8c0: 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20  egistryKey()..  
b8d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
b8f0: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
b900: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b910: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b920: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
b930: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
b940: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
b950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b990: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b9a0: 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74 72   #region Registr
b9b0: 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20  yHelper Class.. 
b9c0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
b9d0: 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67 69  tatic class Regi
b9e0: 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20 20  stryHelper..    
b9f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ba00: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
ba10: 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74  c Static Propert
ba20: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
ba30: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
ba40: 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65 61 74  int subKeysCreat
ba50: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
ba60: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
ba70: 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61 74 65  nt SubKeysCreate
ba80: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
ba90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
baa0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
bab0: 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 20 7d  ubKeysCreated; }
bac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bad0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
bae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb20: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
bb30: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
bb40: 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65 6c 65   int subKeysDele
bb50: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
bb60: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bb70: 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c 65 74  int SubKeysDelet
bb80: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
bb90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bba0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
bbb0: 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b 20  subKeysDeleted; 
bbc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
bbd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc20: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
bc30: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
bc40: 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 53  c int keyValuesS
bc50: 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et;..           
bc60: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
bc70: 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65 74 0d  nt KeyValuesSet.
bc80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79  get { return key
bcb0: 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a 20 20  ValuesSet; }..  
bcc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bcd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
bce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
bd20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
bd30: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
bd40: 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
bd50: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
bd60: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
bd70: 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  t KeyValuesDelet
bd80: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
bd90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bda0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
bdb0: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
bdc0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
bdd0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
bde0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
bdf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
be40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
be50: 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74  gion Public Stat
be60: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
be70: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
be80: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
be90: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
bea0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
beb0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f  public static Mo
bec0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70  ckRegistryKey Op
bed0: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
bee0: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
bef0: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
bf00: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
bf10: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
bf20: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
bf30: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72           bool wr
bf40: 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20  itable,..       
bf50: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
bf60: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
bf70: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
bf80: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
bf90: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
bfa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bfb0: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
bfc0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfe0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
bff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c000: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c020: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
c030: 67 41 6e 64 54 72 61 63 65 28 77 72 69 74 61 62  gAndTrace(writab
c040: 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  le ?..          
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c060: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
c070: 65 73 74 20 3a 20 54 72 61 63 65 50 72 69 6f 72  est : TracePrior
c080: 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20  ity.Higher,..   
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0a0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
c0b0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
c0c0: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
c0d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c0e0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
c0f0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
c100: 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69  yName = {1}, wri
c110: 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20  table = {2}",.. 
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c130: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
c140: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
c150: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
c160: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
c180: 44 69 73 70 6c 61 79 28 77 72 69 74 61 62 6c 65  Display(writable
c190: 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
c1a0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
c1b0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
c1c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
c1d0: 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f 72 62 69  CK: Always forbi
c1e0: 64 20 77 72 69 74 61 62 6c 65 20 61 63 63 65 73  d writable acces
c1f0: 73 20 77 68 65 6e 20 6f 70 65 72 61 74 69 6e 67  s when operating
c200: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   in..           
c210: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77       //       'w
c220: 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20  hat-if' mode... 
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c240: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c250: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
c260: 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ey key = rootKey
c270: 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c290: 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68    subKeyName, wh
c2a0: 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77  atIf ? false : w
c2b0: 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  ritable);....   
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c2d0: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
c2e0: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
c2f0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
c300: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b 65 79  kRegistryKey(key
c310: 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c  , whatIf, false,
c320: 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d   false) : null;.
c330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
c350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c390: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
c3a0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
c3b0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
c3c0: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
c3d0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
c3e0: 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73  static MockRegis
c3f0: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
c400: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
c410: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c420: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c440: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
c450: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
c460: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c480: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
c4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4c0: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
c4d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
c4f0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
c500: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c510: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c530: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
c540: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
c550: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
c580: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
c590: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
c5a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c5b0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
c5c0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
c5d0: 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20  yName = {1}",.. 
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
c600: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
c610: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
c620: 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
c630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
c640: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
c650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c660: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
c670: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
c690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c6a0: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c       // HACK: Al
c6b0: 77 61 79 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c  ways open a key,
c6c0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65   rather than cre
c6d0: 61 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a  ating one when..
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6f0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65      //       ope
c700: 72 61 74 69 6e 67 20 69 6e 20 27 77 68 61 74 2d  rating in 'what-
c710: 69 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20  if' mode...     
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c730: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c740: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
c750: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
c760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c780: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
c790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c7a0: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
c7b0: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
c7c0: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
c7d0: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
c7f0: 20 20 20 20 20 74 68 69 73 20 66 61 69 6c 73 2c       this fails,
c800: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
c810: 72 65 74 75 72 6e 20 74 68 65 20 72 6f 6f 74 0d  return the root.
c820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c830: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
c840: 20 20 6b 65 79 20 69 74 73 65 6c 66 20 73 69 6e    key itself sin
c850: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
c860: 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20   allowed in..   
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c880: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77       //       'w
c890: 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 61 6e 79  hat-if' mode any
c8a0: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8d0: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
c8e0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
c8f0: 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b  rootKey.OpenSubK
c900: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  ey(subKeyName);.
c910: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c920: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c930: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
c940: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
c960: 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ey : new MockReg
c970: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
c9a0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
c9b0: 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66  whatIf, false, f
c9c0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
ca30: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
ca40: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca60: 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74 65 53   rootKey.CreateS
ca70: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
ca80: 29 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65  ), whatIf, false
ca90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
cab0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
cac0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
cae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
caf0: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
cb00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb20: 20 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64    subKeysCreated
cb30: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
cb40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
cb50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cb60: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cba0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
cbb0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
cbc0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
cbd0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
cbe0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
cbf0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
cc00: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28  id DeleteSubKey(
cc10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cc20: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
cc30: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
cc50: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc70: 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
cc80: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
cc90: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
cca0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
ccb0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
ccc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ccd0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
cce0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ccf0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
cd00: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cd20: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
cd30: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
cd40: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
cd50: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
cd60: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
cd70: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
cd80: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cda0: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
cdb0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
cdc0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
cdf0: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
ce00: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce20: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
ce30: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
ce40: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
ce50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ce60: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
ce70: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ce90: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ceb0: 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75  rootKey.DeleteSu
cec0: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c  bKey(subKeyName,
ced0: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29   throwOnMissing)
cee0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cef0: 20 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65       subKeysDele
cf00: 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
cf10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cf20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
cf70: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
cf80: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
cf90: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
cfa0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
cfb0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
cfc0: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54  id DeleteSubKeyT
cfd0: 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
cfe0: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
cff0: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d010: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
d020: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
d030: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
d040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d050: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d070: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d090: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
d0a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
d0c0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
d0d0: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
d0e0: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
d0f0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
d100: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
d110: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
d120: 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d140: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
d150: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
d160: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d180: 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d        "rootKey =
d190: 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65   {0}, subKeyName
d1a0: 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1c0: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f    ForDisplay(roo
d1d0: 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  tKey), ForDispla
d1e0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d  y(subKeyName)),.
d1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d200: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
d210: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
d220: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d230: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d250: 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b  otKey.DeleteSubK
d260: 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d  eyTree(subKeyNam
d270: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
d280: 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65         subKeysDe
d290: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
d2a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d2b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d300: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
d310: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
d320: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
d330: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
d340: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
d350: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
d360: 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
d370: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
d380: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3a0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
d3c0: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
d3e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d400: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
d430: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d440: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
d450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d460: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
d470: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
d480: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c  cePriority.High,
d490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d4a0: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
d4b0: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
d4c0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
d4d0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  "key = {0}", For
d500: 44 69 73 70 6c 61 79 28 6b 65 79 29 29 2c 20 74  Display(key)), t
d510: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d530: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
d540: 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a  SubKeyNames();..
d550: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
d560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d5c0: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
d5d0: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
d5e0: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
d5f0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
d600: 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47 65 74  tatic object Get
d610: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
d620: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
d630: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d650: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
d660: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
d670: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 2c  ct defaultValue,
d680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d690: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6b0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
d700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d710: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
d720: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
d730: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d740: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d750: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
d760: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
d770: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
d780: 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
d790: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
d7a0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
d7b0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
d7c0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7e0: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61    "key = {0}, na
d7f0: 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66 61 75 6c  me = {1}, defaul
d800: 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a  tValue = {2}",..
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d820: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
d830: 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70  ay(key), ForDisp
d840: 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20 20 20 20  lay(name),..    
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d860: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64      ForDisplay(d
d870: 65 66 61 75 6c 74 56 61 6c 75 65 29 29 2c 20 74  efaultValue)), t
d880: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d8a0: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
d8b0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61  Value(name, defa
d8c0: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
d8d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d8e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d930: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
d940: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
d950: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
d960: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
d970: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
d980: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
d990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d9a0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
d9b0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
d9c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
d9d0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
d9e0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
d9f0: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
da00: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
da10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
da20: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
da30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da40: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
da50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
da60: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
da70: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
da80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
da90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
daa0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
dab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dac0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
dad0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
dae0: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
daf0: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
db10: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
db20: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
db30: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e     "key = {0}, n
db60: 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c 75 65  ame = {1}, value
db70: 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20   = {2}",..      
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db90: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79    ForDisplay(key
dba0: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61  ), ForDisplay(na
dbb0: 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me), ForDisplay(
dbc0: 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20 20 20  value)),..      
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbe0: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
dbf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc00: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
dc10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dc20: 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61         key.SetVa
dc30: 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  lue(name, value)
dc40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc50: 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 53 65       keyValuesSe
dc60: 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t++;..          
dc70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
dc80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
dc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
dcd0: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
dce0: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
dcf0: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
dd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
dd10: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
dd20: 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20   DeleteValue(.. 
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
dd40: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
dd50: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
dd60: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
dd70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dd80: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
dd90: 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
dda0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
ddb0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
ddc0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
ddd0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
dde0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
ddf0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
de00: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
de10: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
de30: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
de40: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
de50: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
de60: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
de70: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
de80: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
de90: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
dec0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
ded0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30         "key = {0
df00: 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20  }, name = {1}", 
df10: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c  ForDisplay(key),
df20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
df30: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
df40: 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74 72 61  play(name)), tra
df50: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75    key.DeleteValu
dfa0: 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d  e(name, throwOnM
dfb0: 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  issing);....    
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56              keyV
dfd0: 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  aluesDeleted++;.
dfe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
e000: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
e010: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e020: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e030: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e070: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e080: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69      #region Stri
e090: 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  ngList Class..  
e0a0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
e0b0: 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e  aled class Strin
e0c0: 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72  gList : List<str
e0d0: 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ing>..        {.
e0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e0f0: 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29  lic StringList()
e100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e110: 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20    : base()..    
e120: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e130: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
e140: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
e150: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e160: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e1b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e1c0: 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e  c StringList(IEn
e1d0: 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e  umerable<string>
e1e0: 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20   collection)..  
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
e200: 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29  base(collection)
e210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e230: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
e240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e250: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e260: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
e270: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
e280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
e2d0: 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f  ion StringDictio
e2e0: 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20  nary Class..    
e2f0: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e300: 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44  ed class StringD
e310: 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74  ictionary : Dict
e320: 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73  ionary<string, s
e330: 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20  tring>..        
e340: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
e350: 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74  ublic StringDict
e360: 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20  ionary()..      
e370: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e380: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e390: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e3a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e3b0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e3c0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e3d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e410: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e420: 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73      #region Vers
e430: 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  ionList Class.. 
e440: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
e450: 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73  ealed class Vers
e460: 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56  ionList : List<V
e470: 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20  ersion>..       
e480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e490: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69  public VersionLi
e4a0: 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
e4b0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e4e0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e4f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
e510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e550: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
e560: 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
e570: 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65  t(IEnumerable<Ve
e580: 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f  rsion> collectio
e590: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
e5a0: 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65      : base(colle
e5b0: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
e5c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e5d0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
e5e0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
e5f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
e600: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
e610: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
e620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e660: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e670: 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f    #region Versio
e680: 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20  nMap Class..    
e690: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e6a0: 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
e6b0: 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79  Map : Dictionary
e6c0: 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e  <string, Version
e6d0: 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b  List>..        {
e6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e6f0: 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28  blic VersionMap(
e700: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e720: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
e730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e740: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
e750: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e760: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7b0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
e7c0: 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61  gion Package Cla
e7d0: 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  ss..        inte
e7e0: 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73  rnal sealed clas
e7f0: 73 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  s Package..     
e800: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e810: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
e820: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
e830: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e840: 63 20 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20  c Package()..   
e850: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
e870: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
e880: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e890: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
e8a0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
e8b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e900: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
e910: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
e920: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
e930: 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  te AssemblyName 
e940: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  assemblyName;.. 
e950: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e960: 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 41  c AssemblyName A
e970: 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20 20  ssemblyName..   
e980: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e990: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
e9a0: 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c  { return assembl
e9b0: 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  yName; }..      
e9c0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
e9d0: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 76  assemblyName = v
e9e0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
e9f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ea00: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ea10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ea50: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
ea60: 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65   bool globalAsse
ea70: 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20 20  mblyCache;..    
ea80: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
ea90: 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62  ool GlobalAssemb
eaa0: 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20 20 20  lyCache..       
eab0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
eac0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
ead0: 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73 65 6d  turn globalAssem
eae0: 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20 20 20  blyCache; }..   
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
eb00: 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c   { globalAssembl
eb10: 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65 3b 20  yCache = value; 
eb20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
eb30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
eb90: 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20     private Guid 
eba0: 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20 20  packageId;..    
ebb0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47          public G
ebc0: 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d 0a 20  uid PackageId.. 
ebd0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ebe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
ebf0: 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 6b 61  t { return packa
ec00: 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  geId; }..       
ec10: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
ec20: 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c 75 65  ackageId = value
ec30: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ec40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ec50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ec60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec90: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eca0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
ecb0: 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a 20 20  d serviceId;..  
ecc0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ecd0: 20 47 75 69 64 20 53 65 72 76 69 63 65 49 64 0d   Guid ServiceId.
ece0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ecf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed00: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 65 72  get { return ser
ed10: 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  viceId; }..     
ed20: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
ed30: 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 61 6c   serviceId = val
ed40: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
ed50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ed60: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ed70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eda0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
edb0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
edc0: 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49 64  uid dataSourceId
edd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
ede0: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 53  ublic Guid DataS
edf0: 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20  ourceId..       
ee00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ee10: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
ee20: 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 65 49  turn dataSourceI
ee30: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
ee40: 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74 61        set { data
ee50: 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c 75 65  SourceId = value
ee60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ee70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ee80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eec0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eed0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
eee0: 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  d dataProviderId
eef0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
ef00: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 50  ublic Guid DataP
ef10: 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 20 20  roviderId..     
ef20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef30: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ef40: 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f 76 69  return dataProvi
ef50: 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  derId; }..      
ef60: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
ef70: 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d  dataProviderId =
ef80: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
ef90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
efa0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
efb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
eff0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f000: 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 54 65  te Guid adoNetTe
f010: 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20 20  chnologyId;..   
f020: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
f030: 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 68 6e  Guid AdoNetTechn
f040: 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 20 20  ologyId..       
f050: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f060: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
f070: 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 68 6e  turn adoNetTechn
f080: 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 20 20  ologyId; }..    
f090: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
f0a0: 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  { adoNetTechnolo
f0b0: 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  gyId = value; }.
f0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
f0e0: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
f0f0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
f100: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
f110: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
f120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f150: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f160: 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66      #region Conf
f170: 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73 0d  iguration Class.
f180: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
f190: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f   sealed class Co
f1a0: 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20  nfiguration..   
f1b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f1c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
f1d0: 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  ate Constants.. 
f1e0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f1f0: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53 77  te const char Sw
f200: 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20 20  itch = '-';..   
f210: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f220: 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74 53   const char AltS
f230: 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a  witch = '/';....
f240: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f290: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
f2a0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
f2b0: 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53 77  adonly char[] Sw
f2c0: 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a 20  itchChars = {.. 
f2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
f2e0: 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63 68  witch, AltSwitch
f2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b  ..            };
f300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
f310: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
f320: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
f370: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
f380: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
f390: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
f3a0: 20 20 20 20 20 70 72 69 76 61 74 65 20 43 6f 6e       private Con
f3b0: 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20  figuration(..   
f3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
f3d0: 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d  embly assembly,.
f3e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3f0: 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e   string logFileN
f400: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
f410: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
f420: 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
f430: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
f440: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  coreFileName,.. 
f450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f460: 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
f470: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
f480: 20 20 20 20 20 73 74 72 69 6e 67 20 65 66 36 46       string ef6F
f490: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
f4a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f4b0: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
f4c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
f4d0: 20 20 20 20 73 74 72 69 6e 67 20 72 65 67 69 73      string regis
f4e0: 74 72 79 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  tryVersion,..   
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
f500: 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69 6f  ing configVersio
f510: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
f520: 20 20 20 20 73 74 72 69 6e 67 20 76 73 56 65 72      string vsVer
f530: 73 69 6f 6e 53 75 66 66 69 78 2c 0d 0a 20 20 20  sionSuffix,..   
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
f550: 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74 2c  ing debugFormat,
f560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f570: 20 20 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f    string traceFo
f580: 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
f590: 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
f5a0: 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  ags installFlags
f5b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f5c0: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
f5d0: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 2c 0d   debugPriority,.
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f5f0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
f600: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f620: 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f640: 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20  ol install,..   
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f660: 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
f670: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f680: 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  oRuntimeVersion,
f690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f6a0: 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70    bool noDesktop
f6b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f6c0: 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63     bool noCompac
f6d0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
f6e0: 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
f6f0: 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20,..           
f700: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
f710: 78 33 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x35,..          
f720: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74        bool noNet
f730: 46 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  Fx40,..         
f740: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
f750: 74 46 78 34 35 2c 0d 0a 20 20 20 20 20 20 20 20  tFx45,..        
f760: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
f770: 65 74 46 78 34 35 31 2c 0d 0a 20 20 20 20 20 20  etFx451,..      
f780: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f790: 6f 56 73 32 30 30 35 2c 0d 0a 20 20 20 20 20 20  oVs2005,..      
f7a0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f7b0: 6f 56 73 32 30 30 38 2c 0d 0a 20 20 20 20 20 20  oVs2008,..      
f7c0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f7d0: 6f 56 73 32 30 31 30 2c 0d 0a 20 20 20 20 20 20  oVs2010,..      
f7e0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f7f0: 6f 56 73 32 30 31 32 2c 0d 0a 20 20 20 20 20 20  oVs2012,..      
f800: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f810: 6f 56 73 32 30 31 33 2c 0d 0a 20 20 20 20 20 20  oVs2013,..      
f820: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f830: 6f 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20  oTrace,..       
f840: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
f850: 43 6f 6e 73 6f 6c 65 2c 0d 0a 20 20 20 20 20 20  Console,..      
f860: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f870: 6f 4c 6f 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  oLog,..         
f880: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
f890: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
f8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f8b0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
f8c0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f8d0: 64 65 62 75 67 2c 0d 0a 20 20 20 20 20 20 20 20  debug,..        
f8e0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
f8f0: 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
f900: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6e 66         bool conf
f910: 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  irm..           
f920: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
f930: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f940: 20 20 20 20 20 20 20 74 68 69 73 2e 61 73 73 65         this.asse
f950: 6d 62 6c 79 20 3d 20 61 73 73 65 6d 62 6c 79 3b  mbly = assembly;
f960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f970: 20 20 74 68 69 73 2e 6c 6f 67 46 69 6c 65 4e 61    this.logFileNa
f980: 6d 65 20 3d 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  me = logFileName
f990: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f9a0: 20 20 20 74 68 69 73 2e 64 69 72 65 63 74 6f 72     this.director
f9b0: 79 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a  y = directory;..
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9d0: 74 68 69 73 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  this.coreFileNam
f9e0: 65 20 3d 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  e = coreFileName
f9f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fa00: 20 20 20 74 68 69 73 2e 6c 69 6e 71 46 69 6c 65     this.linqFile
fa10: 4e 61 6d 65 20 3d 20 6c 69 6e 71 46 69 6c 65 4e  Name = linqFileN
fa20: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
fa30: 20 20 20 20 20 20 74 68 69 73 2e 65 66 36 46 69        this.ef6Fi
fa40: 6c 65 4e 61 6d 65 20 3d 20 65 66 36 46 69 6c 65  leName = ef6File
fa50: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
fa60: 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 73 69         this.desi
fa70: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 64  gnerFileName = d
fa80: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
fa90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
faa0: 20 20 74 68 69 73 2e 72 65 67 69 73 74 72 79 56    this.registryV
fab0: 65 72 73 69 6f 6e 20 3d 20 72 65 67 69 73 74 72  ersion = registr
fac0: 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  yVersion;..     
fad0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fae0: 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20  configVersion = 
faf0: 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a  configVersion;..
fb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb10: 74 68 69 73 2e 76 73 56 65 72 73 69 6f 6e 53 75  this.vsVersionSu
fb20: 66 66 69 78 20 3d 20 76 73 56 65 72 73 69 6f 6e  ffix = vsVersion
fb30: 53 75 66 66 69 78 3b 0d 0a 20 20 20 20 20 20 20  Suffix;..       
fb40: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65           this.de
fb50: 62 75 67 46 6f 72 6d 61 74 20 3d 20 64 65 62 75  bugFormat = debu
fb60: 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  gFormat;..      
fb70: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74            this.t
fb80: 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 72 61  raceFormat = tra
fb90: 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ceFormat;..     
fba0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fbb0: 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 69  installFlags = i
fbc0: 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20  nstallFlags;..  
fbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fbe0: 69 73 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79  is.debugPriority
fbf0: 20 3d 20 64 65 62 75 67 50 72 69 6f 72 69 74 79   = debugPriority
fc00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fc10: 20 20 20 74 68 69 73 2e 74 72 61 63 65 50 72 69     this.tracePri
fc20: 6f 72 69 74 79 20 3d 20 74 72 61 63 65 50 72 69  ority = tracePri
fc30: 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
fc40: 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 65 72          this.per
fc50: 55 73 65 72 20 3d 20 70 65 72 55 73 65 72 3b 0d  User = perUser;.
fc60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fc70: 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 20 3d 20   this.install = 
fc80: 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20  install;..      
fc90: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
fca0: 6f 77 36 34 20 3d 20 77 6f 77 36 34 3b 0d 0a 20  ow64 = wow64;.. 
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fcc0: 68 69 73 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72  his.noRuntimeVer
fcd0: 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69 6d 65  sion = noRuntime
fce0: 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
fcf0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
fd00: 6f 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73  oDesktop = noDes
fd10: 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20  ktop;..         
fd20: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f         this.noCo
fd30: 6d 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63  mpact = noCompac
fd40: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
fd50: 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
fd60: 32 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d  20 = noNetFx20;.
fd70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd80: 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 33 35 20   this.noNetFx35 
fd90: 3d 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20  = noNetFx35;..  
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fdb0: 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 6e  is.noNetFx40 = n
fdc0: 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20  oNetFx40;..     
fdd0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fde0: 6e 6f 4e 65 74 46 78 34 35 20 3d 20 6e 6f 4e 65  noNetFx45 = noNe
fdf0: 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx45;..        
fe00: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
fe10: 65 74 46 78 34 35 31 20 3d 20 6e 6f 4e 65 74 46  etFx451 = noNetF
fe20: 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  x451;..         
fe30: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
fe40: 32 30 30 35 20 3d 20 6e 6f 56 73 32 30 30 35 3b  2005 = noVs2005;
fe50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fe60: 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 38 20    this.noVs2008 
fe70: 3d 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20  = noVs2008;..   
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fe90: 73 2e 6e 6f 56 73 32 30 31 30 20 3d 20 6e 6f 56  s.noVs2010 = noV
fea0: 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20  s2010;..        
feb0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
fec0: 73 32 30 31 32 20 3d 20 6e 6f 56 73 32 30 31 32  s2012 = noVs2012
fed0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fee0: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 33     this.noVs2013
fef0: 20 3d 20 6e 6f 56 73 32 30 31 33 3b 0d 0a 20 20   = noVs2013;..  
ff00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
ff10: 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54  is.noTrace = noT
ff20: 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  race;..         
ff30: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f         this.noCo
ff40: 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c  nsole = noConsol
ff50: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ff60: 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d      this.noLog =
ff70: 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20   noLog;..       
ff80: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 68           this.th
ff90: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74  rowOnMissing = t
ffa0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a  hrowOnMissing;..
ffb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffc0: 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68  this.whatIf = wh
ffd0: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
ffe0: 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75         this.debu
fff0: 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20 20 20  g = debug;..    
10000 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10010 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72 62 6f  .verbose = verbo
10020 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
10030 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 72       this.confir
10040 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  m = confirm;..  
10050 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
10060 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
10070 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
10080 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
10090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
100d0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
100e0 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65 74  ivate Static Met
100f0 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
10100 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
10110 20 76 6f 69 64 20 47 65 74 44 65 66 61 75 6c 74   void GetDefault
10120 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20  FileNames(..    
10130 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
10140 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
10150 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10160 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f     ref string co
10170 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  reFileName,..   
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
10190 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
101a0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
101b0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
101c0 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a  g ef6FileName,..
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 72 65 66 20 73 74 72 69 6e 67 20 64 65 73 69 67  ref string desig
101f0 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  nerFileName..   
10200 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
10210 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10230 66 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20  f (thisAssembly 
10240 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
10250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10260 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
10270 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f           directo
10280 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72  ry = Path.GetDir
10290 65 63 74 6f 72 79 4e 61 6d 65 28 74 68 69 73 41  ectoryName(thisA
102a0 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e  ssembly.Location
102b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
102c0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
102d0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
102e0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10300 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
10310 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
10320 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
10330 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
10340 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10350 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72         Installer
10360 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .CoreFileName);.
10370 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10380 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20     linqFileName 
10390 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
103a0 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
103c0 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c  nstaller.LinqFil
103d0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
103e0 20 20 20 20 20 20 20 20 20 20 20 65 66 36 46 69             ef6Fi
103f0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
10400 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
10410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10420 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
10430 45 66 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  Ef6FileName);...
10440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10450 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
10460 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
10470 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20  (directory,..   
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10490 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67   Installer.Desig
104a0 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  nerFileName);.. 
104b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
104c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
104d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
10520 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
10530 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d  ol CheckOption(.
10540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10550 20 72 65 66 20 73 74 72 69 6e 67 20 61 72 67 0d   ref string arg.
10560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10570 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
10580 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10590 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74     string result
105a0 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20   = arg;....     
105b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
105c0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
105d0 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d 0a 20  mpty(result)).. 
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
105f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10600 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10620 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c   NOTE: Remove al
10630 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74 63 68  l leading switch
10640 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20 20 20   chars...       
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
10660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10670 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 72 65       result = re
10680 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74 28 53  sult.TrimStart(S
10690 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a  witchChars);....
106a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
106c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
106d0 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68  OTE: How many ch
106e0 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76 65 64  ars were removed
106f0 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
10700 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
10710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10720 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c  nt count = arg.L
10730 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c  ength - result.L
10740 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
10750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10770 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
10780 61 73 20 74 68 65 72 65 20 61 74 20 6c 65 61 73  as there at leas
10790 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20  t one?..        
107a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
107b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107c0 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20      if (count > 
107d0 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
107e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
107f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10800 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10820 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c  / NOTE: Ok, repl
10830 61 63 65 20 74 68 65 69 72 20 6f 72 69 67 69 6e  ace their origin
10840 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  al..            
10850 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
10860 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a       argument...
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10880 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108a0 20 20 20 20 61 72 67 20 3d 20 72 65 73 75 6c 74      arg = result
108b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
108d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
108e0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
108f0 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73 20 61  : Yes, this is a
10900 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20 20 20   switch...      
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
10930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10940 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
10950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10960 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
10970 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10980 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
10990 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
109a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
109b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
109c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10a00 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
10a10 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68  tatic bool Match
10a20 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  Option(..       
10a30 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10a40 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  arg,..          
10a50 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f 70 74        string opt
10a60 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
10a70 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
10a80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10a90 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67 20         if ((arg 
10aa0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74  == null) || (opt
10ab0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ion == null)).. 
10ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ad0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
10ae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10af0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
10b00 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c 20 30  g.Compare(arg, 0
10b10 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20  , option, 0,..  
10b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b30 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74    arg.Length, St
10b40 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
10b50 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
10b60 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ) == 0;..       
10b70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10b80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
10b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
10bd0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
10be0 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61   static bool? Pa
10bf0 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20  rseBoolean(..   
10c00 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
10c10 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20  ing text..      
10c20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
10c30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10c40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10c50 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
10c60 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20  Empty(text))..  
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c90 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b       bool value;
10ca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10cb0 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f 6c          if (bool
10cc0 2e 54 72 79 50 61 72 73 65 28 74 65 78 74 2c 20  .TryParse(text, 
10cd0 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20  out value))..   
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cf0 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
10d00 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10d10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10d20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10d30 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
10d40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10d50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10da0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
10db0 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50 61 72  tatic object Par
10dc0 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
10dd0 20 20 20 20 20 20 20 20 20 54 79 70 65 20 65 6e           Type en
10de0 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20 20 20  umType,..       
10df0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10e00 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  text,..         
10e10 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61         bool noCa
10e20 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
10e30 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
10e40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10e50 20 20 20 20 20 20 69 66 20 28 28 65 6e 75 6d 54        if ((enumT
10e60 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ype == null) || 
10e70 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d  !enumType.IsEnum
10e80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10e90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
10ea0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
10eb0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
10ec0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
10ed0 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20  (text))..       
10ee0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f00 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
10f10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f30 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e      return Enum.
10f40 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65 2c 20  Parse(enumType, 
10f50 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a  text, noCase);..
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10f80 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
10f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10fa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
10fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10fe0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10ff0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11010 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
11020 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11030 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
11040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
11080 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
11090 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49  te static bool I
110a0 73 45 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69  sEf6AssemblyAvai
110b0 6c 61 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20  lable()..       
110c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
110d0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11100 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
11110 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79  embly = Assembly
11120 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c  .ReflectionOnlyL
11130 6f 61 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  oad(..          
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 66                Ef
11150 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d  6AssemblyName);.
11160 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11170 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
11180 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly != null)..  
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
111b0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
111c0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
111d0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
111e0 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11200 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
11210 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
11220 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11240 20 20 20 22 45 6e 74 69 74 79 20 46 72 61 6d 65     "Entity Frame
11250 77 6f 72 6b 20 36 20 61 73 73 65 6d 62 6c 79 20  work 6 assembly 
11260 77 61 73 20 72 65 73 6f 6c 76 65 64 2e 22 2c 0d  was resolved.",.
11270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
11290 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
112c0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
112d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11300 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
11310 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11330 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
11340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11350 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11360 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
11370 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
11380 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
11390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
113a0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
113b0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
113c0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
113d0 20 20 20 20 20 20 20 20 20 22 45 6e 74 69 74 79           "Entity
113e0 20 46 72 61 6d 65 77 6f 72 6b 20 36 20 61 73 73   Framework 6 ass
113f0 65 6d 62 6c 79 20 77 61 73 20 6e 6f 74 20 72 65  embly was not re
11400 73 6f 6c 76 65 64 2e 22 2c 0d 0a 20 20 20 20 20  solved.",..     
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11420 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
11430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11440 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
11450 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11460 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
11470 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
11480 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
11490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
114d0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
114e0 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d   Public Static M
114f0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
11500 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
11510 63 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c Configuration 
11520 43 72 65 61 74 65 44 65 66 61 75 6c 74 28 29 0d  CreateDefault().
11530 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11550 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
11560 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
11570 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
11580 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
11590 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
115a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69         string li
115b0 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c  nqFileName = nul
115c0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
115d0 20 20 20 20 73 74 72 69 6e 67 20 65 66 36 46 69      string ef6Fi
115e0 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11600 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
11610 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
11620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11630 20 20 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c     GetDefaultFil
11640 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20  eNames(..       
11650 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
11660 20 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20   directory, ref 
11670 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65  coreFileName, re
11680 66 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d  f linqFileName,.
11690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
116a0 20 20 20 20 20 72 65 66 20 65 66 36 46 69 6c 65       ref ef6File
116b0 4e 61 6d 65 2c 20 72 65 66 20 64 65 73 69 67 6e  Name, ref design
116c0 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  erFileName);....
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 72 65 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69  return new Confi
116f0 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20  guration(..     
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11710 68 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c  hisAssembly, nul
11720 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 63 6f  l, directory, co
11730 72 65 46 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71  reFileName, linq
11740 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
11760 66 36 46 69 6c 65 4e 61 6d 65 2c 20 64 65 73 69  f6FileName, desi
11770 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 6e 75  gnerFileName, nu
11780 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d  ll, null, null,.
11790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
117a0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
117b0 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65  bugFormat, Trace
117c0 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c  Ops.TraceFormat,
117d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
117e0 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
117f0 67 73 2e 44 65 66 61 75 6c 74 2c 20 54 72 61 63  gs.Default, Trac
11800 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c  ePriority.Defaul
11810 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
11820 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
11830 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20 66  ority.Default, f
11840 61 6c 73 65 2c 20 74 72 75 65 2c 20 66 61 6c 73  alse, true, fals
11850 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
11860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11870 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c        false, fal
11880 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
11890 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
118a0 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20  false, false,.. 
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118c0 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c     false, false,
118d0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
118e0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 74 72 75  alse, false, tru
118f0 65 2c 20 74 72 75 65 2c 0d 0a 20 20 20 20 20 20  e, true,..      
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
11910 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
11920 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
11930 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
11940 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
11950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11980 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
11990 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
119a0 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
119b0 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
119c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
119d0 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
119e0 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20  FromArgs(..     
119f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
11a00 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20  g[] args,..     
11a10 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
11a20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20  strict,..       
11a30 20 20 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e           ref Con
11a40 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
11a50 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  guration,..     
11a60 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
11a70 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
11a90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11ab0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
11ac0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11ad0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
11ae0 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  rgs == null)..  
11af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b00 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
11b10 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
11b20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
11b30 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
11b40 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11b60 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f  nfiguration = Co
11b70 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61  nfiguration.Crea
11b80 74 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a  teDefault();....
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ba0 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d      int length =
11bb0 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d   args.Length;...
11bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11bd0 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
11be0 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
11bf0 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b   length; index++
11c00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11c10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 20 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61    string arg = a
11c40 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  rgs[index];.... 
11c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c60 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c80 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70     // NOTE: Skip
11c90 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 74 68   any argument th
11ca0 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29 20 6f  at is null (?) o
11cb0 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20  r an empty..    
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cd0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72      //       str
11ce0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11d00 0d 0a 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 69 66 20 28 53 74            if (St
11d20 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
11d30 74 79 28 61 72 67 29 29 0d 0a 20 20 20 20 20 20  ty(arg))..      
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d50 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
11d60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11d70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
11da0 57 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20  We are going to 
11db0 6d 6f 64 69 66 79 20 74 68 65 20 6f 72 69 67 69  modify the origi
11dc0 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20  nal argument..  
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11de0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
11df0 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 6c  y removing any l
11e00 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20 63 68  eading option ch
11e10 61 72 61 63 74 65 72 73 3b 0d 0a 20 20 20 20 20  aracters;..     
11e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e30 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 72     //       ther
11e40 65 66 6f 72 65 2c 20 77 65 20 75 73 65 20 61 20  efore, we use a 
11e50 6e 65 77 20 73 74 72 69 6e 67 20 74 6f 20 68 6f  new string to ho
11e60 6c 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ld the..        
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e80 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69 66 69 65  //       modifie
11e90 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20  d argument...   
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11eb0 20 20 20 20 20 2f 2f 0d 0a 20 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 73 74 72 69 6e 67 20 6e 65 77 41 72 67 20 3d   string newArg =
11ee0 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   arg;....       
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11f20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75  NOTE: All the su
11f30 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
11f40 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73  line options mus
11f50 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
11f60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11f70 20 20 20 20 62 65 67 69 6e 20 77 69 74 68 20 61      begin with a
11f80 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74  n option charact
11f90 65 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e 75 73  er (e.g. a minus
11fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11fb0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
11fc0 20 20 20 6f 72 20 66 6f 72 77 61 72 64 20 73 6c     or forward sl
11fd0 61 73 68 29 3b 20 61 74 74 65 6d 70 74 20 74 6f  ash); attempt to
11fe0 20 76 61 6c 69 64 61 74 65 20 74 68 61 74 0d 0a   validate that..
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 2f 2f 20 20 20 20 20 20          //      
12010 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69   now.  If we fai
12020 6c 20 69 6e 20 73 74 72 69 63 74 20 6d 6f 64 65  l in strict mode
12030 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 3b 0d 0a  , we are done;..
12040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12050 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
12060 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74   otherwise, just
12070 20 73 6b 69 70 20 74 68 69 73 20 61 72 67 75 6d   skip this argum
12080 65 6e 74 20 61 6e 64 20 61 64 76 61 6e 63 65 0d  ent and advance.
12090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
120a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
120b0 20 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6f 6e    to the next on
120c0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
120d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120f0 20 20 20 20 20 20 20 20 69 66 20 28 21 43 68 65          if (!Che
12100 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77  ckOption(ref new
12110 41 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  Arg))..         
12120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
12150 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
12160 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
12170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
12190 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
121a0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
121b0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121d0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
121e0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
121f0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
12200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12210 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64      "Unsupported
12220 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72   command line ar
12230 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20  gument: {0}",.. 
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
12260 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c  orDisplay(arg)),
12270 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
12280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122a0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
122b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
122d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122f0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
12300 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12330 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 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 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
12360 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65 64  ll the supported
12370 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
12380 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20  tions must..    
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61 76      //       hav
123b0 65 20 61 20 76 61 6c 75 65 3b 20 74 68 65 72 65  e a value; there
123c0 66 6f 72 65 2c 20 61 74 74 65 6d 70 74 20 74 6f  fore, attempt to
123d0 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20   advance..      
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123f0 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74    //       to it
12400 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69   now.  If we fai
12410 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d  l, we are done..
12420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12430 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d       index++;...
12460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12470 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64           if (ind
12480 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a 20  ex >= length).. 
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
124b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124c0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
124d0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
124e0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12500 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
12510 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
12520 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
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 20 20 74 72 61               tra
12550 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
12560 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
12570 20 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 22 4d 69 73              "Mis
12590 73 69 6e 67 20 76 61 6c 75 65 20 66 6f 72 20 6f  sing value for o
125a0 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ption: {0}",..  
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
125d0 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20  rDisplay(arg)), 
125e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
125f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12610 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12630 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
12640 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
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 20 62 72 65 61 6b 3b 0d           break;.
12670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12680 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
12690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126c0 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
126d0 74 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75  the textual valu
126e0 65 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e  e of this comman
126f0 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20  d line..        
12700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12710 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e  //       option.
12720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12730 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12750 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
12760 74 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b  t = args[index];
12770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127a0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
127b0 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63   Figure out whic
127c0 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  h command line o
127d0 70 74 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20  ption this is.. 
127e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
12800 28 62 61 73 65 64 20 6f 6e 20 61 20 70 61 72 74  (based on a part
12810 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68 29 20  ial name match) 
12820 61 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a 20 20  and then try..  
12830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12840 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
12850 6f 20 69 6e 74 65 72 70 72 65 74 20 74 68 65 20  o interpret the 
12860 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73  textual value as
12870 20 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20   the correct..  
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12890 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
128a0 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ype...          
128b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
128c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
128d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61            if (Ma
128e0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
128f0 2c 20 22 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e  , "configVersion
12900 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
12910 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
12940 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67  iguration.config
12950 56 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d  Version = text;.
12960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12970 20 20 20 20 20 20 20 20 20 7d 0d 0a 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 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
129a0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
129b0 20 22 63 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20   "confirm"))..  
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
129e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129f0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
12a00 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
12a10 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
12a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a30 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
12a40 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a80 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
12a90 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
12aa0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
12ad0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
12ae0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
12af0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
12b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b10 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
12b20 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
12b30 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
12b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b50 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
12b60 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
12b70 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ba0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
12bb0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
12bc0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
12bf0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
12c20 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 20 20 20 20 20 20 72                 r
12c50 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
12c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ca0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
12cd0 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20  ation.confirm = 
12ce0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
12d30 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63  ption(newArg, "c
12d40 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  oreFileName"))..
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 63 6f 6e 66 69 67 75 72 61         configura
12d90 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
12da0 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
12de0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12df0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75  on(newArg, "debu
12e00 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  g"))..          
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
12e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12e30 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
12e40 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
12e50 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
12e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
12e80 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
12e90 0d 0a 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 7b 0d                {.
12eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
12ee0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
12ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f10 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
12f20 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
12f30 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
12f70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fa0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
12fb0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
12fc0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fe0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
12ff0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
13000 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13030 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
13040 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13060 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13070 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13090 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
130a0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
130d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
130f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13110 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
13120 62 75 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  bug = (bool)valu
13130 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
13140 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13160 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13170 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
13180 72 67 2c 20 22 64 65 62 75 67 46 6f 72 6d 61 74  rg, "debugFormat
13190 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
131d0 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46  iguration.debugF
131e0 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20  ormat = text;.. 
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13200 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
13210 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 20  Ops.DebugFormat 
13220 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
13230 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  debugFormat;..  
13240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13250 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13270 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
13280 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
13290 65 62 75 67 50 72 69 6f 72 69 74 79 22 29 29 0d  ebugPriority")).
132a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
132b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
132e0 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d  alue = ParseEnum
132f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13310 20 20 20 74 79 70 65 6f 66 28 54 72 61 63 65 50     typeof(TraceP
13320 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20  riority), text, 
13330 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
13360 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13380 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
133b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
133c0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
133f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
13400 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
13410 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
13440 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
13450 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
13480 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b  lid {0} value: {
13490 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
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 46 6f 72 44 69 73            ForDis
134c0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
134d0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
13510 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13530 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13540 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
13570 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13590 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
135a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
135c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
135f0 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 28 54  bugPriority = (T
13600 72 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c  racePriority)val
13610 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 50   TraceOps.DebugP
13640 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67  riority = config
13650 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69  uration.debugPri
13660 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13680 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
13690 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
136a0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
136b0 6e 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e 65  newArg, "designe
136c0 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  rFileName"))..  
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13700 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
13710 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  on.designerFileN
13720 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
13750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13760 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
13770 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69  tion(newArg, "di
13780 72 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20  rectory"))..    
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
137d0 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78  .directory = tex
137e0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43    // NOTE: *SPEC
13830 49 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73  IAL* Must refres
13840 68 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73  h the file names
13850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13870 20 20 20 20 20 20 20 68 65 72 65 20 62 65 63 61         here beca
13880 75 73 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69  use the underlyi
13890 6e 67 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  ng directory..  
138a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
138c0 20 20 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d     has changed..
138d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
138f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13900 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
13910 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
13920 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
13930 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a  .coreFileName;..
13940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13960 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
13970 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65  OrEmpty(coreFile
13980 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
13990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139a0 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65          coreFile
139b0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46  Name = Path.GetF
139c0 69 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65  ileName(coreFile
139d0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
13a00 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
13a10 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  oreFileName)).. 
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13a40 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e  oreFileName = In
13a50 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65  staller.CoreFile
13a60 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
13a90 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  on.coreFileName 
13aa0 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d  = Path.Combine(.
13ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ad0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
13ae0 69 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69  irectory, coreFi
13af0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
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 73 74 72 69 6e 67 20 6c          string l
13b20 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f  inqFileName = co
13b30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71  nfiguration.linq
13b40 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
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 69 66 20 28 21 53 74           if (!St
13b70 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
13b80 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  ty(linqFileName)
13b90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bb0 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20     linqFileName 
13bc0 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
13bd0 6d 65 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  me(linqFileName)
13be0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
13c10 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69  llOrEmpty(linqFi
13c20 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
13c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c40 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
13c50 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c  leName = Install
13c60 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  er.LinqFileName;
13c70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69  configuration.li
13ca0 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  nqFileName = Pat
13cb0 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20  h.Combine(..    
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
13ce0 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74  iguration.direct
13cf0 6f 72 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ory, linqFileNam
13d00 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 20 20 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c     string ef6Fil
13d30 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72  eName = configur
13d40 61 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d  ation.ef6FileNam
13d50 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d70 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
13d80 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 65 66 36 46  NullOrEmpty(ef6F
13d90 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13db0 20 20 20 20 20 20 20 20 20 20 20 65 66 36 46 69             ef6Fi
13dc0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65  leName = Path.Ge
13dd0 74 46 69 6c 65 4e 61 6d 65 28 65 66 36 46 69 6c  tFileName(ef6Fil
13de0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e00 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
13e10 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
13e20 65 66 36 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  ef6FileName)).. 
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13e50 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  f6FileName = Ins
13e60 74 61 6c 6c 65 72 2e 45 66 36 46 69 6c 65 4e 61  taller.Ef6FileNa
13e70 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13ea0 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50  .ef6FileName = P
13eb0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20  ath.Combine(..  
13ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13ee0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65  nfiguration.dire
13ef0 63 74 6f 72 79 2c 20 65 66 36 46 69 6c 65 4e 61  ctory, ef6FileNa
13f00 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67      string desig
13f30 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f  nerFileName = co
13f40 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69  nfiguration.desi
13f50 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  gnerFileName;...
13f60 0a 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 69 66 20               if 
13f80 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
13f90 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46  rEmpty(designerF
13fa0 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67             desig
13fd0 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  nerFileName = Pa
13fe0 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64  th.GetFileName(d
13ff0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
14000 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14020 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
14030 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
14040 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
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 64 65                de
14070 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
14080 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67   Installer.Desig
14090 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  nerFileName;....
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
140c0 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
140d0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
140e0 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20  h.Combine(..    
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14100 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14110 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74  iguration.direct
14120 6f 72 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c  ory, designerFil
14130 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  eName);..       
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14160 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
14170 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
14180 28 6e 65 77 41 72 67 2c 20 22 65 66 36 46 69 6c  (newArg, "ef6Fil
14190 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65   configuration.e
141e0 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  f6FileName = tex
141f0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
14200 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14220 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14230 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
14240 72 67 2c 20 22 69 6e 73 74 61 6c 6c 22 29 29 0d  rg, "install")).
14250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14260 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14280 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
14290 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
142a0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
142b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142c0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
142d0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14310 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
14320 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
14330 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
14370 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
14380 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
143b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
143c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
143f0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
14400 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
14410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14430 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14440 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
14450 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14480 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
14490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144b0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
144c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
144f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14510 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14530 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
14560 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c  guration.install
14570 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
14580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14590 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145b0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
145c0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
145d0 20 22 69 6e 73 74 61 6c 6c 46 6c 61 67 73 22 29   "installFlags")
145e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
145f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
14620 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e   value = ParseEn
14630 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um(..           
14640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14650 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 73 74       typeof(Inst
14660 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78 74 2c  allFlags), text,
14670 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   true);....     
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
146a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
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 7b 0d 0a 20 20 20 20 20 20         {..      
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146e0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
146f0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
14700 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
14730 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
14740 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
14750 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14770 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14780 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
14790 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
147a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147b0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
147c0 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20 66 6c 61  alid install fla
147d0 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d 22 2c 0d  gs value: {0}",.
147e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14800 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14810 74 65 78 74 29 29 2c 20 74 72 61 63 65 43 61 74  text)), traceCat
14820 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14840 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
14850 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 72 65 74 75              retu
14880 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
14890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
148b0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
14900 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20  on.installFlags 
14910 3d 20 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29  = (InstallFlags)
14920 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 7d 0d 0a 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 65 6c 73 65 20             else 
14960 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
14970 6e 65 77 41 72 67 2c 20 22 6c 69 6e 71 46 69 6c  newArg, "linqFil
14980 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
149d0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65  inqFileName = te
149e0 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
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 65 6c 73 65 20 69 66 20          else if 
14a20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
14a30 41 72 67 2c 20 22 6c 6f 67 46 69 6c 65 4e 61 6d  Arg, "logFileNam
14a40 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
14a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
14a80 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
14a90 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ad0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
14ae0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
14af0 22 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d 0a 20  "noCompact")).. 
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
14b40 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
14b50 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
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 69 66 20 28 76 61 6c 75 65         if (value
14b80 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
14bd0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
14be0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
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 54                 T
14c10 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
14c20 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
14c30 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c50 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14c60 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
14c70 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
14ca0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
14cb0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ce0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
14cf0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
14d00 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14d30 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14d60 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d90 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
14da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dc0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
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 20 7d 0d 0a 0d 0a 20 20 20          }....   
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e00 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14e10 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 74  ration.noCompact
14e20 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
14e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14e40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
14e70 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
14e80 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a   "noConsole"))..
14e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ea0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 62 6f 6f 6c 3f 20 76 61 6c         bool? val
14ed0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
14ee0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
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 69 66 20 28 76 61 6c 75          if (valu
14f10 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f30 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
14f60 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
14f70 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
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 20 20 20 20                  
14fa0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
14fb0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
14fc0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fe0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14ff0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
15000 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
15010 20 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 22 49 6e               "In
15030 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
15040 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
15050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15070 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
15080 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
15090 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
150c0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150f0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15120 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
15130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
151a0 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c  uration.noConsol
151b0 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  e = (bool)value;
151c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
151d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
151e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151f0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
15200 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
15210 2c 20 22 6e 6f 44 65 73 6b 74 6f 70 22 29 29 0d  , "noDesktop")).
15220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15230 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
15260 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
15270 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
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 69 66 20 28 76 61 6c           if (val
152a0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152e0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
152f0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
15300 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
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 20 20 20 20 20 20 20                  
15330 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
15340 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
15350 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15370 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
15380 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
15390 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
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 22 49                "I
153c0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
153d0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
153e0 0a 20 20 20 20 20 20 20 20 20 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 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
15410 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
15420 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
15450 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
15460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15480 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
154c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
154d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154e0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15520 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
15530 67 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 73 6b 74  guration.noDeskt
15540 6f 70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  op = (bool)value
15550 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15560 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15580 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
15590 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
155a0 67 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d 0a 20 20  g, "noLog"))..  
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 20 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
155f0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
15600 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
15630 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15650 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
15680 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
15690 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
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 20 20 20 20 54 72                Tr
156c0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
156d0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
156e0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
156f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15700 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
15710 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
15720 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
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 22 49 6e 76 61             "Inva
15750 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
15760 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
15770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15790 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
157a0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
157b0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
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 20 20 20 20 74 72 61 63 65             trace
157e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15810 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
15840 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15870 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158b0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
158c0 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62  ation.noLog = (b
158d0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15910 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
15920 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e  ion(newArg, "noN
15930 65 74 46 78 32 30 22 29 29 0d 0a 20 20 20 20 20  etFx20"))..     
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15970 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
15980 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
15990 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
159c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 20 7b 0d 0a 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 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
15a10 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
15a20 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
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 54 72 61 63 65             Trace
15a50 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
15a60 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
15a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a90 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
15aa0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
15ab0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
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 22 49 6e 76 61 6c 69 64          "Invalid
15ae0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
15af0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
15b20 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
15b30 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
15b40 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
15b70 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
15ba0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 20 20 20 20 20 72 65 74 75              retu
15bd0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15c00 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15c50 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 28  on.noNetFx20 = (
15c60 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
15c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
15cb0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
15cc0 4e 65 74 46 78 33 35 22 29 29 0d 0a 20 20 20 20  NetFx35"))..    
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
15d10 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
15d20 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d40 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
15d50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 7b 0d 0a 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 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
15da0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
15db0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
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 54 72 61 63              Trac
15de0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
15df0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
15e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
15e30 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
15e40 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
15e50 20 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 22 49 6e 76 61 6c 69           "Invali
15e70 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
15e80 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
15ec0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
15ed0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15f00 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15f30 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
15f40 20 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 20 20 20 20 72 65 74               ret
15f60 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
15f90 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
15fe0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20  ion.noNetFx35 = 
15ff0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16030 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
16040 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
16050 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20 20  oNetFx40"))..   
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16070 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16090 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
160a0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
160b0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
160e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 7b 0d 0a 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 20 20 20 65 72 72 6f 72 20 3d 20          error = 
16130 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
16140 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
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 54 72 61               Tra
16170 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
16180 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
16190 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
161a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
161c0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
161d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
16200 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
16210 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16240 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
16250 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
16260 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16290 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
162c0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
162f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16320 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16360 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
16370 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d  tion.noNetFx40 =
16380 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
163b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163c0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
163d0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
163e0 6e 6f 4e 65 74 46 78 34 35 22 29 29 0d 0a 20 20  noNetFx45"))..  
163f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16400 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16420 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
16430 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
16440 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
16470 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16490 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
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 65 72 72 6f 72 20 3d           error =
164c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
164d0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
164e0 20 20 20 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 54 72                Tr
16500 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
16510 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16520 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16540 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
16550 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
16560 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16580 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
16590 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
165a0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165d0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
165e0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
165f0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16620 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16650 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
16680 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
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 20 20 20 20 20 20 20 20 20                  
166b0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
166e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166f0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
16700 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20  ation.noNetFx45 
16710 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
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 7d 0d 0a 20 20 20 20 20          }..     
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16750 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
16760 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
16770 22 6e 6f 4e 65 74 46 78 34 35 31 22 29 29 0d 0a  "noNetFx451"))..
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16790 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167b0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
167c0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
167d0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
16800 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16820 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 65 72 72 6f 72             error
16850 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
16860 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
168a0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
168b0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
168c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
168e0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
168f0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
16920 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
16930 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
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 20 20 20 20 20 20 20                  
16960 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
16970 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
16980 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
169b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a10 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
16a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a40 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a80 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
16a90 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
16aa0 35 31 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  51 = (bool)value
16ab0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16ac0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ae0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
16af0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
16b00 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65 72  g, "noRuntimeVer
16b10 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20  sion"))..       
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b50 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
16b60 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
16b70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
16ba0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 20 7b 0d 0a 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 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
16bf0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
16c00 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
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 54 72 61 63 65 50 72           TracePr
16c30 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
16c40 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
16c80 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
16c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cb0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
16cc0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
16cd0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
16d00 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
16d10 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
16d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d40 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
16d50 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
16d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d70 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
16d80 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16da0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16db0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dd0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
16de0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
16e30 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  .noRuntimeVersio
16e40 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  n = (bool)value;
16e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
16e90 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
16ea0 2c 20 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20  , "noTrace")).. 
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 20 20 20 20 20 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
16ef0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
16f00 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
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 69 66 20 28 76 61 6c 75 65         if (value
16f30 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16f80 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
16f90 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
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 20 20 20 20 20 54                 T
16fc0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
16fd0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
16fe0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17000 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17010 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
17020 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
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 22 49 6e 76              "Inv
17050 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
17060 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
170a0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
170b0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
170e0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17110 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17140 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
17150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17170 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17190 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
171a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171b0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
171c0 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d  ration.noTrace =
171d0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17210 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
17220 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
17230 6e 6f 56 73 32 30 30 35 22 29 29 0d 0a 20 20 20  noVs2005"))..   
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 20 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
17280 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
17290 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172b0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
172c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
17310 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
17320 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
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 20 20 20 20 54 72 61               Tra
17350 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
17360 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
17370 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17390 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
173a0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
173b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
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 22 49 6e 76 61 6c            "Inval
173e0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
173f0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
17430 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
17440 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
17470 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
174a0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
174d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
17500 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17520 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17540 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
17550 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20  tion.noVs2005 = 
17560 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175a0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
175b0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
175c0 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20 20  oVs2008"))..    
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
17610 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
17620 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17640 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
17650 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 20 20 20 20 7b 0d 0a 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 20                  
17690 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
176a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
176b0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
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 20 20 20 20 54 72 61 63              Trac
176e0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
176f0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
17700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17720 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
17730 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
17740 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
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 22 49 6e 76 61 6c 69           "Invali
17770 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
17780 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
177c0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
177d0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17800 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17820 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17830 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17850 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
17860 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17890 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
178c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178d0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
178e0 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 28  ion.noVs2008 = (
178f0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17930 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
17940 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
17950 56 73 32 30 31 30 22 29 29 0d 0a 20 20 20 20 20  Vs2010"))..     
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
179a0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
179b0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
179e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 7b 0d 0a 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 20 20                  
17a20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
17a30 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
17a40 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
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 20 20 20 20 54 72 61 63 65             Trace
17a70 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
17a80 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
17a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ab0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
17ac0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
17ad0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
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 22 49 6e 76 61 6c 69 64          "Invalid
17b00 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
17b10 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
17b40 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
17b50 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
17b60 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
17b90 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
17bc0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
17bf0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17c20 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
17c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
17c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c60 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
17c70 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28 62  on.noVs2010 = (b
17c80 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
17c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ca0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17cc0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
17cd0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
17ce0 73 32 30 31 32 22 29 29 0d 0a 20 20 20 20 20 20  s2012"))..      
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d00 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
17d30 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
17d40 29 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
17d70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
17dc0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
17dd0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
17e00 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
17e10 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
17e50 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
17e60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
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 22 49 6e 76 61 6c 69 64 20         "Invalid 
17e90 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
17ea0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
17ed0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
17ee0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
17ef0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f10 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
17f20 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
17f50 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
17f80 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
17fb0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ff0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
18000 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 28 62 6f  n.noVs2012 = (bo
18010 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18030 20 20 20 7d 0d 0a 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 65 6c                el
18050 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
18060 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73  on(newArg, "noVs
18070 32 30 31 33 22 29 29 0d 0a 20 20 20 20 20 20 20  2013"))..       
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18090 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180b0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
180c0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
180d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
18100 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18120 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
18150 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
18160 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18180 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
18190 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
181a0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
181e0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
181f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
18220 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
18230 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
18260 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
18270 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
18280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
182b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
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 69 66 20 28 73 74 72           if (str
182e0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18310 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18330 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
18340 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18360 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
18370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18380 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
18390 2e 6e 6f 56 73 32 30 31 33 20 3d 20 28 62 6f 6f  .noVs2013 = (boo
183a0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
183e0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
183f0 6e 28 6e 65 77 41 72 67 2c 20 22 70 65 72 55 73  n(newArg, "perUs
18400 65 72 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  er"))..         
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
18440 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
18450 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
18460 0a 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 20 20 20 20 69                 i
18480 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
18490 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
184b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
184c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184d0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
184e0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
184f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18510 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
18520 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
18530 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
18570 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
185b0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
185c0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
185f0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
18600 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18630 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
18640 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18660 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
18670 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
186a0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186c0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
186d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18710 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 70   configuration.p
18720 65 72 55 73 65 72 20 3d 20 28 62 6f 6f 6c 29 76  erUser = (bool)v
18730 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18750 0d 0a 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 65 6c 73 65 20 69            else i
18770 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
18780 65 77 41 72 67 2c 20 22 72 65 67 69 73 74 72 79  ewArg, "registry
18790 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
187c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187d0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
187e0 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  .registryVersion
187f0 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
18830 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
18840 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69 63  n(newArg, "stric
18850 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
18890 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
188a0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
188b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
188d0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
188e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18920 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
18930 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
18940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
18970 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
18980 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
189c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189f0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
18a00 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
18a10 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a30 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
18a40 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
18a50 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a80 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
18a90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ab0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
18ac0 29 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 72 65 74 75 72 6e 20 66 61         return fa
18af0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b10 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
18b20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18b40 0d 0a 0d 0a 20 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 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74  // NOTE: Allow t
18b90 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
18ba0 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 20  arguments to..  
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
18bd0 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20     override the 
18be0 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65 74  "strictness" set
18bf0 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ting..          
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 76 69    //       provi
18c20 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
18c30 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
18c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c50 2f 2f 0d 0a 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 20 20                  
18c70 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76  strict = (bool)v
18c80 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
18c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18cb0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
18cc0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
18cd0 65 77 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e 4d  ewArg, "throwOnM
18ce0 69 73 73 69 6e 67 22 29 29 0d 0a 20 20 20 20 20  issing"))..     
18cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
18d30 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
18d40 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
18d70 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
18dc0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
18dd0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18df0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
18e00 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
18e10 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
18e20 0a 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 20                  
18e40 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
18e50 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
18e60 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
18e90 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
18ea0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
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 20 46                 F
18ed0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
18ee0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
18ef0 29 2c 0d 0a 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 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
18f20 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
18f50 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18f80 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18fb0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
19000 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  on.throwOnMissin
19010 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  g = (bool)value;
19020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19030 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19050 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
19060 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
19070 2c 20 22 74 72 61 63 65 46 6f 72 6d 61 74 22 29  , "traceFormat")
19080 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19090 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
190c0 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72  uration.traceFor
190d0 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  mat = text;..   
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190f0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
19100 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  s.TraceFormat = 
19110 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
19120 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  aceFormat;..    
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
19160 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
19170 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61  ion(newArg, "tra
19180 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20  cePriority")).. 
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
191d0 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d  ue = ParseEnum(.
191e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19200 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69   typeof(TracePri
19210 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72  ority), text, tr
19220 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
19250 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19290 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
192a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
192b0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
192e0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
192f0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
19300 0d 0a 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 20 20 20                  
19320 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
19330 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
19340 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19360 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
19370 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d  d {0} value: {1}
19380 22 2c 0d 0a 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 20 46 6f 72 44 69 73 70 6c          ForDispl
193b0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
193c0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(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 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
19400 0d 0a 0d 0a 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 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
19430 0a 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 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
19460 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
19490 0a 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 20 7d 0d 0a               }..
194b0 0d 0a 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 20 63 6f                co
194d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
194e0 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61  ePriority = (Tra
194f0 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65  cePriority)value
19500 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
19520 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69  raceOps.TracePri
19530 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72  ority = configur
19540 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
19550 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19580 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
19590 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
195a0 77 41 72 67 2c 20 22 76 65 72 62 6f 73 65 22 29  wArg, "verbose")
195b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
195c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
195f0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
19600 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
19630 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
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 7b 0d 0a 20 20             {..  
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
19680 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
19690 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196c0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
196d0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
196e0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
19710 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
19720 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19750 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
19760 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
19770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
197a0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
197b0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
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 20 20                  
197e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
197f0 0a 0d 0a 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 20                  
19810 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19840 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19850 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
198a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
198c0 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f  figuration.verbo
198d0 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  se = (bool)value
198e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
198f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19910 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
19920 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
19930 67 2c 20 22 76 73 56 65 72 73 69 6f 6e 53 75 66  g, "vsVersionSuf
19940 66 69 78 22 29 29 0d 0a 20 20 20 20 20 20 20 20  fix"))..        
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19980 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 73 56  onfiguration.vsV
19990 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 74  ersionSuffix = t
199a0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
199c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
199d0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
199e0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
199f0 77 41 72 67 2c 20 22 77 68 61 74 49 66 22 29 29  wArg, "whatIf"))
19a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19a10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
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 62 6f 6f 6c 3f 20 76           bool? v
19a40 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
19a50 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
19a80 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
19ad0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
19ae0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b10 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
19b20 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
19b30 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
19b60 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
19b70 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19ba0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
19bb0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
19bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
19bf0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
19c00 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19c30 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
19c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
19ca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cc0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
19cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d00 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
19d10 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66  iguration.whatIf
19d20 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
19d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19d40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d60 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
19d70 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
19d80 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20 20   "wow64"))..    
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
19dd0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
19de0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e00 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
19e10 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
19e60 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
19e70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e90 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
19ea0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
19eb0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
19ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
19ef0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
19f00 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
19f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
19f30 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
19f40 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f70 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
19f80 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
19f90 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
19fc0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19ff0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1a020 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1a050 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 20 20 7d 0d 0a 0d 0a 20 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 63 6f 6e 66 69 67 75 72 61 74        configurat
1a0a0 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f  ion.wow64 = (boo
1a0b0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1a0f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1a100 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a120 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1a130 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
1a140 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a160 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1a170 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1a180 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1a190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1a1c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d  "Unsupported com
1a200 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
1a210 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1a240 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
1a250 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
1a280 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1a2b0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a2e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1a300 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1a310 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1a330 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1a340 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1a350 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a360 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1a370 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1a380 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1a390 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1a3c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1a3d0 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
1a3e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a3f0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1a400 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64  = "Failed to mod
1a410 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ify configuratio
1a420 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
1a430 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a440 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1a450 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1a460 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a470 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1a480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a4c0 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
1a4d0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
1a4e0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
1a4f0 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
1a500 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
1a510 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20  bool Process(.. 
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1a530 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20  tring[] args,.. 
1a540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1a550 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
1a560 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
1a570 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1a580 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
1a590 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1a5a0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a5e0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1a5f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a600 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1a610 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1a620 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1a630 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
1a660 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61  nvalid configura
1a670 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
1a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a690 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
1a6d0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d  embly assembly =
1a6e0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61   configuration.a
1a6f0 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20  ssembly;....    
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20  if (assembly == 
1a720 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1a730 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a750 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
1a760 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e  nvalid assembly.
1a770 22 3b 0d 0a 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 72 65 74 75              retu
1a790 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a7b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a7c0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
1a7d0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61  figuration.noTra
1a7e0 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce)..           
1a7f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a810 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
1a820 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d  ration.noLog &&.
1a830 0a 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 53 74 72               Str
1a850 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1a860 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
1a870 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  logFileName)).. 
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 7b 0d 0a 20 20 20 20 20 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 2f 2f 0d 0a 20 20 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 20 20 2f 2f 20 4e 4f 54 45 3a 20 55        // NOTE: U
1a8e0 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c  se the default l
1a8f0 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20  og file name... 
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a910 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a930 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1a940 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
1a950 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c  Name = GetLogFil
1a960 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 20 20 20 20 20 20 20 20 22 74 72 61 63 65 22 29          "trace")
1a990 3b 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 7d 0d 0a 0d 0a             }....
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 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1a9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1aa00 0a 0d 0a 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 69 66 20 28 21             if (!
1aa20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1aa30 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20  Console)..      
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa70 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa90 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72   // NOTE: In ver
1aaa0 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 67  bose mode, debug
1aab0 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65   output (that me
1aac0 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ets..           
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aae0 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 6f   //       the co
1aaf0 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74  nfigured priorit
1ab00 79 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c  y criteria) will
1ab10 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
1ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab30 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c 61   //       displa
1ab40 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f  yed to the conso
1ab50 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74  le; otherwise, t
1ab60 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 75    //       outpu
1ab90 74 20 28 74 68 61 74 20 6d 65 65 74 73 20 74 68  t (that meets th
1aba0 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69  e configured pri
1abb0 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abd0 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69 74     //       crit
1abe0 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64 69  eria) will be di
1abf0 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63  splayed to the c
1ac00 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20  onsole...       
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac40 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
1ac50 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20  ration.debug).. 
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1aca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74    // NOTE: Add t
1acd0 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65  he console trace
1ace0 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65   listener to the
1acf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad10 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20    //       list 
1ad20 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65  of trace listene
1ad30 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 79  rs maintained by
1ad40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 54    //       the T
1ad70 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28 69  raceOps class (i
1ad80 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65  .e. only message
1ad90 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61 74     //       that
1adc0 20 6d 65 65 74 20 74 68 65 20 64 65 62 75 67 20   meet the debug 
1add0 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65  priority will be
1ade0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae00 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e 20    //       seen 
1ae10 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e  on the console).
1ae20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
1ae70 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65  etupDebugListene
1ae80 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rs();..         
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aea0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af00 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1af30 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  TE: Add the cons
1af40 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e  ole trace listen
1af50 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  er to the..     
1af60 20 20 20 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 2f 2f 20 20 20             //   
1af80 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69 6c      list of buil
1af90 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74 65  t-in trace liste
1afa0 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20  ners (i.e...    
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1afd0 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67       only messag
1afe0 65 73 20 74 68 61 74 20 6d 65 65 74 20 74 68 65  es that meet the
1aff0 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1b020 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62   priority will b
1b030 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f  e seen on the co
1b040 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20  nsole)...       
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1b090 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64  ce.Listeners.Add
1b0a0 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63  (new ConsoleTrac
1b0b0 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20  eListener());.. 
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b110 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1b120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b160 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
1b170 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26  guration.noLog &
1b180 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
1b1a0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1b1b0 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69  mpty(configurati
1b1c0 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  on.logFileName))
1b1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b1e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b1f0 20 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 54 72 61 63 65 2e 4c           Trace.L
1b210 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77  isteners.Add(new
1b220 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63 65   TextWriterTrace
1b230 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 20  Listener(..     
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 63 6f 6e 66 69             confi
1b260 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
1b270 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name));....     
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b290 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2b0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1b2c0 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20  Technically, we 
1b2d0 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67 20  created the log 
1b2e0 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  file...         
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b300 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b320 20 20 20 66 69 6c 65 73 43 72 65 61 74 65 64 2b     filesCreated+
1b330 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
1b340 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1b370 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b390 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d      // NOTE: Dum
1b3a0 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  p the configurat
1b3b0 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20  ion now in case 
1b3c0 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20  we need to..    
1b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3e0 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65  //       trouble
1b3f0 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73  shoot any issues
1b400 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b410 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b430 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
1b440 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3c  .debugPriority <
1b450 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
1b460 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20  Medium)..       
1b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b480 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
1b490 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61 63  ump(debugCallbac
1b4a0 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
1b4b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1b4c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
1b4d0 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72  cePriority <= Tr
1b4e0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1b4f0 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um)..           
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1b510 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28  figuration.Dump(
1b520 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d  traceCallback);.
1b530 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b540 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b560 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65  / NOTE: Show whe
1b570 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e  re we are runnin
1b580 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77  g from and how w
1b590 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20  e were..        
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1b5b0 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20       invoked... 
1b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1b5e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1b5f0 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73  g location = ass
1b600 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d  embly.Location;.
1b610 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b620 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1b630 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1b640 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1b650 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1b680 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1b690 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6b0 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65        "Running e
1b6c0 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30  xecutable is: {0
1b6d0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  }", ForDisplay(l
1b6e0 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  ocation)),..    
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b700 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1b710 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1b720 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1b730 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1b740 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1b750 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20  MediumLow,..    
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b770 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1b780 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1b790 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1b7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b7b0 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67 69            "Origi
1b7c0 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  nal command line
1b7d0 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20   is: {0}",..    
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7f0 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e      Environment.
1b800 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72  CommandLine), tr
1b810 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1b820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b830 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1b840 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1b850 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1b860 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1b880 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1b890 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1b8a0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8c0 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f      "Running pro
1b8d0 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49  cess is {0}.", I
1b8e0 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
1b8f0 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
1b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b910 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62 69  64-bit" : "32-bi
1b920 74 22 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  t"), traceCatego
1b930 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1b940 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b950 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77  !configuration.w
1b960 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
1b970 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b990 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9b0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
1b9c0 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20 61  he debugger is a
1b9d0 74 74 61 63 68 65 64 20 61 6e 64 20 57 68 61 74  ttached and What
1b9e0 2d 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20 20  -If mode..      
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba00 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 5b 6e    //       is [n
1ba10 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69 73  ow] disabled, is
1ba20 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d 0a  sue a warning...
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba40 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba60 20 20 20 20 69 66 20 28 44 65 62 75 67 67 65 72      if (Debugger
1ba70 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20 20  .IsAttached)..  
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba90 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1baa0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1bab0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1bac0 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1baf0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1bb00 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63             "Forc
1bb30 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c 22  ed to disable \"
1bb40 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 77  what-if\" mode w
1bb50 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  ith " +..       
1bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb70 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67 67           "debugg
1bb80 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20 74  er attached.", t
1bb90 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1bbc0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1bbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bbe0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc00 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1bc10 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1bc20 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
1bc30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1bc50 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1bc60 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc80 20 20 20 20 20 20 20 20 20 22 4e 6f 20 61 63 74           "No act
1bc90 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c 6c  ual changes will
1bca0 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69 73   be made to this
1bcb0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1bcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcd0 20 20 22 73 79 73 74 65 6d 20 62 65 63 61 75 73    "system becaus
1bce0 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f  e \"what-if\" mo
1bcf0 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c  de is enabled.",
1bd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1bd20 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1bd50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd70 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
1bd80 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
1bd90 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61   has not been ma
1bda0 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  nually..        
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1bdc0 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20 28       confirmed (
1bdd0 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78 70  i.e. via the exp
1bde0 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69  licit command li
1bdf0 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ne..            
1be00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1be10 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73   option), then s
1be20 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20 6e  top processing n
1be30 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65 0d  ow.  We enforce.
1be40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1be50 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1be60 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74 20  is rule so that 
1be70 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c  simply double-cl
1be80 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  icking the..    
1be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bea0 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 61  //       executa
1beb0 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73  ble will not res
1bec0 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e 67  ult in any chang
1bed0 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20  es being..      
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bef0 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20 74         made to t
1bf00 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20  he system...    
1bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1bf30 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
1bf40 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69  figuration.confi
1bf50 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rm)..           
1bf60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf80 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61 6e      error = "Can
1bf90 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68  not continue, th
1bfa0 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70  e \"confirm\" op
1bfb0 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20  tion is " +..   
1bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfd0 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20 65 6e           "not en
1bfe0 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20  abled.";....    
1bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c000 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1c010 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c020 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c040 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1c060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c070 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1c080 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
1c090 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1c0b0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1c0c0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1c0d0 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0f0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1c100 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1c110 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f  , e, traceCatego
1c120 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c130 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1c140 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 70  r = "Failed to p
1c150 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72 61  rocess configura
1c160 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
1c170 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1c190 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1c1a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1c1b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1c1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1c200 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
1c210 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
1c220 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
1c230 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
1c240 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1c250 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75 6e  ic bool CheckRun
1c260 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
1c280 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
1c290 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1c2b0 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20   strict,..      
1c2c0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
1c2d0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1c2f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c310 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1c320 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c330 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1c340 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
1c350 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1c360 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e       error = "In
1c390 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74  valid configurat
1c3a0 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
1c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c410 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 61      // NOTE: Wha
1c420 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  t version of the
1c430 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68 65   runtime was the
1c440 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29 0d   core (primary).
1c450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c460 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73       //       as
1c470 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
1c480 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22 76  against (e.g. "v
1c490 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a 20  2.0.50727" or.. 
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4b0 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34 2e     //       "v4.
1c4c0 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20 20  0.30319")...    
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4e0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1c4f0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
1c500 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1c510 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61 67  ersion = GetImag
1c520 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  eRuntimeVersion(
1c530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c540 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1c550 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
1c560 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c590 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
1c5a0 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74 75  e allow the actu
1c5b0 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  al image runtime
1c5c0 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65 0d   checking to be.
1c5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c5e0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79       //       by
1c5f0 70 61 73 73 65 64 20 76 69 61 20 74 68 65 20 22  passed via the "
1c600 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  -noRuntimeVersio
1c610 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d  n" command line.
1c620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c630 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
1c640 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d 61  tion.  The comma
1c650 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 69  nd line option i
1c660 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d 0a  s intended for..
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c680 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 70      //       exp
1c690 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a 20  ert use only... 
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1c6c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1c6d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52  onfiguration.noR
1c6e0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d 0a  untimeVersion)..
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c700 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1c720 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1c730 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1c740 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20  ity.Medium,..   
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1c770 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1c780 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1c790 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7b0 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20     "Assembly is 
1c7c0 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
1c7d0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1c7e0 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20 20  {0}; " +..      
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c800 20 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c 20        "however, 
1c810 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65 73  installation res
1c820 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64 20  trictions based 
1c830 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20  on this " +..   
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 20 20 20 20 20 20 20 20 20 22 66 61 63 74 20 68           "fact h
1c860 61 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c 65  ave been disable
1c870 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e  d via the comman
1c880 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20 20  d line.",..     
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8a0 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65         coreImage
1c8b0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
1c8c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1c8d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1c8f0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
1c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1c910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c920 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c940 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63 74  / TODO: Restrict
1c950 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69   the configurati
1c960 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69 63  on based on whic
1c970 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20 20  h image..       
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1c990 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76 65        runtime ve
1c9a0 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f  rsions (which mo
1c9b0 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65  re-or-less corre
1c9c0 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  spond..         
1c9d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1c9e0 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d      to .NET Fram
1c9f0 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29 20  ework versions) 
1ca00 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62 79  are supported by
1ca10 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
1ca20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1ca30 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 56     versions of V
1ca40 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68 61  isual Studio tha
1ca50 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e  t are installed.
1ca60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ca70 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ca90 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
1caa0 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67 65  rEmpty(coreImage
1cab0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1cac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cad0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caf0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
1cb00 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67  d core file imag
1cb10 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
1cb20 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
1cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1cb40 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1cb70 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1cb80 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a  String.Equals(..
1cb90 20 20 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 20 20 63 6f 72 65              core
1cbb0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1cbc0 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65 52  ion, CLRv2ImageR
1cbd0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a  untimeVersion,..
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
1cc00 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
1cc10 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  inal))..        
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc40 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc60 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20     // NOTE: For 
1cc70 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75 6e  the CLR v2.0 run
1cc80 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
1cc90 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20  we disable..    
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccb0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79      //       any
1ccc0 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20   attempt to use 
1ccd0 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68  it for things th
1cce0 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20  at require..    
1ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd00 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20      //       an 
1cd10 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
1cd20 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34  d for the CLR v4
1cd30 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20 20  .0.  It is..    
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd50 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e 63      //       unc
1cd60 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20 69  ertain if this i
1cd70 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72 6f  s actually a pro
1cd80 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20 20  blem in..       
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74 69   //       practi
1cdb0 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76 34  ce as the CLR v4
1cdc0 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64 20  .0 can load and 
1cdd0 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20 20  use an..        
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdf0 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c  //       assembl
1ce00 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  y compiled with 
1ce10 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68 6f  the CLR v2.0; ho
1ce20 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  wever,..        
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce40 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20 74  //       since t
1ce50 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66 65  his project offe
1ce60 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75 72  rs both configur
1ce70 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  ations,..       
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce90 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75 72   //       we cur
1cea0 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77 20  rently disallow 
1ceb0 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d 0a  this mismatch...
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ced0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cef0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1cf00 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74 72  n.noNetFx40 = tr
1cf10 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1cf30 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
1cf40 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Fx45 = true;..  
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf60 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1cf70 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d  ion.noNetFx451 =
1cf80 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfa0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1cfb0 56 73 32 30 31 30 20 3d 20 74 72 75 65 3b 0d 0a  Vs2010 = true;..
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 63 6f 6e 66 69 67 75 72          configur
1cfe0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d  ation.noVs2012 =
1cff0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d010 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1d020 56 73 32 30 31 33 20 3d 20 74 72 75 65 3b 0d 0a  Vs2013 = true;..
1d030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d040 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1d050 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1d060 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1d070 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d090 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1d0a0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1d0b0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1d0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1d0e0 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
1d0f0 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
1d100 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20   Framework {0}, 
1d110 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d130 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68   "support for th
1d140 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1d150 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61   {1} is now disa
1d160 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
1d170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d180 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67 65 52       CLRv2ImageR
1d190 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43  untimeVersion, C
1d1a0 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv4ImageRuntime
1d1b0 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
1d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d1e0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d210 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72 69     else if (Stri
1d220 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20  ng.Equals(..    
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d240 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67          coreImag
1d250 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
1d260 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69   CLRv4ImageRunti
1d270 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  meVersion,..    
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d290 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f          StringCo
1d2a0 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
1d2b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1d2c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d300 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20  / NOTE: For the 
1d310 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69 6d 65  CLR v4.0 runtime
1d320 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64  , make sure we d
1d330 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  isable..        
1d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d350 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74 74  //       any att
1d360 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20 66  empt to use it f
1d370 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20 72  or things that r
1d380 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20  equire..        
1d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3a0 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73 65  //       an asse
1d3b0 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f  mbly compiled fo
1d3c0 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d  r the CLR v2.0..
1d3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d3e0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d400 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1d410 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 74  on.noNetFx20 = t
1d420 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1d440 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1d450 74 46 78 33 35 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx35 = true;.. 
1d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d470 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1d480 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20  tion.noVs2005 = 
1d490 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1d4b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
1d4c0 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a 0d  s2008 = true;...
1d4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d4e0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1d4f0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1d500 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1d510 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  dium,..         
1d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d530 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1d540 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1d550 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1d560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d570 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
1d580 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c  sembly is compil
1d590 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20  ed for the .NET 
1d5a0 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22  Framework {0}, "
1d5b0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5d0 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68 65  "support for the
1d5e0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1d5f0 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62  {1} is now disab
1d600 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  led.",..        
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d620 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43      ForDisplay(C
1d630 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv4ImageRuntime
1d640 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1d670 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74  y(CLRv2ImageRunt
1d680 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  imeVersion)),.. 
1d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d6b0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1d6e0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d700 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d710 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1d720 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
1d730 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d750 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 72  "unsupported cor
1d760 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e  e file image run
1d770 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 22 20 2b  time version " +
1d780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
1d7a0 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d 20  0}, must be {1} 
1d7b0 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20  or {2}",..      
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7d0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1d7e0 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d  (coreImageRuntim
1d7f0 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
1d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d810 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1d820 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e  ay(CLRv2ImageRun
1d830 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  timeVersion),.. 
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d850 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1d860 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65  splay(CLRv4Image
1d870 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1d880 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1d8a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1d8d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1d8e0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1d8f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1d900 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
1d910 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1d930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d940 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
1d950 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
1d960 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
1d970 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1d990 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1d9a0 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72  eCallback, e, tr
1d9b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d9c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d9d0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61       error = "Fa
1d9e0 69 6c 65 64 20 74 6f 20 63 68 65 63 6b 20 69 6d  iled to check im
1d9f0 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73  age runtime vers
1da00 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
1da10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1da20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1da30 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1da40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1da50 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1da60 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
1da70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1da80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1daa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dab0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1dac0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
1dad0 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
1dae0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1daf0 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20  ool HasFlags(.. 
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
1db10 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 46  nstallFlags hasF
1db20 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  lags,..         
1db30 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d         bool all.
1db40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1db50 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
1db60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1db70 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20     if (all)..   
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db90 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c   return ((instal
1dba0 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67  lFlags & hasFlag
1dbb0 73 29 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b  s) == hasFlags);
1dbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dbd0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1dbf0 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67  rn ((installFlag
1dc00 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d  s & hasFlags) !=
1dc10 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f   InstallFlags.No
1dc20 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne);..          
1dc30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1dc40 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1dc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc80 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1dc90 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1dca0 6c 20 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65  l IsLinqSupporte
1dcb0 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
1dcc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1dcd0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1dce0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1dcf0 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1dd00 20 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e 44   if the System.D
1dd10 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d  ata.SQLite.Linq.
1dd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dd30 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62   //       assemb
1dd40 6c 79 20 73 68 6f 75 6c 64 20 62 65 20 70 72 6f  ly should be pro
1dd50 63 65 73 73 65 64 20 64 75 72 69 6e 67 20 74 68  cessed during th
1dd60 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20 20 20  e install...    
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1dd80 20 20 20 20 20 49 66 20 74 68 65 20 74 61 72 67       If the targ
1dd90 65 74 20 69 73 20 56 69 73 75 61 6c 20 53 74 75  et is Visual Stu
1dda0 64 69 6f 20 32 30 30 35 2c 20 74 68 69 73 20 6d  dio 2005, this m
1ddb0 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ust..           
1ddc0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
1ddd0 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  turn zero...    
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de00 72 65 74 75 72 6e 20 21 6e 6f 4e 65 74 46 78 33  return !noNetFx3
1de10 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 30 20  5 || !noNetFx40 
1de20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 20 7c 7c  || !noNetFx45 ||
1de30 20 21 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20   !noNetFx451;.. 
1de40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1de50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1de60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1dea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1deb0 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 45 66 36  ublic bool IsEf6
1dec0 53 75 70 70 6f 72 74 65 64 28 29 0d 0a 20 20 20  Supported()..   
1ded0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df00 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20  // NOTE: Return 
1df10 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
1df20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1df30 74 65 2e 45 46 36 0d 0a 20 20 20 20 20 20 20 20  te.EF6..        
1df40 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1df50 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64   assembly should
1df60 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 64 75   be processed du
1df70 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61 6c 6c  ring the install
1df80 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1df90 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20 74     //       If t
1dfa0 68 65 20 74 61 72 67 65 74 20 69 73 20 56 69 73  he target is Vis
1dfb0 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 35 20  ual Studio 2005 
1dfc0 6f 72 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20  or Visual..     
1dfd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1dfe0 20 20 20 20 53 74 75 64 69 6f 20 32 30 30 38 2c      Studio 2008,
1dff0 20 74 68 69 73 20 6d 75 73 74 20 72 65 74 75 72   this must retur
1e000 6e 20 7a 65 72 6f 2e 20 20 41 6c 73 6f 2c 20 69  n zero.  Also, i
1e010 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
1e020 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
1e030 45 46 36 20 63 6f 72 65 20 61 73 73 65 6d 62 6c  EF6 core assembl
1e040 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  y is unavailable
1e050 2c 20 74 68 69 73 20 6d 75 73 74 0d 0a 20 20 20  , this must..   
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1e070 20 20 20 20 20 20 72 65 74 75 72 6e 20 7a 65 72        return zer
1e080 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o...            
1e090 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1e0a0 20 20 20 20 20 20 20 20 69 66 20 28 6e 6f 4e 65          if (noNe
1e0b0 74 46 78 34 30 20 26 26 20 6e 6f 4e 65 74 46 78  tFx40 && noNetFx
1e0c0 34 35 20 26 26 20 6e 6f 4e 65 74 46 78 34 35 31  45 && noNetFx451
1e0d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1e0e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1e0f0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1e100 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
1e110 73 45 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69  sEf6AssemblyAvai
1e120 6c 61 62 6c 65 28 29 3b 0d 0a 20 20 20 20 20 20  lable();..      
1e130 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e140 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1e150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e190 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1e1a0 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20 20 20   void Dump(..   
1e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1e1c0 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65  ceCallback trace
1e1d0 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20 20  Callback..      
1e1e0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1e1f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e200 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1e210 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d  traceCallback !=
1e220 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1e230 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e250 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1e260 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1e270 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e290 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
1e2a0 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61  y", ForDisplay(a
1e2b0 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20 20  ssembly)),..    
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1e2e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1e2f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e300 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1e310 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1e320 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e340 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d 65      "LogFileName
1e350 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f  ", ForDisplay(lo
1e360 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  gFileName)),..  
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e390 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e3b0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e3c0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e3d0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3f0 20 20 20 20 20 20 22 44 69 72 65 63 74 6f 72 79        "Directory
1e400 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69  ", ForDisplay(di
1e410 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20  rectory)),..    
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1e440 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1e450 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e460 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1e470 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1e480 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4a0 20 20 20 20 22 43 6f 72 65 46 69 6c 65 4e 61 6d      "CoreFileNam
1e4b0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  e", ForDisplay(c
1e4c0 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  oreFileName)),..
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e4f0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e510 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1e520 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1e530 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e550 20 20 20 20 20 20 20 20 22 4c 69 6e 71 46 69 6c          "LinqFil
1e560 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  eName", ForDispl
1e570 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  ay(linqFileName)
1e580 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e590 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e5a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5c0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e5d0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e5e0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e5f0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e600 20 20 20 20 20 20 20 20 20 20 20 20 22 45 66 36              "Ef6
1e610 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
1e620 73 70 6c 61 79 28 65 66 36 46 69 6c 65 4e 61 6d  splay(ef6FileNam
1e630 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e650 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e670 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e680 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e690 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e6a0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
1e6c0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22  esignerFileName"
1e6d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 73  , ForDisplay(des
1e6e0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c  ignerFileName)),
1e6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e700 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e710 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e730 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e740 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e750 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e770 20 20 20 20 20 20 20 20 20 20 22 52 65 67 69 73            "Regis
1e780 74 72 79 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72  tryVersion", For
1e790 44 69 73 70 6c 61 79 28 72 65 67 69 73 74 72 79  Display(registry
1e7a0 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1e7d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1e7e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e7f0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1e800 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1e810 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e830 20 20 20 20 22 43 6f 6e 66 69 67 56 65 72 73 69      "ConfigVersi
1e840 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on", ForDisplay(
1e850 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 29 29 2c  configVersion)),
1e860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e870 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e880 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e8b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e8c0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e8e0 20 20 20 20 20 20 20 20 20 20 22 56 73 56 65 72            "VsVer
1e8f0 73 69 6f 6e 53 75 66 66 69 78 22 2c 20 46 6f 72  sionSuffix", For
1e900 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f  Display(vsVersio
1e910 6e 53 75 66 66 69 78 29 29 2c 0d 0a 20 20 20 20  nSuffix)),..    
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e930 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1e940 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1e950 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e960 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1e970 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1e980 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9a0 20 20 20 20 22 44 65 62 75 67 46 6f 72 6d 61 74      "DebugFormat
1e9b0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65  ", ForDisplay(de
1e9c0 62 75 67 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20  bugFormat)),..  
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e9f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ea10 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ea20 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1ea30 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea50 20 20 20 20 20 20 22 54 72 61 63 65 46 6f 72 6d        "TraceForm
1ea60 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  at", ForDisplay(
1ea70 74 72 61 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a  traceFormat)),..
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea90 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1eaa0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1eac0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1ead0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1eae0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb00 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c          "Install
1eb10 46 6c 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c  Flags", ForDispl
1eb20 61 79 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29  ay(installFlags)
1eb30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1eb50 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb70 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1eb80 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1eb90 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1eba0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62              "Deb
1ebc0 75 67 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72  ugPriority", For
1ebd0 44 69 73 70 6c 61 79 28 64 65 62 75 67 50 72 69  Display(debugPri
1ebe0 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20  ority)),..      
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec00 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1ec10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ec20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ec30 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1ec40 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1ec50 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 20 22 54 72 61 63 65 50 72 69 6f 72 69 74 79    "TracePriority
1ec80 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72  ", ForDisplay(tr
1ec90 61 63 65 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a  acePriority)),..
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecb0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1ecc0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ece0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1ecf0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1ed00 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed20 20 20 20 20 20 20 20 20 22 50 65 72 55 73 65 72          "PerUser
1ed30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 70 65  ", ForDisplay(pe
1ed40 72 55 73 65 72 29 29 2c 0d 0a 20 20 20 20 20 20  rUser)),..      
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1ed70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ed80 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ed90 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1eda0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1edb0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edd0 20 20 22 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72    "Install", For
1ede0 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29  Display(install)
1edf0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ee10 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee30 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1ee40 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1ee50 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1ee60 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 22 57 6f 77              "Wow
1ee80 36 34 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  64", ForDisplay(
1ee90 77 6f 77 36 34 29 29 2c 0d 0a 20 20 20 20 20 20  wow64)),..      
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eeb0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1eec0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1eed0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1eee0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1eef0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1ef00 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef20 20 20 22 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73    "NoRuntimeVers
1ef30 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion", ForDisplay
1ef40 28 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  (noRuntimeVersio
1ef50 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ef70 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1ef80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ef90 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1efa0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1efb0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1efc0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1efe0 6f 44 65 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69  oDesktop", ForDi
1eff0 73 70 6c 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29  splay(noDesktop)
1f000 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1f010 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1f020 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f040 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1f050 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1f060 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1f070 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1f080 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43              "NoC
1f090 6f 6d 70 61 63 74 22 2c 20 46 6f 72 44 69 73 70  ompact", ForDisp
1f0a0 6c 61 79 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c  lay(noCompact)),
1f0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f0c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f0d0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1f100 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1f110 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1f120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f130 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74            "NoNet
1f140 46 78 32 30 22 2c 20 46 6f 72 44 69 73 70 6c 61  Fx20", ForDispla
1f150 79 28 6e 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a  y(noNetFx20)),..
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f170 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1f180 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f1a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1f1b0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1f1c0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1e0 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
1f1f0 33 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  35", ForDisplay(
1f200 6e 6f 4e 65 74 46 78 33 35 29 29 2c 0d 0a 20 20  noNetFx35)),..  
1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f220 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1f230 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1f240 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1f250 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1f260 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1f270 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f290 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30        "NoNetFx40
1f2a0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1f2b0 4e 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20  NetFx40)),..    
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2d0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1f2e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1f2f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1f300 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1f310 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1f320 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f340 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c      "NoNetFx45",
1f350 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65   ForDisplay(noNe
1f360 74 46 78 34 35 29 29 2c 0d 0a 20 20 20 20 20 20  tFx45)),..      
1f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f380 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1f390 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f3a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1f3b0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1f3c0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1f3d0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3f0 20 20 22 4e 6f 4e 65 74 46 78 34 35 31 22 2c 20    "NoNetFx451", 
1f400 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
1f410 46 78 34 35 31 29 29 2c 0d 0a 20 20 20 20 20 20  Fx451)),..      
1f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f430 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1f440 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f450 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1f460 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1f470 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1f480 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4a0 20 20 22 4e 6f 56 73 32 30 30 35 22 2c 20 46 6f    "NoVs2005", Fo
1f4b0 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30  rDisplay(noVs200
1f4c0 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  5)),..          
1f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1f4e0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1f4f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f500 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1f510 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1f520 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1f530 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1f550 6f 56 73 32 30 30 38 22 2c 20 46 6f 72 44 69 73  oVs2008", ForDis
1f560 70 6c 61 79 28 6e 6f 56 73 32 30 30 38 29 29 2c  play(noVs2008)),
1f570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f580 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f590 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1f5c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1f5d0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1f5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f5f0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
1f600 30 31 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  010", ForDisplay
1f610 28 6e 6f 56 73 32 30 31 30 29 29 2c 0d 0a 20 20  (noVs2010)),..  
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f630 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1f640 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1f660 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1f670 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1f680 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6a0 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 32 22        "NoVs2012"
1f6b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1f6c0 73 32 30 31 32 29 29 2c 0d 0a 20 20 20 20 20 20  s2012)),..      
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6e0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1f6f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f700 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1f710 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1f720 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1f730 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 20 22 4e 6f 56 73 32 30 31 33 22 2c 20 46 6f    "NoVs2013", Fo
1f760 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31  rDisplay(noVs201
1f770 33 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  3)),..          
1f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1f790 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1f7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f7b0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1f7c0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1f7d0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1f7e0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1f800 6f 54 72 61 63 65 22 2c 20 46 6f 72 44 69 73 70  oTrace", ForDisp
1f810 6c 61 79 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a  lay(noTrace)),..
1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f830 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1f840 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f860 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1f870 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1f880 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8a0 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f          "NoConso
1f8b0 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  le", ForDisplay(
1f8c0 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20  noConsole)),..  
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1f8f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1f910 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1f920 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1f930 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f950 20 20 20 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46        "NoLog", F
1f960 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29  orDisplay(noLog)
1f970 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1f980 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1f990 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9b0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1f9c0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1f9d0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1f9e0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1f9f0 20 20 20 20 20 20 20 20 20 20 20 20 22 54 68 72              "Thr
1fa00 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f  owOnMissing", Fo
1fa10 72 44 69 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e  rDisplay(throwOn
1fa20 4d 69 73 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20  Missing)),..    
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa40 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1fa50 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1fa60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1fa70 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1fa80 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1fa90 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fab0 20 20 20 20 22 57 68 61 74 49 66 22 2c 20 46 6f      "WhatIf", Fo
1fac0 72 44 69 73 70 6c 61 79 28 77 68 61 74 49 66 29  rDisplay(whatIf)
1fad0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1faf0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1fb20 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1fb30 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1fb40 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62              "Deb
1fb60 75 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ug", ForDisplay(
1fb70 64 65 62 75 67 29 29 2c 0d 0a 20 20 20 20 20 20  debug)),..      
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb90 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1fba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1fbb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1fbc0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1fbd0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1fbe0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc00 20 20 22 56 65 72 62 6f 73 65 22 2c 20 46 6f 72    "Verbose", For
1fc10 44 69 73 70 6c 61 79 28 76 65 72 62 6f 73 65 29  Display(verbose)
1fc20 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1fc30 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1fc40 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc60 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1fc70 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1fc80 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1fc90 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1fca0 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e              "Con
1fcb0 66 69 72 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61  firm", ForDispla
1fcc0 79 28 63 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20  y(confirm)),..  
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fce0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1fcf0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 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 0d 0a 0d 0a 20 20 20 20  ////////....    
1fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd60 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20  if (assembly != 
1fd70 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1fd80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fda0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1fdb0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1fdc0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1fdd0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdf0 20 20 20 22 41 73 73 65 6d 62 6c 79 54 69 74 6c     "AssemblyTitl
1fe00 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
1fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe20 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41   ForDisplay(GetA
1fe30 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 61 73 73  ssemblyTitle(ass
1fe40 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20  embly))),..     
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe60 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1fe70 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1fe80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe90 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1fea0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1feb0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1fec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1fee0 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
1fef0 61 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20  ation",..       
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff10 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1ff20 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69  GetAssemblyConfi
1ff30 67 75 72 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c  guration(assembl
1ff40 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  y))),..         
1ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff60 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1ff70 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1ff80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1ff90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1ffa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1ffb0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
1ffc0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
1ffd0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1ffe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20010 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20020 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
20030 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
20040 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20050 76 61 74 65 20 41 73 73 65 6d 62 6c 79 20 61 73  vate Assembly as
20060 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20  sembly;..       
20070 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
20080 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20  mbly Assembly.. 
20090 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
200a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
200b0 74 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d  t { return assem
200c0 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  bly; }..        
200d0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61 73          set { as
200e0 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20  sembly = value; 
200f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20150 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20160 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
20170 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a  g logFileName;..
20180 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20190 69 63 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c  ic string LogFil
201a0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
201b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
201c0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
201d0 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20  rn logFileName; 
201e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
201f0 20 20 20 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65     set { logFile
20200 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
20210 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20270 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20280 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
20290 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20  directory;..    
202a0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
202b0 74 72 69 6e 67 20 44 69 72 65 63 74 6f 72 79 0d  tring Directory.
202c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
202d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202e0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 69 72  get { return dir
202f0 65 63 74 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20  ectory; }..     
20300 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20310 20 64 69 72 65 63 74 6f 72 79 20 3d 20 76 61 6c   directory = val
20320 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
20330 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20340 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20380 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20390 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
203a0 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
203b0 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
203c0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43   public string C
203d0 6f 72 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  oreFileName..   
203e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
203f0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
20400 7b 20 72 65 74 75 72 6e 20 63 6f 72 65 46 69 6c  { return coreFil
20410 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  eName; }..      
20420 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
20430 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76  coreFileName = v
20440 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20450 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20460 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
204b0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
204c0 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
204d0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
204e0 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
204f0 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20   LinqFileName.. 
20500 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20520 74 20 7b 20 72 65 74 75 72 6e 20 6c 69 6e 71 46  t { return linqF
20530 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
20540 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
20550 7b 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  { linqFileName =
20560 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20570 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20580 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
205d0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
205e0 74 65 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c  te string ef6Fil
205f0 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
20600 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
20610 67 20 45 66 36 46 69 6c 65 4e 61 6d 65 0d 0a 20  g Ef6FileName.. 
20620 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20640 74 20 7b 20 72 65 74 75 72 6e 20 65 66 36 46 69  t { return ef6Fi
20650 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  leName; }..     
20660 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20670 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 76   ef6FileName = v
20680 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20690 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
206a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
206b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
206f0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20700 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
20710 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
20720 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
20730 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c  ring DesignerFil
20740 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
20750 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20760 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
20770 72 6e 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  rn designerFileN
20780 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
20790 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
207a0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
207b0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
207c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
207d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
207e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20820 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20830 74 65 20 73 74 72 69 6e 67 20 72 65 67 69 73 74  te string regist
20840 72 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  ryVersion;..    
20850 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
20860 74 72 69 6e 67 20 52 65 67 69 73 74 72 79 56 65  tring RegistryVe
20870 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  rsion..         
20880 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20890 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
208a0 72 6e 20 72 65 67 69 73 74 72 79 56 65 72 73 69  rn registryVersi
208b0 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  on; }..         
208c0 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 65 67         set { reg
208d0 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 76  istryVersion = v
208e0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
208f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20900 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20940 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20950 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20960 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65   string configVe
20970 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
20980 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
20990 67 20 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 0d  g ConfigVersion.
209a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
209b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209c0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e  get { return con
209d0 66 69 67 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20  figVersion; }.. 
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
209f0 65 74 20 7b 20 63 6f 6e 66 69 67 56 65 72 73 69  et { configVersi
20a00 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  on = value; }.. 
20a10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
20a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20a70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20a80 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 76 73  rivate string vs
20a90 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a  VersionSuffix;..
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20ab0 69 63 20 73 74 72 69 6e 67 20 56 73 56 65 72 73  ic string VsVers
20ac0 69 6f 6e 53 75 66 66 69 78 0d 0a 20 20 20 20 20  ionSuffix..     
20ad0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20ae0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20af0 72 65 74 75 72 6e 20 76 73 56 65 72 73 69 6f 6e  return vsVersion
20b00 53 75 66 66 69 78 3b 20 7d 0d 0a 20 20 20 20 20  Suffix; }..     
20b10 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20b20 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
20b30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
20b40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20b50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b80 2f 2f 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 0d 0a 0d  /////////////...
20ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20bb0 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 62 75  vate string debu
20bc0 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  gFormat;..      
20bd0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
20be0 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74 0d  ing DebugFormat.
20bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c10 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62  get { return deb
20c20 75 67 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20  ugFormat; }..   
20c30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
20c40 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d   { debugFormat =
20c50 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20c60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20c70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20cc0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20cd0 74 65 20 73 74 72 69 6e 67 20 74 72 61 63 65 46  te string traceF
20ce0 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
20cf0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
20d00 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20  g TraceFormat.. 
20d10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20d30 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65  t { return trace
20d40 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20  Format; }..     
20d50 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20d60 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76   traceFormat = v
20d70 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20d80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20d90 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20da0 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
20de0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20df0 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e   InstallFlags in
20e00 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20  stallFlags;..   
20e10 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20e20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 49 6e 73  InstallFlags Ins
20e30 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 20  tallFlags..     
20e40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20e50 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20e60 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 46 6c  return installFl
20e70 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ags; }..        
20e80 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e          set { in
20e90 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 76 61 6c  stallFlags = val
20ea0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
20eb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20ec0 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
20f00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20f10 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54         private T
20f20 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65 62  racePriority deb
20f30 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20  ugPriority;..   
20f40 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20f50 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 44 65  TracePriority De
20f60 62 75 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20  bugPriority..   
20f70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20f80 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
20f90 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 50 72  { return debugPr
20fa0 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20  iority; }..     
20fb0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20fc0 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d   debugPriority =
20fd0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20fe0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20ff0 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21040 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
21050 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  te TracePriority
21060 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d   tracePriority;.
21070 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21080 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74  lic TracePriorit
21090 79 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d  y TracePriority.
210a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
210b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210c0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61  get { return tra
210d0 63 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20  cePriority; }.. 
210e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
210f0 65 74 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69  et { tracePriori
21100 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ty = value; }.. 
21110 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
21130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21170 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
21180 72 69 76 61 74 65 20 62 6f 6f 6c 20 70 65 72 55  rivate bool perU
21190 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ser;..          
211a0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65    public bool Pe
211b0 72 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20  rUser..         
211c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
211d0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
211e0 72 6e 20 70 65 72 55 73 65 72 3b 20 7d 0d 0a 20  rn perUser; }.. 
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21200 65 74 20 7b 20 70 65 72 55 73 65 72 20 3d 20 76  et { perUser = v
21210 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
21220 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21230 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21270 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21280 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
21290 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a   bool install;..
212a0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
212b0 69 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d  ic bool Install.
212c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73  get { return ins
212f0 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tall; }..       
21300 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69           set { i
21310 6e 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20  nstall = value; 
21320 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21380 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
21390 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
213a0 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20  wow64;..        
213b0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
213c0 57 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20  Wow64..         
213d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
213e0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
213f0 72 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a 20 20 20  rn wow64; }..   
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
21410 20 7b 20 77 6f 77 36 34 20 3d 20 76 61 6c 75 65   { wow64 = value
21420 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21430 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21440 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21480 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21490 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
214a0 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  l noRuntimeVersi
214b0 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
214c0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52   public bool NoR
214d0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20  untimeVersion.. 
214e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
214f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21500 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e  t { return noRun
21510 74 69 6d 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a  timeVersion; }..
21520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21530 73 65 74 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56  set { noRuntimeV
21540 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20  ersion = value; 
21550 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
215c0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
215d0 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20  noDesktop;..    
215e0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
215f0 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20  ool NoDesktop.. 
21600 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21620 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65 73  t { return noDes
21630 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ktop; }..       
21640 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
21650 6f 44 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65  oDesktop = value
21660 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21670 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21680 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
216d0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
216e0 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20  l noCompact;..  
216f0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
21700 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d   bool NoCompact.
21710 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21730 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43  get { return noC
21740 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20  ompact; }..     
21750 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
21760 20 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c   noCompact = val
21770 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
21780 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21790 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
217a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
217e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
217f0 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a  ool noNetFx20;..
21800 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
21810 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32  ic bool NoNetFx2
21820 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  0..            {
21830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21840 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
21850 6f 4e 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20  oNetFx20; }..   
21860 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
21870 20 7b 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76   { noNetFx20 = v
21880 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
21890 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
218a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
218b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
218f0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
21900 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35 3b   bool noNetFx35;
21910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
21920 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
21930 78 33 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x35..           
21940 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21950 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21960 20 6e 6f 4e 65 74 46 78 33 35 3b 20 7d 0d 0a 20   noNetFx35; }.. 
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21980 65 74 20 7b 20 6e 6f 4e 65 74 46 78 33 35 20 3d  et { noNetFx35 =
21990 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
219a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
219b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
219c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21a00 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
21a10 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34  te bool noNetFx4
21a20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
21a30 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
21a40 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20  tFx40..         
21a50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21a60 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
21a70 72 6e 20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d  rn noNetFx40; }.
21a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21a90 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30   set { noNetFx40
21aa0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
21ab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21ac0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
21b20 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
21b30 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  x45;..          
21b40 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
21b50 4e 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20  NetFx45..       
21b60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21b70 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
21b80 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 3b 20  turn noNetFx45; 
21b90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
21ba0 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78     set { noNetFx
21bb0 34 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  45 = value; }.. 
21bc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21bd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
21be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21c20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
21c30 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65  rivate bool noNe
21c40 74 46 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20  tFx451;..       
21c50 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
21c60 20 4e 6f 4e 65 74 46 78 34 35 31 0d 0a 20 20 20   NoNetFx451..   
21c70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21c80 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
21c90 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78  { return noNetFx
21ca0 34 35 31 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  451; }..        
21cb0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
21cc0 4e 65 74 46 78 34 35 31 20 3d 20 76 61 6c 75 65  NetFx451 = value
21cd0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21ce0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21cf0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d30 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21d40 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
21d50 6c 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20  l noVs2005;..   
21d60 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
21d70 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 35 0d 0a 20  bool NoVs2005.. 
21d80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21da0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32  t { return noVs2
21db0 30 30 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  005; }..        
21dc0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
21dd0 56 73 32 30 30 35 20 3d 20 76 61 6c 75 65 3b 20  Vs2005 = value; 
21de0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21df0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e40 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
21e50 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
21e60 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20  noVs2008;..     
21e70 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
21e80 6f 6c 20 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20  ol NoVs2008..   
21e90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
21eb0 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30  { return noVs200
21ec0 38 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  8; }..          
21ed0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
21ee0 32 30 30 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2008 = value; }.
21ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
21f60 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
21f70 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20  Vs2010;..       
21f80 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
21f90 20 4e 6f 56 73 32 30 31 30 0d 0a 20 20 20 20 20   NoVs2010..     
21fa0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21fb0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
21fc0 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b  return noVs2010;
21fd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21fe0 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
21ff0 31 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  10 = value; }.. 
22000 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
22020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22060 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
22070 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73  rivate bool noVs
22080 32 30 31 32 3b 0d 0a 20 20 20 20 20 20 20 20 20  2012;..         
22090 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
220a0 6f 56 73 32 30 31 32 0d 0a 20 20 20 20 20 20 20  oVs2012..       
220b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
220c0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
220d0 74 75 72 6e 20 6e 6f 56 73 32 30 31 32 3b 20 7d  turn noVs2012; }
220e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
220f0 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 32    set { noVs2012
22100 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
22110 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
22120 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
22130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22170 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
22180 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30  vate bool noVs20
22190 31 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  13;..           
221a0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56   public bool NoV
221b0 73 32 30 31 33 0d 0a 20 20 20 20 20 20 20 20 20  s2013..         
221c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
221d0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
221e0 72 6e 20 6e 6f 56 73 32 30 31 33 3b 20 7d 0d 0a  rn noVs2013; }..
221f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22200 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 33 20 3d  set { noVs2013 =
22210 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
22220 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22230 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
22280 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
22290 74 65 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b  te bool noTrace;
222a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
222b0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61 63  blic bool NoTrac
222c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
222d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
222e0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
222f0 6f 54 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20 20  oTrace; }..     
22300 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
22310 20 6e 6f 54 72 61 63 65 20 3d 20 76 61 6c 75 65   noTrace = value
22320 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
22330 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22340 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22380 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22390 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
223a0 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20  l noConsole;..  
223b0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
223c0 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d   bool NoConsole.
223d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
223e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223f0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43  get { return noC
22400 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20 20  onsole; }..     
22410 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
22420 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c   noConsole = val
22430 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
22440 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
22450 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
22460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22490 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
224a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
224b0 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20  ool noLog;..    
224c0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
224d0 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20  ool NoLog..     
224e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
224f0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
22500 72 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d  return noLog; }.
22510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22520 20 73 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76   set { noLog = v
22530 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
22540 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22550 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22590 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
225a0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
225b0 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
225c0 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  sing;..         
225d0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 54     public bool T
225e0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
225f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
22610 74 20 7b 20 72 65 74 75 72 6e 20 74 68 72 6f 77  t { return throw
22620 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a 20 20  OnMissing; }..  
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
22640 74 20 7b 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  t { throwOnMissi
22650 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ng = value; }.. 
22660 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22670 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
226a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
226c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
226d0 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74  rivate bool what
226e0 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
226f0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61   public bool Wha
22700 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tIf..           
22710 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22720 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
22730 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20   whatIf; }..    
22740 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
22750 7b 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65  { whatIf = value
22760 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
22770 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22780 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
227d0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
227e0 6c 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20  l debug;..      
227f0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
22800 6c 20 44 65 62 75 67 0d 0a 20 20 20 20 20 20 20  l Debug..       
22810 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22820 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
22830 74 75 72 6e 20 64 65 62 75 67 3b 20 7d 0d 0a 20  turn debug; }.. 
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
22850 65 74 20 7b 20 64 65 62 75 67 20 3d 20 76 61 6c  et { debug = val
22860 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
22870 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
22880 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
22890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
228d0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
228e0 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20  ool verbose;..  
228f0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
22900 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a 20   bool Verbose.. 
22910 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
22930 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62 6f  t { return verbo
22940 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  se; }..         
22950 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65 72         set { ver
22960 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  bose = value; }.
22970 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
22980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
22990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
229e0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63 6f   private bool co
229f0 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20  nfirm;..        
22a00 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
22a10 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20  Confirm..       
22a20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22a30 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
22a40 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d  turn confirm; }.
22a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a60 20 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20 3d   set { confirm =
22a70 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
22a80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
22a90 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
22aa0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
22ab0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
22ac0 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b10 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
22b20 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b 4c  egion FrameworkL
22b30 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ist Class..     
22b40 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
22b50 64 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f 72  d class Framewor
22b60 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b  kList..        {
22b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
22b80 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
22b90 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
22ba0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 46 72         public Fr
22bb0 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a 20  ameworkList().. 
22bc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
22be0 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
22bf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
22c00 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
22c10 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
22c20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22c70 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
22c80 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  blic Methods..  
22c90 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
22ca0 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
22cb0 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20  y rootKey;..    
22cc0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
22cd0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52  ockRegistryKey R
22ce0 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20  ootKey..        
22cf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22d00 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
22d10 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a  urn rootKey; }..
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d30 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20  set { rootKey = 
22d40 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
22d50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22d60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22db0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
22dc0 65 20 53 74 72 69 6e 67 4c 69 73 74 20 6e 61 6d  e StringList nam
22dd0 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es;..           
22de0 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69   public StringLi
22df0 73 74 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20  st Names..      
22e00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22e10 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
22e20 65 74 75 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a  eturn names; }..
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e40 73 65 74 20 7b 20 6e 61 6d 65 73 20 3d 20 76 61  set { names = va
22e50 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
22e60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22e70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22eb0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22ec0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22ed0 56 65 72 73 69 6f 6e 4d 61 70 20 76 65 72 73 69  VersionMap versi
22ee0 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ons;..          
22ef0 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
22f00 4d 61 70 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20  Map Versions..  
22f10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
22f30 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69 6f   { return versio
22f40 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ns; }..         
22f50 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65 72         set { ver
22f60 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d  sions = value; }
22f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22f80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
22f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fd0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22fe0 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e 67    private String
22ff0 4c 69 73 74 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  List platformNam
23000 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es;..           
23010 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69   public StringLi
23020 73 74 20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st PlatformNames
23030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23050 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 6c   get { return pl
23060 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a  atformNames; }..
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23080 73 65 74 20 7b 20 70 6c 61 74 66 6f 72 6d 4e 61  set { platformNa
23090 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  mes = value; }..
230a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
230b0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
230c0 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
230d0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
230e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
230f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23130 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23140 20 20 20 23 72 65 67 69 6f 6e 20 56 73 4c 69 73     #region VsLis
23150 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  t Class..       
23160 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
23170 63 6c 61 73 73 20 56 73 4c 69 73 74 0d 0a 20 20  class VsList..  
23180 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23190 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
231a0 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
231b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
231c0 62 6c 69 63 20 56 73 4c 69 73 74 28 29 0d 0a 20  blic VsList().. 
231d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
231e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
231f0 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
23200 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
23210 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
23220 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
23230 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23270 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23280 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
23290 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
232a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
232b0 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
232c0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20  yKey rootKey;.. 
232d0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
232e0 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
232f0 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20  y RootKey..     
23300 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23310 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
23320 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20  return rootKey; 
23330 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
23340 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79     set { rootKey
23350 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
23360 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
23370 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
23380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
233c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
233d0 76 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73 74  vate VersionList
233e0 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20   versions;..    
233f0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56          public V
23400 65 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73 69  ersionList Versi
23410 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ons..           
23420 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23430 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
23440 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20   versions; }..  
23450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
23460 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76  t { versions = v
23470 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
23480 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23490 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
234a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
234b0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
234c0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
234d0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
234e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23520 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23530 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
23540 43 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a 20  Constant Data.. 
23550 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
23560 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 6f 72 65  onst string Core
23570 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74  FileName = "Syst
23580 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
23590 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ll";..        pr
235a0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
235b0 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  ng LinqFileName 
235c0 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
235d0 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b  QLite.Linq.dll";
235e0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
235f0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 45  e const string E
23600 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79  f6FileName = "Sy
23610 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
23620 2e 45 46 36 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20  .EF6.dll";..    
23630 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
23640 74 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65  t string Designe
23650 72 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c  rFileName = "SQL
23660 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c  ite.Designer.dll
23670 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
23680 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
23690 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20   ProviderName = 
236a0 22 53 51 4c 69 74 65 20 44 61 74 61 20 50 72 6f  "SQLite Data Pro
236b0 76 69 64 65 72 22 3b 0d 0a 20 20 20 20 20 20 20  vider";..       
236c0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
236d0 74 72 69 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d  tring ProjectNam
236e0 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
236f0 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20  .SQLite";..     
23700 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
23710 20 73 74 72 69 6e 67 20 4c 65 67 61 63 79 50 72   string LegacyPr
23720 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c  ojectName = "SQL
23730 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  ite";..        p
23740 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
23750 69 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d  ing InvariantNam
23760 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
23770 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20  .SQLite";..     
23780 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
23790 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72 79 54   string FactoryT
237a0 79 70 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65  ypeName = "Syste
237b0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
237c0 4c 69 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a 20  LiteFactory";.. 
237d0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
237e0 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73 63  onst string Desc
237f0 72 69 70 74 69 6f 6e 20 3d 20 22 2e 4e 45 54 20  ription = ".NET 
23800 46 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 20 50  Framework Data P
23810 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
23820 74 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te";....        
23830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23870 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23880 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
23890 20 73 74 72 69 6e 67 20 43 4c 52 76 32 49 6d 61   string CLRv2Ima
238a0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
238b0 20 3d 20 22 76 32 2e 30 2e 35 30 37 32 37 22 3b   = "v2.0.50727";
238c0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
238d0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43  e const string C
238e0 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv4ImageRuntime
238f0 56 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e 30 2e  Version = "v4.0.
23900 33 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 20 20  30319";....     
23910 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23960 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
23970 6e 73 74 20 73 74 72 69 6e 67 20 45 66 36 41 73  nst string Ef6As
23980 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 22 45 6e  semblyName = "En
23990 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2c 20 22  tityFramework, "
239a0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
239b0 22 56 65 72 73 69 6f 6e 3d 36 2e 30 2e 30 2e 30  "Version=6.0.0.0
239c0 2c 20 43 75 6c 74 75 72 65 3d 6e 65 75 74 72 61  , Culture=neutra
239d0 6c 2c 20 50 75 62 6c 69 63 4b 65 79 54 6f 6b 65  l, PublicKeyToke
239e0 6e 3d 62 37 37 61 35 63 35 36 31 39 33 34 65 30  n=b77a5c561934e0
239f0 38 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  89";....        
23a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23a50 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
23a60 20 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56   string NameAndV
23a70 61 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30  alueFormat = "{0
23a80 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20  }: {1}";..      
23a90 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
23aa0 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75  string LogFileSu
23ab0 66 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a  ffix = ".log";..
23ac0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
23ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
23b20 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
23b30 67 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 46  g VsDevEnvSetupF
23b40 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31  ormat = "{0}: {1
23b50 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  }";....        /
23b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ba0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23bb0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
23bc0 73 74 72 69 6e 67 20 52 6f 6f 74 4b 65 79 4e 61  string RootKeyNa
23bd0 6d 65 20 3d 20 22 53 6f 66 74 77 61 72 65 22 3b  me = "Software";
23be0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
23bf0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 57  e const string W
23c00 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3d  ow64SubKeyName =
23c10 20 22 57 6f 77 36 34 33 32 4e 6f 64 65 22 3b 0d   "Wow6432Node";.
23c20 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
23c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
23c80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
23c90 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d  E: The .NET Fram
23ca0 65 77 6f 72 6b 20 68 61 73 20 62 6f 74 68 20 33  ework has both 3
23cb0 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
23cc0 20 65 64 69 74 69 6f 6e 73 2e 0d 0a 20 20 20 20   editions...    
23cd0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
23ce0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
23cf0 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74  eadonly bool Net
23d00 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20  FxIs32BitOnly = 
23d10 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
23d20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23d70 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
23d80 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f   // NOTE: For no
23d90 77 2c 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  w, Visual Studio
23da0 20 69 73 20 61 6c 77 61 79 73 20 61 20 33 32 2d   is always a 32-
23db0 62 69 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e  bit application.
23dc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
23dd0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
23de0 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f  atic readonly bo
23df0 6f 6c 20 56 73 49 73 33 32 42 69 74 4f 6e 6c 79  ol VsIs32BitOnly
23e00 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
23e10 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23e60 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
23e70 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73  tatic readonly s
23e80 74 72 69 6e 67 20 56 73 49 64 46 6f 72 6d 61 74  tring VsIdFormat
23e90 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20   = "B";....     
23ea0 20 20 20 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 2f 2f  ////////////////
23ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23ef0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
23f00 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
23f10 72 69 6e 67 20 58 50 61 74 68 46 6f 72 41 64 64  ring XPathForAdd
23f20 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20  Element =..     
23f30 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72         "configur
23f40 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74  ation/system.dat
23f50 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  a/DbProviderFact
23f60 6f 72 69 65 73 2f 61 64 64 5b 40 69 6e 76 61 72  ories/add[@invar
23f70 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d  iant=\"{0}\"]";.
23f80 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
23f90 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
23fa0 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46  ly string XPathF
23fb0 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20  orRemoveElement 
23fc0 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  =..            "
23fd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79  configuration/sy
23fe0 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76  stem.data/DbProv
23ff0 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f 72 65  iderFactories/re
24000 6d 6f 76 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d  move[@invariant=
24010 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20  \"{0}\"]";..    
24020 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
24030 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24080 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
24090 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61  gion Private Sta
240a0 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20  tic Data..      
240b0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
240c0 20 41 73 73 65 6d 62 6c 79 20 74 68 69 73 41 73   Assembly thisAs
240d0 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c  sembly = Assembl
240e0 79 2e 47 65 74 45 78 65 63 75 74 69 6e 67 41 73  y.GetExecutingAs
240f0 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  sembly();....   
24100 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
24110 74 69 63 20 73 74 72 69 6e 67 20 74 72 61 63 65  tic string trace
24120 43 61 74 65 67 6f 72 79 20 3d 20 50 61 74 68 2e  Category = Path.
24130 47 65 74 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20  GetFileName(..  
24140 20 20 20 20 20 20 20 20 20 20 74 68 69 73 41 73            thisAs
24150 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29  sembly.Location)
24160 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 6d 65 20  ; /* NOTE: Same 
24170 66 6f 72 20 64 65 62 75 67 20 61 6e 64 20 74 72  for debug and tr
24180 61 63 65 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  ace. */....     
24190 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
241a0 63 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  c TraceCallback 
241b0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20  debugCallback = 
241c0 41 70 70 44 65 62 75 67 3b 0d 0a 20 20 20 20 20  AppDebug;..     
241d0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
241e0 63 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  c TraceCallback 
241f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20  traceCallback = 
24200 41 70 70 54 72 61 63 65 3b 0d 0a 0d 0a 20 20 20  AppTrace;....   
24210 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
24220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24260 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24270 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 73 79  static string sy
24280 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20  stemDirectory = 
24290 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  null;....#if WIN
242a0 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 70 72  DOWS..        pr
242b0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
242c0 69 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74  ing systemDirect
242d0 6f 72 79 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b  oryWow64 = null;
242e0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
242f0 20 20 20 20 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 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
24340 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
24350 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73 43  tatic int filesC
24360 72 65 61 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20  reated = 0;..   
24370 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
24380 74 69 63 20 69 6e 74 20 66 69 6c 65 73 4d 6f 64  tic int filesMod
24390 69 66 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  ified = 0;..    
243a0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
243b0 69 63 20 69 6e 74 20 66 69 6c 65 73 44 65 6c 65  ic int filesDele
243c0 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ted = 0;..      
243d0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
243e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
243f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24430 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
24440 6f 6e 20 54 72 61 63 65 20 48 61 6e 64 6c 69 6e  on Trace Handlin
24450 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
24460 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
24470 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28   GetLogFileName(
24480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
24490 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 0d 0a 20  ring typeName.. 
244a0 20 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20             ) /* 
244b0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
244c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
244d0 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
244e0 20 3d 20 50 61 74 68 2e 47 65 74 54 65 6d 70 46   = Path.GetTempF
244f0 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20  ileName();..    
24500 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
24510 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e  irectory = Path.
24520 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65  GetDirectoryName
24530 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  (fileName);..   
24540 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
24550 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50  fileNameOnly = P
24560 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57  ath.GetFileNameW
24570 69 74 68 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28  ithoutExtension(
24580 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
24590 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
245a0 20 6e 65 77 46 69 6c 65 4e 61 6d 65 20 3d 20 50   newFileName = P
245b0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
245c0 63 74 6f 72 79 2c 20 53 74 72 69 6e 67 2e 46 6f  ctory, String.Fo
245d0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
245e0 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32         "{0}{1}{2
245f0 7d 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  }", traceCategor
24600 79 2c 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  y, !String.IsNul
24610 6c 4f 72 45 6d 70 74 79 28 74 79 70 65 4e 61 6d  lOrEmpty(typeNam
24620 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  e) ?..          
24630 20 20 20 20 20 20 20 20 20 20 22 2e 22 20 2b 20            "." + 
24640 74 79 70 65 4e 61 6d 65 20 3a 20 53 74 72 69 6e  typeName : Strin
24650 67 2e 45 6d 70 74 79 2c 20 22 2e 22 20 2b 20 66  g.Empty, "." + f
24660 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20  ileNameOnly +.. 
24670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24680 20 20 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78     LogFileSuffix
24690 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
246a0 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28 66 69 6c     File.Move(fil
246b0 65 4e 61 6d 65 2c 20 6e 65 77 46 69 6c 65 4e 61  eName, newFileNa
246c0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
246d0 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 46 69      return newFi
246e0 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
246f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
24700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24740 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24750 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
24760 76 6f 69 64 20 41 70 70 44 65 62 75 67 28 0d 0a  void AppDebug(..
24770 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
24780 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
24790 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
247a0 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
247b0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
247c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
247d0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 43 6f  TraceOps.DebugCo
247e0 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  re(String.Format
247f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
24800 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
24810 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70  gFormat, TraceOp
24820 73 2e 4e 65 78 74 44 65 62 75 67 49 64 28 29 2c  s.NextDebugId(),
24830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24840 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53    TraceOps.TimeS
24850 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74  tamp(DateTime.Ut
24860 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c  cNow), message),
24870 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
24880 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24890 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
248a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
248e0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
248f0 74 69 63 20 76 6f 69 64 20 41 70 70 54 72 61 63  tic void AppTrac
24900 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
24910 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
24920 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
24930 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
24940 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
24950 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24960 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
24970 63 65 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f  ceCore(String.Fo
24980 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
24990 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
249a0 54 72 61 63 65 46 6f 72 6d 61 74 2c 20 54 72 61  TraceFormat, Tra
249b0 63 65 4f 70 73 2e 4e 65 78 74 54 72 61 63 65 49  ceOps.NextTraceI
249c0 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d(),..          
249d0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
249e0 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d  imeStamp(DateTim
249f0 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61  e.UtcNow), messa
24a00 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  ge), category);.
24a10 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
24a20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
24a30 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
24a80 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
24a90 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 50 6c 61  gion Generic Pla
24aa0 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a  tform Handling..
24ab0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24ac0 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 36 34  static bool Is64
24ad0 42 69 74 50 72 6f 63 65 73 73 28 29 0d 0a 20 20  BitProcess()..  
24ae0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24af0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
24b00 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65       // NOTE: Re
24b10 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 74 68  turns true if th
24b20 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
24b30 73 20 69 73 20 36 34 2d 62 69 74 2e 20 20 49 66  s is 64-bit.  If
24b40 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20   this..         
24b50 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 74     //       is t
24b60 72 75 65 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20 74  rue, we *know* t
24b70 68 61 74 20 77 65 20 6d 75 73 74 20 62 65 20 72  hat we must be r
24b80 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62  unning on a 64-b
24b90 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  it..            
24ba0 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74 69  //       operati
24bb0 6e 67 20 73 79 73 74 65 6d 20 61 73 20 77 65 6c  ng system as wel
24bc0 6c 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20  l.  However, if 
24bd0 74 68 69 73 20 69 73 20 66 61 6c 73 65 2c 20 77  this is false, w
24be0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  e..            /
24bf0 2f 20 20 20 20 20 20 20 64 6f 20 6e 6f 74 20 6e  /       do not n
24c00 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
24c10 74 68 61 74 20 77 65 20 61 72 65 20 72 75 6e 6e  that we are runn
24c20 69 6e 67 20 6f 6e 20 61 20 33 32 2d 62 69 74 0d  ing on a 32-bit.
24c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
24c40 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20        operating 
24c50 73 79 73 74 65 6d 2c 20 64 75 65 20 74 6f 20 57  system, due to W
24c60 6f 57 36 34 20 28 57 69 6e 33 32 2d 6f 6e 2d 57  oW64 (Win32-on-W
24c70 69 6e 36 34 29 2c 20 65 74 63 2e 0d 0a 20 20 20  in64), etc...   
24c80 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
24c90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24ca0 28 49 6e 74 50 74 72 2e 53 69 7a 65 20 3d 3d 20  (IntPtr.Size == 
24cb0 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f  sizeof(long)); /
24cc0 2f 20 4e 4f 54 45 3a 20 50 6f 69 6e 74 65 72 20  / NOTE: Pointer 
24cd0 69 73 20 36 34 2d 62 69 74 73 3f 0d 0a 20 20 20  is 64-bits?..   
24ce0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24cf0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
24d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
24d40 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
24d50 74 69 63 20 62 6f 6f 6c 20 49 73 53 75 70 70 6f  tic bool IsSuppo
24d60 72 74 65 64 52 6f 6f 74 4b 65 79 28 0d 0a 20 20  rtedRootKey(..  
24d70 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
24d80 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c  gistry registry,
24d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
24da0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
24db0 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  otKey..         
24dc0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
24dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
24de0 75 72 6e 20 4f 62 6a 65 63 74 2e 52 65 66 65 72  urn Object.Refer
24df0 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b  enceEquals(rootK
24e00 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75 72  ey, registry.Cur
24e10 72 65 6e 74 55 73 65 72 29 20 7c 7c 0d 0a 20 20  rentUser) ||..  
24e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 62                Ob
24e30 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
24e40 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65  uals(rootKey, re
24e50 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
24e60 69 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ine);..        }
24e70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
24e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ec0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
24ed0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
24ee0 72 69 6e 67 20 47 65 74 52 6f 6f 74 4b 65 79 4e  ring GetRootKeyN
24ef0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
24f00 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
24f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
24f20 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
24f30 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
24f40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
24f50 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
24f60 2f 20 42 55 47 46 49 58 3a 20 41 70 70 61 72 65  / BUGFIX: Appare
24f70 6e 74 6c 79 2c 20 74 68 65 20 70 65 72 2d 75 73  ntly, the per-us
24f80 65 72 20 72 65 67 69 73 74 72 79 20 68 69 76 65  er registry hive
24f90 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 0d 0a 20   does not use.. 
24fa0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
24fb0 20 20 20 20 20 20 74 68 65 20 22 57 6f 77 36 34        the "Wow64
24fc0 33 32 4e 6f 64 65 22 20 6e 6f 64 65 20 74 6f 20  32Node" node to 
24fd0 73 74 6f 72 65 20 73 65 74 74 69 6e 67 73 20 66  store settings f
24fe0 6f 72 20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20  or 32-bit..     
24ff0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
25000 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72    applications r
25010 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62  unning on a 64-b
25020 69 74 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  it operating sys
25030 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  tem...          
25040 20 20 2f 2f 20 20 20 20 20 20 20 20 20 54 69 63    //         Tic
25050 6b 65 74 20 5b 61 30 36 37 37 33 30 39 66 30 5d  ket [a0677309f0]
25060 20 68 61 73 20 66 75 72 74 68 65 72 20 64 65 74   has further det
25070 61 69 6c 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  ails...         
25080 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
25090 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
250a0 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22  .Format("{0}{1}"
250b0 2c 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a  , RootKeyName,..
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250d0 21 70 65 72 55 73 65 72 20 26 26 20 77 6f 77 36  !perUser && wow6
250e0 34 20 26 26 20 49 73 36 34 42 69 74 50 72 6f 63  4 && Is64BitProc
250f0 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20 20 20  ess() ?..       
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 5c               "\\
25110 22 20 2b 20 57 6f 77 36 34 53 75 62 4b 65 79 4e  " + Wow64SubKeyN
25120 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70  ame : String.Emp
25130 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ty);..        }.
25140 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
25150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25190 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
251a0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
251b0 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44 69 72  ing GetSystemDir
251c0 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
251d0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
251e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
251f0 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57          {..#if W
25200 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20  INDOWS..        
25210 20 20 20 20 69 66 20 28 77 6f 77 36 34 29 0d 0a      if (wow64)..
25220 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25240 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f  f (systemDirecto
25250 72 79 57 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c 29  ryWow64 == null)
25260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25270 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25280 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 44           systemD
25290 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 0d  irectoryWow64 =.
252a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
252b0 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
252c0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74  ativeMethods.Get
252d0 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28  SystemDirectory(
252e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
252f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25300 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25310 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57  systemDirectoryW
25320 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20  ow64;..         
25330 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25340 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a    else..#endif..
25350 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25370 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f  f (systemDirecto
25380 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
25390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253a0 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
253b0 20 3d 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53   = Environment.S
253c0 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d  ystemDirectory;.
253d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
253e0 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d     return system
253f0 44 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20  Directory;..    
25400 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
25410 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
25420 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
25430 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
25440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25480 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47         #region G
25490 65 6e 65 72 69 63 20 53 74 72 69 6e 67 20 48 61  eneric String Ha
254a0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
254b0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
254c0 74 72 69 6e 67 20 46 6f 72 44 69 73 70 6c 61 79  tring ForDisplay
254d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  (..            o
254e0 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20  bject value..   
254f0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
25500 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25510 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
25520 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
25530 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
25540 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20  null>";....     
25550 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65         string re
25560 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  sult;..         
25570 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 76     Type type = v
25580 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d  alue.GetType();.
25590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
255a0 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f  f (type == typeo
255b0 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a  f(XmlElement))..
255c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
255d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58                 X
255e0 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e  mlElement elemen
255f0 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29  t = (XmlElement)
25600 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
25610 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
25620 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72   = element.Outer
25630 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Xml;..          
25640 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
25650 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d   else if (type =
25660 3d 20 74 79 70 65 6f 66 28 56 65 72 73 69 6f 6e  = typeof(Version
25670 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
25680 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25690 20 20 20 56 65 72 73 69 6f 6e 20 76 65 72 73 69     Version versi
256a0 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e 29 76 61  on = (Version)va
256b0 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
256c0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
256d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
256e0 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b  v{0}", version);
256f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25700 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
25710 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79  e if (type == ty
25720 70 65 6f 66 28 50 72 6f 63 65 73 73 53 74 61 72  peof(ProcessStar
25730 74 49 6e 66 6f 29 29 0d 0a 20 20 20 20 20 20 20  tInfo))..       
25740 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25750 20 20 20 20 20 20 20 20 50 72 6f 63 65 73 73 53          ProcessS
25760 74 61 72 74 49 6e 66 6f 20 73 74 61 72 74 49 6e  tartInfo startIn
25770 66 6f 20 3d 20 28 50 72 6f 63 65 73 73 53 74 61  fo = (ProcessSta
25780 72 74 49 6e 66 6f 29 76 61 6c 75 65 3b 0d 0a 0d  rtInfo)value;...
25790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
257a0 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67   result = String
257b0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
257c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
257d0 69 6c 65 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 61  ileName = {0}, a
257e0 72 67 75 6d 65 6e 74 73 20 3d 20 7b 31 7d 2c 20  rguments = {1}, 
257f0 77 6f 72 6b 69 6e 67 44 69 72 65 63 74 6f 72 79  workingDirectory
25800 20 3d 20 7b 32 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {2}, " +..   
25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25820 20 22 75 73 65 53 68 65 6c 6c 45 78 65 63 75 74   "useShellExecut
25830 65 20 3d 20 7b 33 7d 2c 20 72 65 64 69 72 65 63  e = {3}, redirec
25840 74 53 74 61 6e 64 61 72 64 4f 75 74 70 75 74 20  tStandardOutput 
25850 3d 20 7b 34 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  = {4}, " +..    
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25870 22 72 65 64 69 72 65 63 74 53 74 61 6e 64 61 72  "redirectStandar
25880 64 45 72 72 6f 72 20 3d 20 7b 35 7d 22 2c 20 46  dError = {5}", F
25890 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
258a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258b0 73 74 61 72 74 49 6e 66 6f 2e 46 69 6c 65 4e 61  startInfo.FileNa
258c0 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me), ForDisplay(
258d0 73 74 61 72 74 49 6e 66 6f 2e 41 72 67 75 6d 65  startInfo.Argume
258e0 6e 74 73 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nts),..         
258f0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
25900 73 70 6c 61 79 28 73 74 61 72 74 49 6e 66 6f 2e  splay(startInfo.
25910 57 6f 72 6b 69 6e 67 44 69 72 65 63 74 6f 72 79  WorkingDirectory
25920 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ), ForDisplay(..
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25940 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 55 73      startInfo.Us
25950 65 53 68 65 6c 6c 45 78 65 63 75 74 65 29 2c 20  eShellExecute), 
25960 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25980 20 73 74 61 72 74 49 6e 66 6f 2e 52 65 64 69 72   startInfo.Redir
25990 65 63 74 53 74 61 6e 64 61 72 64 4f 75 74 70 75  ectStandardOutpu
259a0 74 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  t), ForDisplay(.
259b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
259c0 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 52       startInfo.R
259d0 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 45  edirectStandardE
259e0 72 72 6f 72 29 29 3b 20 2f 2a 20 52 45 43 55 52  rror)); /* RECUR
259f0 53 49 56 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20  SIVE */..       
25a00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25a10 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70      else if (typ
25a20 65 20 3d 3d 20 74 79 70 65 6f 66 28 50 72 6f 63  e == typeof(Proc
25a30 65 73 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ess))..         
25a40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25a50 20 20 20 20 20 20 50 72 6f 63 65 73 73 20 70 72        Process pr
25a60 6f 63 65 73 73 20 3d 20 28 50 72 6f 63 65 73 73  ocess = (Process
25a70 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
25a80 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
25a90 74 20 3d 20 70 72 6f 63 65 73 73 2e 49 64 2e 54  t = process.Id.T
25aa0 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
25ab0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
25ac0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
25ad0 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 44  type == typeof(D
25ae0 61 74 61 52 65 63 65 69 76 65 64 45 76 65 6e 74  ataReceivedEvent
25af0 41 72 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  Args))..        
25b00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25b10 20 20 20 20 20 20 20 44 61 74 61 52 65 63 65 69         DataRecei
25b20 76 65 64 45 76 65 6e 74 41 72 67 73 20 65 76 65  vedEventArgs eve
25b30 6e 74 41 72 67 73 20 3d 20 28 44 61 74 61 52 65  ntArgs = (DataRe
25b40 63 65 69 76 65 64 45 76 65 6e 74 41 72 67 73 29  ceivedEventArgs)
25b50 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
25b60 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
25b70 20 3d 20 46 6f 72 44 69 73 70 6c 61 79 28 65 76   = ForDisplay(ev
25b80 65 6e 74 41 72 67 73 2e 44 61 74 61 29 3b 20 2f  entArgs.Data); /
25b90 2a 20 52 45 43 55 52 53 49 56 45 20 2a 2f 0d 0a  * RECURSIVE */..
25ba0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
25bb0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
25bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25be0 72 65 73 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54  result = value.T
25bf0 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20  oString();....  
25c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
25c10 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20   (result.Length 
25c20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
25c30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25c40 6e 20 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a  n "<empty>";....
25c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c60 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e  result = String.
25c70 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
25c80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
25c90 65 2e 49 73 53 75 62 63 6c 61 73 73 4f 66 28 74  e.IsSubclassOf(t
25ca0 79 70 65 6f 66 28 56 61 6c 75 65 54 79 70 65 29  ypeof(ValueType)
25cb0 29 20 3f 20 22 7b 30 7d 22 20 3a 20 22 5c 22 7b  ) ? "{0}" : "\"{
25cc0 30 7d 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20 20  0}\"",..        
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
25ce0 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lt);..          
25cf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25d00 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
25d10 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
25d20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
25d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
25d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
25d90 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20  region Assembly 
25da0 41 74 74 72 69 62 75 74 65 20 48 61 6e 64 6c 69  Attribute Handli
25db0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ng..        publ
25dc0 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
25dd0 20 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66   GetAssemblyConf
25de0 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20  iguration(..    
25df0 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
25e00 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
25e10 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
25e20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25e30 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d   if (assembly !=
25e40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25e50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25e60 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
25e70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e90 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e     if (assembly.
25ea0 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20  IsDefined(..    
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ec0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41          typeof(A
25ed0 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
25ee0 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 20  tionAttribute), 
25ef0 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20  false))..       
25f00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
25f30 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74  ConfigurationAtt
25f40 72 69 62 75 74 65 20 63 6f 6e 66 69 67 75 72 61  ribute configura
25f50 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20  tion =..        
25f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f70 20 20 20 20 28 41 73 73 65 6d 62 6c 79 43 6f 6e      (AssemblyCon
25f80 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62  figurationAttrib
25f90 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ute)..          
25fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fb0 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75    assembly.GetCu
25fc0 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d  stomAttributes(.
25fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ff0 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79   typeof(Assembly
26000 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74  ConfigurationAtt
26010 72 69 62 75 74 65 29 2c 0d 0a 20 20 20 20 20 20  ribute),..      
26020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26030 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 29            false)
26040 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [0];....        
26050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26060 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 75 72 61  return configura
26070 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72 61 74 69  tion.Configurati
26080 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
26090 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
260a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
260b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
260c0 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
260d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
260e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
260f0 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
26110 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26120 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
26130 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
26140 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26190 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
261a0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
261b0 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d   string GetAssem
261c0 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20 20 20  blyTitle(..     
261d0 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
261e0 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..      
261f0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
26200 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26210 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20  if (assembly != 
26220 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
26230 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26240 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
26250 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26270 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49    if (assembly.I
26280 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20  sDefined(..     
26290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262a0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
262b0 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
262c0 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a  bute), false))..
262d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
262f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
26300 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72  ssemblyTitleAttr
26310 69 62 75 74 65 20 74 69 74 6c 65 20 3d 0d 0a 20  ibute title =.. 
26320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26330 20 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65             (Asse
26340 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75  mblyTitleAttribu
26350 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
26360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26370 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73   assembly.GetCus
26380 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a  tomAttributes(..
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263b0 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54  typeof(AssemblyT
263c0 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20  itleAttribute), 
263d0 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20  false)[0];....  
263e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 69 74        return tit
26400 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20 20 20  le.Title;..     
26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26430 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26440 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
26450 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26470 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
26480 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26490 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
264a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
264b0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
264c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
264d0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
264e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
264f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26530 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
26540 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77  gion .NET Framew
26550 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ork Handling..  
26560 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
26570 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46  atic string GetF
26580 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e  rameworkRootKeyN
26590 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
265a0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
265b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
265c0 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
265d0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
265e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
265f0 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
26600 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73  mat("{0}\\Micros
26610 6f 66 74 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f  oft\\.NETFramewo
26620 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rk",..          
26630 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79        GetRootKey
26640 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f  Name(perUser, wo
26650 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  w64));..        
26660 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
26670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
266c0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
266d0 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f  tring GetFramewo
266e0 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rkKeyName(..    
266f0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
26700 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
26710 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
26720 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
26730 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
26740 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
26750 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
26760 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
26770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
26780 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
26790 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
267a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
267b0 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d   string format =
267c0 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
267d0 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e  rEmpty(platformN
267e0 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ame) ?..        
267f0 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69          "{0}\\Mi
26800 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b  crosoft\\{1}\\v{
26810 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20  2}\\{3}" :..    
26820 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
26830 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
26840 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20  \\v{2}";....    
26850 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
26860 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72  tring.Format(for
26870 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e  mat, GetRootKeyN
26880 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77  ame(perUser, wow
26890 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
268a0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
268b0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
268c0 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
268d0 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ame);..        }
268e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
268f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26930 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
26940 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
26950 72 69 6e 67 20 47 65 74 49 6d 61 67 65 52 75 6e  ring GetImageRun
26960 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
26970 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
26980 20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20   fileName..     
26990 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
269a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
269b0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
269c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
269d0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
269e0 73 65 6d 62 6c 79 20 3d 0d 0a 20 20 20 20 20 20  sembly =..      
269f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
26a00 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f  sembly.Reflectio
26a10 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 66 69  nOnlyLoadFrom(fi
26a20 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
26a30 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w */....        
26a40 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
26a50 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly != null).. 
26a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a70 20 20 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62     return assemb
26a80 6c 79 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  ly.ImageRuntimeV
26a90 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ersion;..       
26aa0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26ab0 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
26ac0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26ad0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
26ae0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
26af0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26b00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
26b10 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
26b20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
26b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b70 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
26b80 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
26b90 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44  ng GetFrameworkD
26ba0 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
26bb0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
26bc0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
26bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
26be0 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
26bf0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
26c00 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
26c10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
26c20 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
26c30 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
26c40 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
26c50 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
26c60 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
26c70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26c80 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
26c90 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
26ca0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
26cb0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
26cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cd0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74 46     rootKey, GetF
26ce0 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e  rameworkRootKeyN
26cf0 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77  ame(perUser, wow
26d00 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
26d10 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c            false,
26d20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
26d30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
26d40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26d50 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
26d60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
26d70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26d80 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
26d90 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
26da0 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79  value = Registry
26db0 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28  Helper.GetValue(
26dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26dd0 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74        key, "Inst
26de0 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20  allRoot", null, 
26df0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
26e00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26e10 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65       if (!(value
26e20 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20   is string))..  
26e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e40 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
26e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26e60 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e 43 6f    return Path.Co
26e70 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
26e80 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72              (str
26e90 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 69 6e  ing)value, Strin
26ea0 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
26eb0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
26ec0 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n));..          
26ed0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
26ee0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
26ef0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
26f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f40 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
26f50 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61   #region Per-Fra
26f60 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20  mework/Platform 
26f70 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
26f80 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
26f90 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
26fa0 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a  FrameworkList(..
26fb0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
26fc0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
26fd0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
26fe0 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
26ff0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
27000 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
27010 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
27020 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20  ameworkList..   
27030 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
27040 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27050 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
27060 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
27070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
27080 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e  rameworkList = n
27090 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ew FrameworkList
270a0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
270b0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
270c0 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20  List.RootKey == 
270d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
270e0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
270f0 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72  List.RootKey = r
27100 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
27110 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
27160 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
27170 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
27180 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
27190 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
271a0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
271b0 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
271c0 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
271d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
271e0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
271f0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
27200 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
27210 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
27220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27230 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
27240 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
27250 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d  TFramework");...
27260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27270 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
27280 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
27290 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
272a0 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
272b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
272c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272d0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
272e0 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43  Names.Add(".NETC
272f0 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
27300 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
27310 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
27320 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
27330 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
27340 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
27350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
27360 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
27370 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
27380 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
27390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
273b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
273c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27400 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
27410 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
27420 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
27430 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
27440 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27450 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
27460 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20  List.Versions = 
27470 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29  new VersionMap()
27480 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27490 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
274a0 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
274b0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
274c0 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
274e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
274f0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
27500 74 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e  t desktopVersion
27510 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69  List = new Versi
27520 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  onList();....   
27530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27540 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
27550 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
27560 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
27570 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20  oNetFx20)..     
27580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27590 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
275a0 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
275b0 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32  rsion(2, 0, 5072
275c0 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  7));....        
275d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
275e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275f0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65      // NOTE: The
27600 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
27610 33 2e 35 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  3.5 does not hav
27620 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20  e its own..     
27630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
27640 2f 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72  /       director
27650 79 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 73  y; however, it s
27660 74 69 6c 6c 20 6d 61 79 20 68 61 76 65 20 61 73  till may have as
27670 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
27680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
27690 20 20 20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72       folders for
276a0 20 75 73 65 20 69 6e 20 56 69 73 75 61 6c 20 53   use in Visual S
276b0 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20  tudio, etc...   
276c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
276e0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
276f0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
27700 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
27710 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 33 35  ration.NoNetFx35
27720 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27730 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
27740 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  opVersionList.Ad
27750 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 2c  d(new Version(3,
27760 20 35 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   5));....       
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
27780 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
27790 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
277a0 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74  figuration.NoNet
277b0 46 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20  Fx40)..         
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
277d0 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
277e0 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
277f0 6e 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b  n(4, 0, 30319));
27800 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27810 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27830 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45  // NOTE: The .NE
27840 54 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 20  T Framework 4.5 
27850 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74  does not have it
27860 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20  s own..         
27870 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
27880 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68      directory; h
27890 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c  owever, it still
278a0 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d 62   may have assemb
278b0 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
278c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
278d0 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65   folders for use
278e0 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69   in Visual Studi
278f0 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20  o, etc...       
27900 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
27910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27920 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
27930 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
27940 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
27950 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 29 0d 0a 20  on.NoNetFx45).. 
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27970 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65         desktopVe
27980 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
27990 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c 20  w Version(4, 5, 
279a0 35 30 37 30 39 29 29 3b 0d 0a 0d 0a 20 20 20 20  50709));....    
279b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
279d0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
279e0 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   The .NET Framew
279f0 6f 72 6b 20 34 2e 35 2e 31 20 64 6f 65 73 20 6e  ork 4.5.1 does n
27a00 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d  ot have its own.
27a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69       //       di
27a30 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72  rectory; however
27a40 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68  , it still may h
27a50 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ave assembly..  
27a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a70 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65    //       folde
27a80 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69  rs for use in Vi
27a90 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63  sual Studio, etc
27aa0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27ab0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27ad0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
27ae0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
27af0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
27b00 65 74 46 78 34 35 31 29 0d 0a 20 20 20 20 20 20  etFx451)..      
27b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
27b30 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
27b40 73 69 6f 6e 28 34 2c 20 35 2c 20 31 29 29 3b 0d  sion(4, 5, 1));.
27b50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27b60 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
27b70 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
27b80 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  d(".NETFramework
27b90 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
27bb0 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b  topVersionList);
27bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27bd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27be0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
27bf0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
27c00 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
27c10 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
27c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27c30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27c40 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
27c50 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  kList.Versions.A
27c60 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
27c70 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20  ramework",..    
27c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c90 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c      new VersionL
27ca0 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b  ist(new Version[
27cb0 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
27cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
27cd0 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30   Version(2, 0, 0
27ce0 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f  , 0), new Versio
27cf0 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20  n(3, 5, 0, 0).. 
27d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d10 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20     }));..       
27d20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
27d30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27d40 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
27d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
27d90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27da0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
27db0 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e  atformNames == n
27dc0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
27dd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27de0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
27df0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
27e00 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
27e10 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
27e20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
27e30 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
27e40 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
27e50 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29  ation.NoDesktop)
27e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27e70 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
27e80 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
27e90 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a  s.Add(null);....
27ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27eb0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
27ec0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
27ed0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
27ee0 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  Compact)..      
27ef0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f10 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
27f20 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
27f30 28 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20  ("PocketPC");.. 
27f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f50 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
27f60 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41  .PlatformNames.A
27f70 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22 29  dd("Smartphone")
27f80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27f90 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
27fa0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
27fb0 65 73 2e 41 64 64 28 22 57 69 6e 64 6f 77 73 43  es.Add("WindowsC
27fc0 45 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  E");..          
27fd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27fe0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
27ff0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
28000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28040 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
28050 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
28060 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72  ool HaveFramewor
28070 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20  kDirectory(..   
28080 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
28090 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
280a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
280b0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
280c0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
280d0 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
280e0 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
280f0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
28100 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
28110 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
28120 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
28130 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
28140 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
28150 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
28160 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
28170 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
28180 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 69      ref string i
28190 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d  nstallDirectory.
281a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
281b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
281c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
281d0 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65  yName = GetFrame
281e0 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  workKeyName(..  
281f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
28200 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
28210 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
28220 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72  latformName, per
28230 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
28240 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a         wow64);..
28250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
28260 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
28270 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
28280 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
28290 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
282a0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
282b0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
282c0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
282d0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
282e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
282f0 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
28300 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
28310 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28320 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
28330 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
28340 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d  (platformName !=
28350 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20   null) // NOTE: 
28360 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70  Skip non-desktop
28370 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28380 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
28390 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
283a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
283b0 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61  rectory = GetFra
283c0 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
283d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
283e0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
283f0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
28400 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
28410 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
28420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
28430 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
28440 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
28450 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
28460 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d  pty(directory)).
28470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28480 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
28490 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
284a0 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63        if (!Direc
284b0 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65  tory.Exists(dire
284c0 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
284d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
284e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
284f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
28500 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
28510 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
28520 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20  ty.Lower,..     
28530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
28540 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
28550 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
28560 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
28570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28580 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
28590 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61 20 64   {0} found via d
285a0 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d  irectory {1}.",.
285b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
285c0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
285d0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
285e0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69  ), ForDisplay(di
285f0 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20  rectory)),..    
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28610 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
28620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28630 20 20 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74     installDirect
28640 6f 72 79 20 3d 20 64 69 72 65 63 74 6f 72 79 3b  ory = directory;
28650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28660 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
28670 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
28680 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28690 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
286a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
286e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
286f0 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46  tatic bool HaveF
28700 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79  rameworkRegistry
28710 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
28720 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
28730 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
28740 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
28750 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
28760 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
28770 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
28780 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
28790 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
287a0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
287b0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
287c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
287d0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
287e0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
287f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
28800 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
28810 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
28820 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28830 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
28840 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  e = GetFramework
28850 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
28860 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
28870 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
28880 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
28890 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72  ormName, perUser
288a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
288b0 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20     wow64);....  
288c0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
288d0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
288e0 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
288f0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
28900 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28910 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
28920 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
28930 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
28940 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
28950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28960 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
28970 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
28980 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
28990 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
289a0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61           if (pla
289b0 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c  tformName != nul
289c0 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70  l) // NOTE: Skip
289d0 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20   non-desktop... 
289e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289f0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
28a00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28a10 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
28a20 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
28a30 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
28a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a50 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
28a60 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
28a70 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
28a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a90 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
28aa0 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20  ework {0} found 
28ab0 76 69 61 20 72 65 67 69 73 74 72 79 20 7b 31 7d  via registry {1}
28ac0 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
28ad0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
28ae0 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
28af0 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61  sion), ForDispla
28b00 79 28 6b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20  y(keyName)),..  
28b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
28b30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28b40 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
28b50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28b60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
28b70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
28b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28bc0 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
28bd0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
28be0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
28bf0 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
28c00 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
28c10 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f  l ForEachFramewo
28c20 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20  rkConfig(..     
28c30 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
28c40 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20  try registry,.. 
28c50 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
28c60 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f  workList framewo
28c70 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20  rkList,..       
28c80 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f       FrameworkCo
28c90 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c  nfigCallback cal
28ca0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
28cb0 20 20 20 20 73 74 72 69 6e 67 20 76 65 72 73 69      string versi
28cc0 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74  on, /* NOTE: Opt
28cd0 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20  ional. */..     
28ce0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
28cf0 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
28d00 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
28d10 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
28d20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69  string descripti
28d30 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
28d40 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65   string typeName
28d50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ,..            A
28d60 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65  ssemblyName asse
28d70 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  mblyName,..     
28d80 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
28d90 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
28da0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
28db0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
28dc0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
28dd0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
28de0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
28df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
28e00 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
28e10 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
28e20 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
28e30 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64    ref bool saved
28e40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
28e50 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
28e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
28e70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28e80 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73         if (regis
28e90 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  try == null)..  
28ea0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
28ec0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65  or = "invalid re
28ed0 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20  gistry";..      
28ee0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28ef0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
28f00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28f10 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
28f20 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  orkList == null)
28f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f50 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
28f60 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74  d framework list
28f70 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
28f80 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
28f90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28fa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28fb0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
28fc0 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77  rootKey = framew
28fd0 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b  orkList.RootKey;
28fe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28ff0 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
29000 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
29010 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29020 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
29030 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b  valid root key";
29040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29050 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
29060 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
29080 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f   (!IsSupportedRo
29090 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20  otKey(registry, 
290a0 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20  rootKey))..     
290b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
290c0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
290d0 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74  = "root key must
290e0 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20   be per-user or 
290f0 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20  per-machine";.. 
29100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29110 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
29120 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
29130 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
29140 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
29150 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
29160 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29170 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
29180 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72  r = "no framewor
29190 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  k names found";.
291a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
291b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
291c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
291d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
291e0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  (frameworkList.V
291f0 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
29200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29220 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61   error = "no fra
29230 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20  mework versions 
29240 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
29250 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29260 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
29270 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29280 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
29290 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
292a0 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
292b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
292d0 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f  ror = "no platfo
292e0 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rm names found";
292f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29300 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
29310 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
29330 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
29340 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66  Names.Count != f
29350 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
29360 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74  tformNames.Count
29370 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29390 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
293a0 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f  .Format("framewo
293b0 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30  rk name count {0
293c0 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a  } does not " +..
293d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293e0 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66      "match platf
293f0 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  orm name count {
29400 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  1}", frameworkLi
29410 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d  st.Names.Count,.
29420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29430 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
29440 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
29450 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  .Count);....    
29460 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
29470 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
29480 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29490 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
294a0 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
294b0 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  x < frameworkLis
294c0 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69  t.Names.Count; i
294d0 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20  ndex++)..       
294e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
294f0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
29500 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
29510 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61  OTE: Grab the na
29520 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77  me of the framew
29530 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46  ork (e.g. ".NETF
29540 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20  ramework")..    
29550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
29560 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d       and the nam
29570 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72  e of the platfor
29580 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73  m (e.g. "Windows
29590 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  CE")...         
295a0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
295b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
295c0 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20  g frameworkName 
295d0 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
295e0 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20  Names[index];.. 
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
29600 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
29610 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  me = frameworkLi
29620 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
29630 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20  [index];....    
29640 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
29650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29660 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c  // NOTE: Skip al
29670 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72  l non-desktop fr
29680 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20 69  ameworks (i.e. i
29690 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a  f the platform..
296a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296b0 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20 69 73  //       name is
296c0 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20   not null)...   
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
296e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
296f0 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d   if (platformNam
29700 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
29710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29720 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
29730 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
29740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29750 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
29760 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72  he supported ver
29770 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61  sions of this pa
29780 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20  rticular..      
29790 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
297a0 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20     framework... 
297b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
297c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
297d0 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66     VersionList f
297e0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
297f0 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
29800 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73          if (vers
29810 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion != null)..  
29820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
29830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29840 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
29850 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
29860 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65  NOTE: Manual ove
29870 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e  rride of the *ON
29880 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  E* framework ver
29890 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
298a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
298b0 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a     to process...
298c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
298e0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
298f0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
29900 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
29910 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  st();..         
29920 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
29930 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e  workVersionList.
29940 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
29950 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20  version));..    
29960 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
29970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
29980 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
29990 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
299a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
299b0 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  !frameworkList.V
299c0 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61  ersions.TryGetVa
299d0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
299e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299f0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
29a00 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65   out frameworkVe
29a10 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20  rsionList) ||.. 
29a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a30 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72         (framewor
29a40 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20  kVersionList == 
29a50 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
29a60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a80 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
29a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29aa0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
29ab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
29ad0 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66  reach (Version f
29ae0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
29af0 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  in frameworkVers
29b00 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20  ionList)..      
29b10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b30 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
29b40 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
29b50 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
29b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b70 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
29b80 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
29b90 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
29ba0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
29bb0 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61              "fra
29bc0 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d  meworkName = {0}
29bd0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
29be0 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20  on = {1}, " +.. 
29bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c00 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d         "platform
29c10 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72  Name = {2}", For
29c20 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
29c30 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  kName),..       
29c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c50 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
29c60 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
29c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c80 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
29c90 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ay(platformName)
29ca0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
29cb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
29cc0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
29cd0 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72   installDirector
29ce0 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  y = null;....   
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 69 66 20 28 21 48 61 76 65 46 72 61 6d 65 77   if (!HaveFramew
29d10 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  orkDirectory(.. 
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d30 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
29d40 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
29d50 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
29d60 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
29d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d80 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20    platformName, 
29d90 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
29da0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
29db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29dd0 66 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f  f installDirecto
29de0 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
29df0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e10 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
29e20 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
29e30 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a  ePriority.Low,..
29e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e50 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
29e60 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
29e70 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
29e80 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
29e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ea0 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
29eb0 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74  ework {0} direct
29ec0 6f 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 22  ory not found, "
29ed0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
29ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ef0 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46  "skipping...", F
29f00 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
29f10 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  orkVersion)),.. 
29f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
29f40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
29f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f60 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
29f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29f80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
29fa0 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75   (callback == nu
29fb0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
29fd0 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
29fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
29ff0 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
2a000 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72   installDirector
2a010 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
2a020 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
2a030 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
2a040 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ty(directory))..
2a050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a060 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2a080 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2a090 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2a0a0 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0c0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2a0d0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2a0e0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
2a0f0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a110 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
2a120 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 69 73  {0} directory is
2a130 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d 0a 20   invalid, " +.. 
2a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a150 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70             "skip
2a160 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73  ping...", ForDis
2a170 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
2a180 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
2a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2a1b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1d0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
2a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a200 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f           directo
2a210 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  ry = Path.Combin
2a220 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 43 6f  e(directory, "Co
2a230 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  nfig");....     
2a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2a250 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78  f (!Directory.Ex
2a260 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29 29  ists(directory))
2a270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a280 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2a0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2a2b0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2a2c0 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
2a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2e0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2a2f0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2a300 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2a310 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a330 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
2a340 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20  k {0} directory 
2a350 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b  {1} does not " +
2a360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65                "e
2a380 78 69 73 74 2c 20 73 6b 69 70 70 69 6e 67 2e 2e  xist, skipping..
2a390 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
2a3a0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
2a3b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
2a3d0 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74  orDisplay(direct
2a3e0 6f 72 79 29 29 2c 20 74 72 61 63 65 43 61 74 65  ory)), traceCate
2a3f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a410 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
2a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a430 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a440 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2a450 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68   fileName = Path
2a460 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
2a470 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e 63 6f 6e  ry, "machine.con
2a480 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fig");....      
2a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a4a0 20 28 21 46 69 6c 65 2e 45 78 69 73 74 73 28 66   (!File.Exists(f
2a4b0 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
2a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2a4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a4e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2a4f0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2a500 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
2a510 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
2a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a530 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2a540 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2a550 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a570 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
2a580 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66   Framework {0} f
2a590 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74  ile {1} does not
2a5a0 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a 20 20 20   exist, " +..   
2a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5c0 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69           "skippi
2a5d0 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c  ng...", ForDispl
2a5e0 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
2a5f0 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
2a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a610 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 69     ForDisplay(fi
2a620 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  leName)), traceC
2a630 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
2a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a650 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
2a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a670 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a680 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
2a690 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 66  l localSaved = f
2a6a0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
2a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2a6c0 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20  (!callback(..   
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6e0 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
2a6f0 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61  e, invariant, na
2a700 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  me, description,
2a710 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
2a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a730 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79          assembly
2a740 4e 61 6d 65 2c 20 69 6e 73 74 61 6c 6c 44 69 72  Name, installDir
2a750 65 63 74 6f 72 79 2c 20 63 6c 69 65 6e 74 44 61  ectory, clientDa
2a760 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
2a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a780 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
2a790 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2a7a0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2a7b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a7d0 65 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c 20 72  ef localSaved, r
2a7e0 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
2a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a800 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a810 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a820 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2a840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a850 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
2a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2a870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a880 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f            if (lo
2a890 63 61 6c 53 61 76 65 64 20 26 26 20 21 73 61 76  calSaved && !sav
2a8a0 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8c0 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
2a8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a8e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
2a8f0 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
2a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a910 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2a920 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2a930 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
2a940 0d 0a 20 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 20                  
2a960 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2a970 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2a980 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9b0 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b 30  "localSaved = {0
2a9c0 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d 22 2c  }, saved = {1}",
2a9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9f0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63    ForDisplay(loc
2aa00 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44 69 73  alSaved), ForDis
2aa10 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d 0a 20  play(saved)),.. 
2aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2aa40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2aa70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2aa80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2aa90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2aaa0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
2aab0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2aac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aaf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
2ab10 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2ab20 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2ab30 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2ab40 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2ab50 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d  bool ForEachFram
2ab60 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a  eworkRegistry(..
2ab70 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2ab80 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72  Registry registr
2ab90 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2aba0 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
2abb0 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20  ameworkList,..  
2abc0 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
2abd0 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62  orkRegistryCallb
2abe0 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ack callback,.. 
2abf0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2ac00 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f  g version, /* NO
2ac10 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f  TE: Optional. */
2ac20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
2ac30 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
2ac40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2ac50 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
2ac60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2ac70 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2ac80 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
2ac90 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
2aca0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2acb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2acc0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2acd0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2ace0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
2acf0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2ad00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ad10 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d   if (registry ==
2ad20 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ad30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ad40 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2ad50 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79  invalid registry
2ad60 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2ad70 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2ad80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2ad90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ada0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
2adb0 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
2adc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2add0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2ade0 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d   = "invalid fram
2adf0 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20  ework list";..  
2ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ae10 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2ae20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2ae30 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2ae40 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2ae50 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  y = frameworkLis
2ae60 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20  t.RootKey;....  
2ae70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
2ae80 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
2ae90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2aeb0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2aec0 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20  root key";..    
2aed0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2aee0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2aef0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2af00 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53          if (!IsS
2af10 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28  upportedRootKey(
2af20 72 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65  registry, rootKe
2af30 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
2af40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2af50 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f      error = "roo
2af60 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65  t key must be pe
2af70 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61  r-user or per-ma
2af80 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20  chine";..       
2af90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2afa0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2afb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2afc0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
2afd0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20  rkList.Names == 
2afe0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2aff0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b000 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
2b010 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  o framework name
2b020 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
2b030 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b040 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2b050 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b060 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
2b070 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
2b080 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
2b090 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b0a0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2b0b0 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
2b0c0 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22   versions found"
2b0d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b0e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2b0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2b110 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
2b120 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d  .PlatformNames =
2b130 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2b140 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b150 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2b160 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  "no platform nam
2b170 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
2b180 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b190 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b1a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b1b0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2b1c0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
2b1d0 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f  Count != framewo
2b1e0 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
2b1f0 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20  ames.Count)..   
2b200 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b210 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2b220 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2b230 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  t("framework nam
2b240 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73  e count {0} does
2b250 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20   not " +..      
2b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
2b270 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61  atch platform na
2b280 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66  me count {1}", f
2b290 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2b2a0 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  es.Count,..     
2b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2b2c0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
2b2d0 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74  tformNames.Count
2b2e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b2f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2b300 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2b310 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b320 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
2b330 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72   = 0; index < fr
2b340 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
2b350 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b  s.Count; index++
2b360 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2b370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b380 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2b390 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
2b3a0 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  rab the name of 
2b3b0 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65  the framework (e
2b3c0 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f  .g. ".NETFramewo
2b3d0 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rk")..          
2b3e0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
2b3f0 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  nd the name of t
2b400 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67  he platform (e.g
2b410 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d  . "WindowsCE")..
2b420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b430 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2b440 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
2b450 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d  eworkName = fram
2b460 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b  eworkList.Names[
2b470 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20  index];..       
2b480 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2b490 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66  platformName = f
2b4a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
2b4b0 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78  tformNames[index
2b4c0 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
2b4d0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2b4e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2b4f0 45 3a 20 47 72 61 62 20 74 68 65 20 73 75 70 70  E: Grab the supp
2b500 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f  orted versions o
2b510 66 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  f this particula
2b520 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
2b530 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d     //       fram
2b540 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20  ework...        
2b550 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2b560 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2b570 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  ionList framewor
2b580 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d  kVersionList;...
2b590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b5a0 20 69 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20   if (version != 
2b5b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2b5c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2b5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b5f0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d        // NOTE: M
2b600 61 6e 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f  anual override o
2b610 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d  f the *ONE* fram
2b620 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20  ework version.. 
2b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b640 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70     //       to p
2b650 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  rocess...       
2b660 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2b670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b680 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65       frameworkVe
2b690 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20  rsionList = new 
2b6a0 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a  VersionList();..
2b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6c0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72      frameworkVer
2b6d0 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
2b6e0 20 56 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e   Version(version
2b6f0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
2b700 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2b710 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
2b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2b730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b740 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77       if (!framew
2b750 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
2b760 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20  .TryGetValue(.. 
2b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b780 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2b790 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72  workName, out fr
2b7a0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
2b7b0 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  st) ||..        
2b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7d0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
2b7e0 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d  nList == null)).
2b7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b800 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b820 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
2b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b850 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b860 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
2b870 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
2b880 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d  kVersion in fram
2b890 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
2b8a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2b8b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b8c0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2b8d0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2b8e0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
2b8f0 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
2b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2b910 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2b920 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2b930 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b950 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e       "frameworkN
2b960 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65  ame = {0}, frame
2b970 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31  workVersion = {1
2b980 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  }, " +..        
2b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9a0 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20  "platformName = 
2b9b0 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {2}", ForDisplay
2b9c0 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c  (frameworkName),
2b9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b9e0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
2b9f0 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
2ba00 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
2ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba20 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74   ForDisplay(plat
2ba30 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63  formName)), trac
2ba40 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba60 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d     if (!HaveFram
2ba70 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a  eworkRegistry(..
2ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba90 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2baa0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
2bab0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2bac0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bae0 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
2baf0 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
2bb00 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2bb10 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2bb20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb40 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2bb50 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2bb60 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
2bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb80 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2bb90 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2bba0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2bbb0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbd0 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
2bbe0 6f 72 6b 20 7b 30 7d 20 72 65 67 69 73 74 72 79  ork {0} registry
2bbf0 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d   not found, " +.
2bc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b               "sk
2bc20 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44  ipping...", ForD
2bc30 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
2bc40 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
2bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2bc70 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc90 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
2bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2bcc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
2bcd0 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29  allback == null)
2bce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bcf0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2bd00 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
2bd10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2bd20 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  callback(..     
2bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd40 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2bd50 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
2bd60 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2bd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c                pl
2bd90 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 6e 75 6c 6c  atformName, null
2bda0 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 70 65  , clientData, pe
2bdb0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdd0 20 20 20 20 77 6f 77 36 34 2c 20 74 68 72 6f 77      wow64, throw
2bde0 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49  OnMissing, whatI
2bdf0 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  f, verbose,..   
2be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be10 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
2be20 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
2be30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be50 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2be60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2be70 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2be80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2be90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2bea0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2beb0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2bec0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
2bed0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2bee0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2bef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2bf30 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72       #region Per
2bf40 2d 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56  -Visual Studio V
2bf50 65 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d  ersion Handling.
2bf60 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2bf70 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69   static void Ini
2bf80 74 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a  tializeVsList(..
2bf90 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2bfa0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
2bfb0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2bfc0 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
2bfd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
2bfe0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2bff0 56 73 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a 20  VsList vsList.. 
2c000 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2c010 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c020 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20       if (vsList 
2c030 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2c040 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
2c050 20 3d 20 6e 65 77 20 56 73 4c 69 73 74 28 29 3b   = new VsList();
2c060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c070 69 66 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b  if (vsList.RootK
2c080 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2c090 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
2c0a0 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f  ist.RootKey = ro
2c0b0 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  otKey;....      
2c0c0 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74        if (vsList
2c0d0 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c  .Versions == nul
2c0e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2c0f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c100 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f     vsList.Versio
2c110 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e  ns = new Version
2c120 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
2c130 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
2c140 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
2c150 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
2c160 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30  guration.NoVs200
2c170 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5)..            
2c180 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56          vsList.V
2c190 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20  ersions.Add(new 
2c1a0 56 65 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20  Version(8, 0)); 
2c1b0 2f 2f 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20  // 2005....     
2c1c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
2c1d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
2c1e0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
2c1f0 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30  guration.NoVs200
2c200 38 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  8)..            
2c210 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56          vsList.V
2c220 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20  ersions.Add(new 
2c230 56 65 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20  Version(9, 0)); 
2c240 2f 2f 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20  // 2008....     
2c250 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
2c260 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
2c270 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
2c280 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31  guration.NoVs201
2c290 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
2c2a0 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56          vsList.V
2c2b0 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20  ersions.Add(new 
2c2c0 56 65 72 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b  Version(10, 0));
2c2d0 2f 2f 20 32 30 31 30 0d 0a 0d 0a 20 20 20 20 20  // 2010....     
2c2e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
2c2f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
2c300 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
2c310 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31  guration.NoVs201
2c320 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2)..            
2c330 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56          vsList.V
2c340 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20  ersions.Add(new 
2c350 56 65 72 73 69 6f 6e 28 31 31 2c 20 30 29 29 3b  Version(11, 0));
2c360 2f 2f 20 32 30 31 32 0d 0a 0d 0a 20 20 20 20 20  // 2012....     
2c370 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
2c380 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
2c390 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
2c3a0 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31  guration.NoVs201
2c3b0 33 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  3)..            
2c3c0 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56          vsList.V
2c3d0 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20  ersions.Add(new 
2c3e0 56 65 72 73 69 6f 6e 28 31 32 2c 20 30 29 29 3b  Version(12, 0));
2c3f0 2f 2f 20 32 30 31 33 0d 0a 20 20 20 20 20 20 20  // 2013..       
2c400 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2c410 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2c420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c460 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c470 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2c480 6f 6f 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f  ool HaveVsVersio
2c490 6e 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20  nDirectory(..   
2c4a0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2c4b0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2c4c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2c4d0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2c4e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2c4f0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
2c500 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c510 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2c520 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2c530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2c540 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2c550 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2c560 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2c570 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 69      ref string i
2c580 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d  nstallDirectory.
2c590 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2c5a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c5b0 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
2c5c0 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c5e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
2c5f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2c600 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
2c610 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
2c620 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72  ion, suffix, per
2c630 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  User, wow64);...
2c640 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
2c650 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2c660 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
2c670 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2c680 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2c690 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2c6a0 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
2c6b0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2c6c0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2c6d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c6e0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
2c6f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2c700 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c710 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
2c720 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2c730 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73  ct value = Regis
2c740 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c  tryHelper.GetVal
2c750 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
2c760 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49           key, "I
2c770 6e 73 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c  nstallDir", null
2c780 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2c790 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2c7a0 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c         if (!(val
2c7b0 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a  ue is string))..
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2c7e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c7f0 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
2c800 63 74 6f 72 79 20 3d 20 28 73 74 72 69 6e 67 29  ctory = (string)
2c810 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
2c820 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
2c830 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
2c840 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ty(directory))..
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c860 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2c870 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c880 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74       if (!Direct
2c890 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63  ory.Exists(direc
2c8a0 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
2c8b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2c8c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
2c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2c8e0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
2c8f0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
2c900 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20  y.Lower,..      
2c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2c920 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
2c930 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
2c940 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c960 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b  "Visual Studio {
2c970 30 7d 20 66 6f 75 6e 64 20 69 6e 20 64 69 72 65  0} found in dire
2c980 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20  ctory {1}.",..  
2c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9a0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56    ForDisplay(vsV
2c9b0 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70  ersion), ForDisp
2c9c0 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
2c9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c9e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2c9f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2ca00 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c 6c           install
2ca10 44 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65  Directory = dire
2ca20 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  ctory;..        
2ca30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2ca40 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2ca50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2ca60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2ca70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2caa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cab0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
2cac0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2cad0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2cae0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2caf0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2cb00 62 6f 6f 6c 20 46 6f 72 45 61 63 68 56 73 56 65  bool ForEachVsVe
2cb10 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a  rsionRegistry(..
2cb20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2cb30 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72  Registry registr
2cb40 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2cb50 56 73 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a  VsList vsList,..
2cb60 20 20 20 20 20 20 20 20 20 20 20 20 56 69 73 75              Visu
2cb70 61 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72 79  alStudioRegistry
2cb80 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63  Callback callbac
2cb90 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
2cba0 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
2cbb0 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
2cbc0 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
2cbd0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2cbe0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
2cbf0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
2cc00 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
2cc10 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2cc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2cc30 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
2cc40 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
2cc50 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2cc60 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2cc70 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2cc80 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
2cc90 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
2cca0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2ccb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2ccc0 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c  (registry == nul
2ccd0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2cce0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ccf0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2cd00 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a  lid registry";..
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2cd30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2cd40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2cd50 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  vsList == null).
2cd60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd80 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2cd90 20 56 53 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20   VS list";..    
2cda0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2cdb0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2cdc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2cdd0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2cde0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20  stryKey rootKey 
2cdf0 3d 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  = vsList.RootKey
2ce00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ce10 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
2ce20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2ce30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ce40 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2ce50 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
2ce60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ce70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2ce80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ce90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2cea0 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52  f (!IsSupportedR
2ceb0 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c  ootKey(registry,
2cec0 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20   rootKey))..    
2ced0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cee0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2cef0 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
2cf00 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
2cf10 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
2cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf30 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2cf40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2cf60 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  vsList.Versions 
2cf70 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2cf80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2cf90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2cfa0 20 22 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e 73   "no VS versions
2cfb0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
2cfc0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2cfd0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2cfe0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2cff0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56        foreach (V
2d000 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2d010 20 69 6e 20 76 73 4c 69 73 74 2e 56 65 72 73 69   in vsList.Versi
2d020 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ons)..          
2d030 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d040 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
2d050 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
2d060 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
2d070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d080 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2d090 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2d0a0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
2d0b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2d0c0 20 20 20 20 20 20 20 20 22 76 73 56 65 72 73 69          "vsVersi
2d0d0 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69  on = {0}", ForDi
2d0e0 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29  splay(vsVersion)
2d0f0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2d100 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2d110 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2d120 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2d130 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f  g installDirecto
2d140 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  ry = null;....  
2d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2d160 20 28 21 48 61 76 65 56 73 56 65 72 73 69 6f 6e   (!HaveVsVersion
2d170 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
2d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d190 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
2d1a0 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
2d1b0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
2d1c0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1e0 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 69 6e   verbose, ref in
2d1f0 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 29 29  stallDirectory))
2d200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d210 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d220 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2d230 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2d240 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
2d250 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
2d260 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2d270 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2d280 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2d290 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2b0 20 20 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f    "Visual Studio
2d2c0 20 7b 30 7d 20 6e 6f 74 20 66 6f 75 6e 64 2c 20   {0} not found, 
2d2d0 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20  skipping...",.. 
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2f0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2d300 79 28 76 73 56 65 72 73 69 6f 6e 29 29 2c 20 74  y(vsVersion)), t
2d310 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2d320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d330 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
2d340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d350 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2d360 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
2d370 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
2d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d390 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2d3b0 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20   (!callback(..  
2d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3d0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
2d3e0 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
2d3f0 2c 20 70 61 63 6b 61 67 65 2c 20 69 6e 73 74 61  , package, insta
2d400 6c 6c 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  llDirectory,..  
2d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d420 20 20 20 20 20 20 63 6c 69 65 6e 74 44 61 74 61        clientData
2d430 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2d440 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
2d450 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d470 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20     verbose, ref 
2d480 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
2d490 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2d4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2d4e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2d4f0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2d500 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2d510 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
2d520 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2d530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2d570 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2d580 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 46   Configuration F
2d590 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ile Handling..  
2d5a0 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
2d5b0 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
2d5c0 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
2d5d0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2d5e0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
2d5f0 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  dDbProviderFacto
2d600 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2d610 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
2d620 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2d630 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
2d640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d650 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
2d660 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2d670 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
2d680 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2d690 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
2d6a0 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
2d6b0 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
2d6c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2d6d0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2d6e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2d6f0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2d700 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
2d710 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
2d720 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2d730 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2d740 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2d750 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69           bool di
2d760 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  rty = false;..  
2d770 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63            XmlDoc
2d780 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d  ument document =
2d790 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74   new XmlDocument
2d7a0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2d7b0 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73     document.Pres
2d7c0 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d  erveWhitespace =
2d7d0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2d7e0 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61      document.Loa
2d7f0 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  d(fileName);....
2d800 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
2d810 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e  lement addElemen
2d820 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
2d830 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
2d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d850 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50  String.Format(XP
2d860 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74  athForAddElement
2d870 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73  , invariant)) as
2d880 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
2d890 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d8a0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75  addElement == nu
2d8b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2d8c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d8d0 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65      string[] ele
2d8e0 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20  mentNames = {.. 
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d900 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74 61 22     "system.data"
2d910 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46 61 63  , "DbProviderFac
2d920 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20 20 20  tories"..       
2d930 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20           };.... 
2d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58                 X
2d950 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f  mlElement previo
2d960 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20  usElement =..   
2d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d980 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65   document.Docume
2d990 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f  ntElement; /* co
2d9a0 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a  nfiguration */..
2d9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d9c0 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e    foreach (strin
2d9d0 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e  g elementName in
2d9e0 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a   elementNames)..
2d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2da10 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
2da20 74 20 3d 20 70 72 65 76 69 6f 75 73 45 6c 65 6d  t = previousElem
2da30 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
2da40 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
2da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2da60 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20 58  lementName) as X
2da70 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da90 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74    if (addElement
2daa0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2dac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dad0 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
2dae0 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
2daf0 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a  CreateElement(..
2db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db10 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d              elem
2db20 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e  entName, String.
2db30 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  Empty);....     
2db40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db50 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65     previousEleme
2db60 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61  nt.AppendChild(a
2db70 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  ddElement);..   
2db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2dba0 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
2dbb0 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61 64 64 45  usElement = addE
2dbc0 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20  lement;..       
2dbd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2dbf0 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d  dElement = docum
2dc00 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e  ent.CreateElemen
2dc10 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2dc20 20 20 20 20 20 20 20 20 22 61 64 64 22 2c 20 53          "add", S
2dc30 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d  tring.Empty);...
2dc40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dc50 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
2dc60 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64  .AppendChild(add
2dc70 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20  Element);....   
2dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2dc90 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2dca0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2dcb0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
2dcc0 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45  ring.Equals(addE
2dcd0 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62  lement.GetAttrib
2dce0 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20 20  ute("name"),..  
2dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd00 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f    name, StringCo
2dd10 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
2dd20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2dd30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2dd40 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65     addElement.Se
2dd50 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65  tAttribute("name
2dd60 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ", name);..     
2dd70 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
2dd80 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2dd90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2dda0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
2ddb0 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65  ng.Equals(addEle
2ddc0 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74  ment.GetAttribut
2ddd0 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d  e("invariant"),.
2dde0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ddf0 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74 2c 20       invariant, 
2de00 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
2de10 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20  .Ordinal))..    
2de20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2de30 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
2de40 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75  ement.SetAttribu
2de50 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 2c 20  te("invariant", 
2de60 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20 20 20  invariant);..   
2de70 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2de80 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2de90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2dea0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
2deb0 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45  ring.Equals(addE
2dec0 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62  lement.GetAttrib
2ded0 75 74 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e  ute("description
2dee0 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
2def0 20 20 20 20 20 20 20 20 20 64 65 73 63 72 69 70           descrip
2df00 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70  tion, StringComp
2df10 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
2df20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2df30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2df40 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41   addElement.SetA
2df50 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69  ttribute("descri
2df60 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74  ption", descript
2df70 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion);..         
2df80 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
2df90 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2dfa0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2dfb0 20 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79     string fullTy
2dfc0 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e  peName = String.
2dfd0 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d  Format("{0}, {1}
2dfe0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2dff0 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73      typeName, as
2e000 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  semblyName);....
2e010 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e020 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
2e030 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
2e040 72 69 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d  ribute("type"),.
2e050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e060 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d       fullTypeNam
2e070 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  e, StringCompari
2e080 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
2e090 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2e0b0 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72  dElement.SetAttr
2e0c0 69 62 75 74 65 28 22 74 79 70 65 22 2c 20 66 75  ibute("type", fu
2e0d0 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20  llTypeName);..  
2e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2e0f0 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2e100 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2e110 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
2e120 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a  rty || whatIf)..
2e130 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2e150 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
2e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e170 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2e180 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2e190 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
2e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1b0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2e1c0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2e1d0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2e1e0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61                "a
2e200 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22  ddElement = {0}"
2e210 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64  , ForDisplay(add
2e220 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20  Element)),..    
2e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e240 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2e250 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2e260 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
2e270 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
2e280 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
2e290 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29  t.Save(fileName)
2e2a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e2b0 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69       filesModifi
2e2c0 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed++;....       
2e2d0 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d           saved =
2e2e0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2e2f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e300 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2e310 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2e320 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2e330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2e370 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
2e380 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2e390 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2e3a0 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
2e3b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2e3c0 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69  ol RemoveDbProvi
2e3d0 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
2e3e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2e3f0 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
2e400 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
2e410 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
2e420 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2e430 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2e440 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2e450 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
2e460 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
2e470 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2e480 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2e490 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2e4a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e4b0 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c  bool dirty = fal
2e4c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2e4d0 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63   XmlDocument doc
2e4e0 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44  ument = new XmlD
2e4f0 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20  ocument();....  
2e500 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
2e510 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74 65  nt.PreserveWhite
2e520 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20  space = true;.. 
2e530 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
2e540 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d  ent.Load(fileNam
2e550 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2e560 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61 64     XmlElement ad
2e570 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d  dElement = docum
2e580 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
2e590 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
2e5a0 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
2e5b0 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41 64 64  rmat(XPathForAdd
2e5c0 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61  Element, invaria
2e5d0 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65  nt)) as XmlEleme
2e5e0 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  nt;....         
2e5f0 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e     if (addElemen
2e600 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
2e610 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e620 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
2e630 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65  ement.ParentNode
2e640 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 61 64 64  .RemoveChild(add
2e650 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20  Element);..     
2e660 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
2e670 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2e680 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e690 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
2e6a0 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20  t removeElement 
2e6b0 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63  = document.Selec
2e6c0 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20  tSingleNode(..  
2e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
2e6e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74  ring.Format(XPat
2e6f0 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e  hForRemoveElemen
2e700 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61  t, invariant)) a
2e710 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
2e720 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2e730 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 21  (removeElement !
2e740 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2e750 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e760 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 45 6c          removeEl
2e770 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65  ement.ParentNode
2e780 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72 65 6d  .RemoveChild(rem
2e790 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20  oveElement);..  
2e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2e7b0 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2e7c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2e7d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
2e7e0 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a  rty || whatIf)..
2e7f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2e810 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
2e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e830 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2e840 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2e850 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
2e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e870 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2e880 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2e890 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2e8a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61                "a
2e8c0 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 2c  ddElement = {0},
2e8d0 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d   removeElement =
2e8e0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
2e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e900 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45 6c  ForDisplay(addEl
2e910 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73 70 6c  ement), ForDispl
2e920 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  ay(removeElement
2e930 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2e940 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2e950 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e970 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
2e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e990 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28    document.Save(
2e9a0 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
2e9c0 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a  lesModified++;..
2e9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e9e0 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d    saved = true;.
2e9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ea00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2ea10 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2ea20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2ea30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ea40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2ea80 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2ea90 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 44  ic bool ProcessD
2eaa0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2eab0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2eac0 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d  tring fileName,.
2ead0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2eae0 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a  ing invariant,..
2eaf0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2eb00 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
2eb10 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
2eb20 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  cription,..     
2eb30 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79         string ty
2eb40 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
2eb50 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
2eb60 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d  e assemblyName,.
2eb70 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2eb80 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
2eb90 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2eba0 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
2ebb0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2ebc0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2ebd0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2ebe0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2ebf0 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
2ec00 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
2ec10 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2ec20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2ec30 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2ec40 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
2ec50 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
2ec60 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2ec70 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2ec80 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2ec90 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
2eca0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
2ecb0 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
2ecc0 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
2ecd0 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
2ece0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2ecf0 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
2ed00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2ed20 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2ed30 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69 67  framework config
2ed40 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b   callback data";
2ed50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ed60 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2ed70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ed80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2ed90 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20   (pair.Y)..     
2eda0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2edb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2edc0 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65   RemoveDbProvide
2edd0 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
2ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2edf0 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61  ileName, invaria
2ee00 6e 74 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  nt, whatIf, verb
2ee10 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c 0d  ose, ref saved,.
2ee20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee30 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 20       ref error) 
2ee40 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
2ee50 20 20 20 20 41 64 64 44 62 50 72 6f 76 69 64 65      AddDbProvide
2ee60 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
2ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2ee80 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61  ileName, invaria
2ee90 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69  nt, name, descri
2eea0 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c  ption, typeName,
2eeb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eec0 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61        assemblyNa
2eed0 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  me, whatIf, verb
2eee0 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c 20  ose, ref saved, 
2eef0 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
2ef00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2ef10 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
2ef20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ef40 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76  urn RemoveDbProv
2ef50 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
2ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef70 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
2ef80 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76  riant, whatIf, v
2ef90 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
2efa0 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
2efb0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
2efc0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2efd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
2efe0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2eff0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
2f000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f040 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2f050 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79  #region Assembly
2f060 20 46 6f 6c 64 65 72 73 20 48 61 6e 64 6c 69 6e   Folders Handlin
2f070 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
2f080 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2f090 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64   GetAssemblyFold
2f0a0 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ersKeyName(..   
2f0b0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f0c0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
2f0d0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2f0e0 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
2f0f0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2f100 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
2f110 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2f120 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2f130 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2f140 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20  bool wow64..    
2f150 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2f160 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f170 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2f180 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
2f190 72 65 67 69 73 74 72 79 20 6b 65 79 20 61 70 70  registry key app
2f1a0 65 61 72 73 20 74 6f 20 61 6c 77 61 79 73 20 62  ears to always b
2f1b0 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79 0d 0a 20  e 32-bit only.. 
2f1c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2f1d0 20 20 20 20 28 69 2e 65 2e 20 70 72 6f 62 61 62      (i.e. probab
2f1e0 6c 79 20 62 65 63 61 75 73 65 20 69 74 20 69 73  ly because it is
2f1f0 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 56 69   only used by Vi
2f200 73 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  sual..          
2f210 20 20 2f 2f 20 20 20 20 20 20 20 53 74 75 64 69    //       Studi
2f220 6f 2c 20 77 68 69 63 68 20 69 73 20 63 75 72 72  o, which is curr
2f230 65 6e 74 6c 79 20 61 6c 77 61 79 73 20 33 32 2d  ently always 32-
2f240 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20 20 20 20  bit only)...    
2f250 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2f260 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2f270 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e  ormat = !String.
2f280 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c  IsNullOrEmpty(pl
2f290 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20  atformName) ?.. 
2f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2f2b0 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
2f2c0 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c 5c  {1}\\v{2}\\{3}\\
2f2d0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45  AssemblyFoldersE
2f2e0 78 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  x" :..          
2f2f0 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72        "{0}\\Micr
2f300 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d  osoft\\{1}\\v{2}
2f310 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  \\AssemblyFolder
2f320 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sEx";....       
2f330 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
2f340 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74  ng.Format(format
2f350 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65  , GetRootKeyName
2f360 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29  (perUser, wow64)
2f370 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f380 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
2f390 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2f3a0 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
2f3b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
2f3c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2f3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2f420 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2f430 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c  AddToAssemblyFol
2f440 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
2f450 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2f460 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2f470 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f480 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
2f490 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2f4a0 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
2f4b0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2f4c0 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
2f4d0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2f4e0 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
2f4f0 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
2f500 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
2f510 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
2f520 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
2f530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2f540 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2f550 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2f560 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2f570 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2f580 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2f590 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2f5a0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2f5b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f5c0 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
2f5d0 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c  ame = GetAssembl
2f5e0 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28  yFoldersKeyName(
2f5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f600 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
2f610 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2f620 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
2f630 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2f640 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34             wow64
2f650 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f660 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2f670 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
2f680 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2f690 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f6b0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
2f6c0 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
2f6d0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2f6e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f6f0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
2f700 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2f710 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f730 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2f740 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f760 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2f770 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2f780 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
2f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7a0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2f7b0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f7d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2f7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f800 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2f810 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
2f820 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2f830 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a  .CreateSubKey(..
2f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f850 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62          key, sub
2f860 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  KeyName, whatIf,
2f870 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2f880 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8a0 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
2f8b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2f8f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f910 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2f920 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
2f930 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2f940 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f960 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
2f970 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
2f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f990 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2f9d0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2f9e0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
2fa00 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65  bKey, null, dire
2fa10 63 74 6f 72 79 2c 20 77 68 61 74 49 66 2c 20 76  ctory, whatIf, v
2fa20 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
2fa30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2fa40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2fa50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2fa60 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2fa70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2fa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fac0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2fad0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2fae0 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73  ool RemoveFromAs
2faf0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
2fb00 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2fb10 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
2fb20 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2fb30 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
2fb40 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
2fb50 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
2fb60 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
2fb70 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2fb80 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
2fb90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2fba0 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
2fbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2fbc0 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
2fbd0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2fbe0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2fbf0 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
2fc00 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
2fc10 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2fc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2fc30 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2fc40 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2fc50 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
2fc60 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2fc70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2fc80 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
2fc90 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c  = GetAssemblyFol
2fca0 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  dersKeyName(..  
2fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2fcc0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
2fcd0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
2fce0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72  latformName, per
2fcf0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2fd00 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a         wow64);..
2fd10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
2fd20 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2fd30 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
2fd40 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2fd50 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2fd60 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2fd70 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75  ey, keyName, tru
2fd80 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2fd90 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2fda0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2fdb0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
2fdc0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2fdd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2fdf0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2fe00 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2fe20 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2fe30 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2fe40 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
2fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe60 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2fe70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2fe80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2fe90 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2fea0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2fec0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
2fed0 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  eteSubKey(..    
2fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fef0 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
2ff00 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2ff10 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2ff20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2ff30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ff40 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2ff50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2ff60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2ffb0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2ffc0 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
2ffd0 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ssAssemblyFolder
2ffe0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
2fff0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
30000 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
30010 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
30020 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
30030 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
30040 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
30050 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
30060 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
30070 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
30080 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
30090 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
300a0 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
300b0 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
300c0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
300d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
300e0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
300f0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
30100 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
30110 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
30120 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
30130 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
30140 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
30150 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
30160 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
30170 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30180 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
30190 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
301a0 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
301b0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
301c0 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
301d0 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
301e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
301f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30200 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
30210 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72  invalid framewor
30220 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  k callback data"
30230 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30240 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
30250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
30270 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
30280 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30290 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
302a0 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65  n RemoveFromAsse
302b0 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
302c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302d0 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
302e0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
302f0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
30300 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
30310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
30320 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65  egacyProjectName
30330 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
30340 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
30350 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
30360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30370 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20  ef error) &&..  
30380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64                Ad
30390 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  dToAssemblyFolde
303a0 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
303b0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
303c0 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
303d0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
303e0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
303f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30400 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d        ProjectNam
30410 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55 73  e, pair.X, perUs
30420 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  er, wow64, whatI
30430 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  f, verbose,..   
30440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30450 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
30460 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
30470 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
30480 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
304a0 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41  turn RemoveFromA
304b0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
304c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
304d0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
304e0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
304f0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
30500 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
30510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30520 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70    ProjectName, p
30530 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 74  erUser, wow64, t
30540 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77  hrowOnMissing, w
30550 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
30560 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
30570 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
30580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30590 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
305a0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
305b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
305c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
305d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
305e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
305f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30600 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
30610 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
30620 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  io Handling..   
30630 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
30640 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 56 73  tic string GetVs
30650 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  RootKeyName(..  
30660 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
30670 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
30680 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
30690 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
306a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
306b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
306c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
306d0 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56 69 73  \\Microsoft\\Vis
306e0 75 61 6c 53 74 75 64 69 6f 22 2c 0d 0a 20 20 20  ualStudio",..   
306f0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
30700 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55  RootKeyName(perU
30710 73 65 72 2c 20 77 6f 77 36 34 29 29 3b 0d 0a 20  ser, wow64));.. 
30720 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30730 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
30780 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
30790 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
307a0 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  VsKeyName(..    
307b0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
307c0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
307d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
307e0 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
307f0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
30800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
30810 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
30820 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
30830 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30840 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
30850 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30860 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30870 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
30880 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
30890 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
308a0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
308b0 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 47 65 74 56 73  \\{1}{2}", GetVs
308c0 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55  RootKeyName(perU
308d0 73 65 72 2c 20 77 6f 77 36 34 29 2c 20 76 73 56  ser, wow64), vsV
308e0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
308f0 20 20 20 20 20 20 20 20 20 73 75 66 66 69 78 29           suffix)
30900 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
30910 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
30920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
30960 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
30970 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  on Visual Studio
30980 20 44 61 74 61 20 53 6f 75 72 63 65 20 48 61 6e   Data Source Han
30990 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
309a0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
309b0 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f 75 72  ol AddVsDataSour
309c0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
309d0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
309e0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
309f0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
30a00 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
30a10 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
30a20 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
30a30 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
30a40 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
30a50 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
30a60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
30a70 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
30a80 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
30a90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
30aa0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
30ab0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
30ac0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
30ad0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
30ae0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30af0 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
30b00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
30b10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30b20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
30b30 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72   "invalid VS ver
30b40 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
30b50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
30b60 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
30b70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30b80 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
30b90 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
30ba0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30bb0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
30bc0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
30bd0 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
30be0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
30bf0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
30c00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30c10 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
30c20 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d  me = GetVsKeyNam
30c30 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  e(vsVersion, suf
30c40 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  fix, perUser, wo
30c50 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
30c60 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
30c70 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
30c80 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
30c90 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
30ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cb0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
30cc0 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
30cd0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
30ce0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
30d00 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
30d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
30d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30d30 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
30d40 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
30d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d60 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
30d70 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
30d80 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
30d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30da0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
30db0 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
30dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30dd0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
30de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30df0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
30e00 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
30e10 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
30e20 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
30e30 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
30e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30e50 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
30e60 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72  DataSources", tr
30e70 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
30e80 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
30e90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
30eb0 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
30ec0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30ed0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ef0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
30f00 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
30f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
30f30 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
30f40 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75  ey: {0}\\DataSou
30f50 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  rces",..        
30f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f70 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
30f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f90 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
30fa0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
30fb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
30fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fd0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
30fe0 73 74 72 79 4b 65 79 20 64 61 74 61 53 6f 75 72  stryKey dataSour
30ff0 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20  ceKey =..       
31000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31010 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
31020 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
31030 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20  (subKey,..      
31040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31050 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
31060 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72  taSourceId.ToStr
31070 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
31080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
310a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
310b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
310c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
310d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310e0 69 66 20 28 64 61 74 61 53 6f 75 72 63 65 4b 65  if (dataSourceKe
310f0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31110 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31130 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
31140 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
31150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31160 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
31170 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
31180 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
31190 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20  {1}", key,..    
311a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311b0 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
311c0 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64  age.DataSourceId
311d0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
311e0 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  rmat));....     
311f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31200 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
31210 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
31230 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31240 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
31250 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
31260 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
31270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31280 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 20   dataSourceKey, 
31290 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72  null, String.For
312a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
312b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312c0 20 20 22 7b 30 7d 20 44 61 74 61 62 61 73 65 20    "{0} Database 
312d0 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61  File", ProjectNa
312e0 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  me), whatIf,..  
312f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31300 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
31310 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
31320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31330 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
31340 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
31350 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65 20 69  TE: This value i
31360 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e 30 2e  s new as of 1.0.
31370 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20  83.0...         
31380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31390 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
313a0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
313b0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
313c0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
313d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313e0 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 20   dataSourceKey, 
313f0 22 44 65 66 61 75 6c 74 50 72 6f 76 69 64 65 72  "DefaultProvider
31400 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
31410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31420 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76  package.DataProv
31430 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28  iderId.ToString(
31440 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
31450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31460 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
31470 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
31480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31490 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
314a0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
314b0 65 79 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79  ey(dataSourceKey
314c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
314d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
314e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53 75  tring.Format("Su
314f0 70 70 6f 72 74 69 6e 67 50 72 6f 76 69 64 65 72  pportingProvider
31500 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  s\\{0}",..      
31510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31520 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
31530 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53  taProviderId.ToS
31540 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
31550 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
31560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31570 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
31580 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
31590 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
315a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
315b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
315c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
315d0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
315e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
315f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31630 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
31640 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
31650 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61 74  bool RemoveVsDat
31660 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20  aSource(..      
31670 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
31680 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
31690 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
316a0 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
316b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
316c0 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
316d0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
316e0 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
316f0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
31700 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
31710 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
31720 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
31730 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
31740 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
31750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
31760 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
31770 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
31780 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31790 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
317a0 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
317b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
317c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
317d0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
317e0 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
317f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
31800 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
31810 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31820 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
31830 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
31840 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
31860 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
31870 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
31880 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
31890 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
318a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
318b0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
318c0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
318d0 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
318e0 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65  , suffix, perUse
318f0 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  r, wow64);....  
31900 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
31910 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
31920 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
31930 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
31940 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31950 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
31960 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
31970 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
31980 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
31990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
319a0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
319b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
319c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
319d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
319e0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
319f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31a00 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
31a10 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
31a20 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
31a30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
31a40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
31a50 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
31a60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31a70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
31a80 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
31a90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31aa0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
31ab0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
31ac0 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
31ad0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
31ae0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
31af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
31b00 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73  ey, "DataSources
31b10 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
31b20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
31b30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b50 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
31b60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
31b70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b90 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
31ba0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
31bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bc0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
31bd0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
31be0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
31bf0 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20  taSources",..   
31c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c10 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
31c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31c30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31c40 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
31c50 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31c70 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
31c80 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65  lper.DeleteSubKe
31c90 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cb0 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e  subKey, package.
31cc0 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53  DataSourceId.ToS
31cd0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
31ce0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
31cf0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
31d00 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
31d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
31d30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
31d40 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
31d50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31d60 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
31db0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
31dc0 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
31dd0 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
31de0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
31df0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
31e00 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
31e10 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
31e20 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
31e30 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
31e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
31e50 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
31e60 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
31e70 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
31e80 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
31e90 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
31ea0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
31eb0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
31ec0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
31ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31ee0 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
31ef0 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
31f00 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
31f10 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
31f20 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
31f30 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
31f40 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
31f50 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
31f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
31f70 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
31f80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
31f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31fa0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
31fb0 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
31fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31fd0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
31fe0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
31ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
32000 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
32010 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
32020 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
32030 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
32040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
32050 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
32060 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32080 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
32090 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74   VS callback dat
320a0 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
320b0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
320c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
320d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
320e0 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
320f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32100 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
32110 75 72 6e 20 41 64 64 56 73 44 61 74 61 53 6f 75  urn AddVsDataSou
32120 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
32130 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
32140 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  y, vsVersion, su
32150 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70  ffix, package, p
32160 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a  erUser, wow64,..
32170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32180 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
32190 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
321a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
321b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
321c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
321d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
321e0 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56    return RemoveV
321f0 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32210 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
32220 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61  sion, suffix, pa
32230 63 6b 61 67 65 2c 20 70 65 72 55 73 65 72 2c 20  ckage, perUser, 
32240 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
32250 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
32260 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
32270 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
32280 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
32290 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
322a0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
322b0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
322c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
32300 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73       #region Vis
32310 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20  ual Studio Data 
32320 50 72 6f 76 69 64 65 72 20 48 61 6e 64 6c 69 6e  Provider Handlin
32330 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
32340 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41  te static bool A
32350 64 64 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  ddVsDataProvider
32360 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
32370 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
32380 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
32390 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
323a0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
323b0 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
323c0 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
323d0 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
323e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
323f0 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d  tring fileName,.
32400 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
32410 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
32420 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
32430 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
32440 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
32450 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
32460 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
32470 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
32480 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
32490 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
324a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
324b0 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
324c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
324d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
324e0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
324f0 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e  valid VS version
32500 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
32510 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
32520 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
32530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32540 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
32550 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
32560 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32570 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
32580 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
32590 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
325a0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
325b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
325c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
325d0 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
325e0 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
325f0 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
32600 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29   perUser, wow64)
32610 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32620 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
32630 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
32640 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
32650 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
32660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
32670 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
32680 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
32690 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
326a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
326b0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
326c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
326d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
326e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326f0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
32700 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
32710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32720 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
32730 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
32740 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
32750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32760 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
32770 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
32790 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
327a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
327b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
327c0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
327d0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
327e0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
327f0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
32800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32810 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
32820 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65  Providers", true
32830 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
32840 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
32850 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32860 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
32870 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
32880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32890 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
328a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328b0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
328c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328e0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
328f0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
32900 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69  : {0}\\DataProvi
32910 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ders",..        
32920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32930 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
32940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32950 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32960 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32970 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32990 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
329a0 73 74 72 79 4b 65 79 20 64 61 74 61 50 72 6f 76  stryKey dataProv
329b0 69 64 65 72 4b 65 79 20 3d 0d 0a 20 20 20 20 20  iderKey =..     
329c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329d0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
329e0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
329f0 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20  ey(subKey,..    
32a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a10 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
32a20 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
32a30 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
32a40 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
32a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a60 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
32a70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
32a80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32aa0 20 20 20 20 69 66 20 28 64 61 74 61 50 72 6f 76      if (dataProv
32ab0 69 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  iderKey == null)
32ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32ad0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32af0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
32b00 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
32b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b30 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
32b40 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
32b50 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c   {0}\\{1}", key,
32b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b80 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72    package.DataPr
32b90 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
32ba0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
32bb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32bd0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
32be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bf0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
32c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c10 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
32c20 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
32c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c40 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
32c50 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c 20  viderKey, null, 
32c60 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 77 68 61  Description, wha
32c70 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
32c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c90 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
32ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cb0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
32cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cd0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
32ce0 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73   value is new as
32cf0 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 20 20 48   of 1.0.83.0.  H
32d00 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20  owever,..       
32d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d20 20 2f 2f 20 20 20 20 20 20 20 69 74 20 73 68 6f   //       it sho
32d30 75 6c 64 20 6f 6e 6c 79 20 62 65 20 73 65 74 20  uld only be set 
32d40 69 66 20 74 68 65 20 70 61 63 6b 61 67 65 20 61  if the package a
32d50 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
32d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d70 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 61 6c   //       and al
32d80 6c 20 74 68 65 20 61 73 73 65 6d 62 6c 69 65 73  l the assemblies
32d90 20 69 74 20 72 65 66 65 72 73 20 74 6f 20 61 72   it refers to ar
32da0 65 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20  e being..       
32db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32dc0 20 2f 2f 20 20 20 20 20 20 20 70 6c 61 63 65 64   //       placed
32dd0 20 69 6e 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c   into the global
32de0 20 61 73 73 65 6d 62 6c 79 20 63 61 63 68 65 2e   assembly cache.
32df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32e00 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
32e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
32e30 65 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  e.GlobalAssembly
32e40 43 61 63 68 65 29 0d 0a 20 20 20 20 20 20 20 20  Cache)..        
32e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
32e80 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
32e90 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
32ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32eb0 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
32ec0 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73 65 6d  viderKey, "Assem
32ed0 62 6c 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  bly",..         
32ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ef0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41         package.A
32f00 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 54 6f 53 74  ssemblyName.ToSt
32f10 72 69 6e 67 28 29 2c 0d 0a 20 20 20 20 20 20 20  ring(),..       
32f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f30 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
32f40 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
32f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f80 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
32f90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
32fa0 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65  NOTE: This value
32fb0 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e   is new as of 1.
32fc0 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20 20  0.83.0...       
32fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fe0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
32ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
33000 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
33010 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
33020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33030 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
33040 65 79 2c 20 22 41 73 73 6f 63 69 61 74 65 64 53  ey, "AssociatedS
33050 6f 75 72 63 65 22 2c 0d 0a 20 20 20 20 20 20 20  ource",..       
33060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33070 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
33080 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69  aSourceId.ToStri
33090 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
330a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
330b0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
330c0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
330d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
330e0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
330f0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
33100 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
33110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33120 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
33130 20 22 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22   "InvariantName"
33140 2c 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c  , InvariantName,
33150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
33170 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
33180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33190 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
331a0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
331b0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
331c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331d0 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
331e0 2c 20 22 54 65 63 68 6e 6f 6c 6f 67 79 22 2c 0d  , "Technology",.
331f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33200 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
33210 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e  kage.AdoNetTechn
33220 6f 6c 6f 67 79 49 64 2e 54 6f 53 74 72 69 6e 67  ologyId.ToString
33230 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
33240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33250 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
33260 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
33270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33280 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
33290 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
332a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
332b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
332c0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
332d0 43 6f 64 65 42 61 73 65 22 2c 20 66 69 6c 65 4e  CodeBase", fileN
332e0 61 6d 65 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  ame, whatIf,..  
332f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33300 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
33310 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
33320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
33330 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
33340 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
33350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33360 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
33370 72 4b 65 79 2c 20 22 46 61 63 74 6f 72 79 53 65  rKey, "FactorySe
33380 72 76 69 63 65 22 2c 0d 0a 20 20 20 20 20 20 20  rvice",..       
33390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333a0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72       package.Ser
333b0 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  viceId.ToString(
333c0 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
333d0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
333e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333f0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
33400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33410 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
33420 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
33430 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey(dataProviderK
33440 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
33450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33460 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63   "SupportedObjec
33470 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69  ts\\DataConnecti
33480 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22 2c 0d 0a 20  onUIControl",.. 
33490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334a0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
334b0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
334c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334d0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
334e0 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
334f0 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72  Key(dataProvider
33500 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33520 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65    "SupportedObje
33530 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74  cts\\DataConnect
33540 69 6f 6e 50 72 6f 70 65 72 74 69 65 73 22 2c 0d  ionProperties",.
33550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33560 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
33570 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
33580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33590 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
335a0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
335b0 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
335c0 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
335d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335e0 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
335f0 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65  jects\\DataConne
33600 63 74 69 6f 6e 53 75 70 70 6f 72 74 22 2c 20 77  ctionSupport", w
33610 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
33620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33630 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
33640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33650 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
33660 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
33670 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65  bKey(dataProvide
33680 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rKey,..         
33690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336a0 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a     "SupportedObj
336b0 65 63 74 73 5c 5c 44 61 74 61 4f 62 6a 65 63 74  ects\\DataObject
336c0 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66  Support", whatIf
336d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
336e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
336f0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
33700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33710 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
33720 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
33730 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
33740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
33760 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c  upportedObjects\
33770 5c 44 61 74 61 56 69 65 77 53 75 70 70 6f 72 74  \DataViewSupport
33780 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ", whatIf,..    
33790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337a0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
337b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
337c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
337d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
337e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
337f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
33800 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
33810 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
33820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33860 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
33870 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
33880 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61  ool RemoveVsData
33890 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
338a0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
338b0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
338c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
338d0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
338e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
338f0 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
33900 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
33910 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
33920 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
33930 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
33940 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
33950 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
33960 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
33970 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
33980 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
33990 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
339a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
339b0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
339c0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
339d0 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
339e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
339f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
33a00 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
33a10 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
33a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
33a30 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
33a40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33a50 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
33a60 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
33a70 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
33a80 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73  n, suffix, perUs
33a90 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  er, wow64);.... 
33aa0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
33ab0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
33ac0 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
33ad0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
33ae0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
33af0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
33b00 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
33b10 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
33b20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
33b30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33b40 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
33b50 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
33b60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33b70 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
33b80 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
33b90 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
33ba0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
33bb0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
33bc0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
33bd0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
33bf0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
33c00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33c10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
33c20 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
33c30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33c40 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
33c50 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
33c60 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
33c70 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
33c80 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
33c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ca0 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64  key, "DataProvid
33cb0 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ers", true, what
33cc0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
33cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
33ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33cf0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
33d00 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
33d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
33d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33d30 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
33d40 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
33d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
33d70 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
33d80 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
33d90 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c  \DataProviders",
33da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
33dc0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
33dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
33de0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
33df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33e10 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
33e20 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65  tryHelper.Delete
33e30 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20  SubKeyTree(..   
33e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e50 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63       subKey, pac
33e60 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
33e70 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
33e80 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
33e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ea0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
33eb0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
33ec0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33ed0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33ee0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
33ef0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
33f00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
33f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
33f60 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
33f70 50 72 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f  ProcessVsDataPro
33f80 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
33f90 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
33fa0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
33fb0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
33fc0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
33fd0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
33fe0 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
33ff0 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
34000 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
34010 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
34020 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
34030 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
34040 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
34050 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
34060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
34070 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
34080 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
34090 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
340a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
340b0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
340c0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
340d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
340e0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
340f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
34100 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34110 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
34120 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
34130 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
34140 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
34150 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
34160 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
34170 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
34180 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34190 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
341a0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c   "invalid VS cal
341b0 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20  lback data";..  
341c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
341d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
341e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
341f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
34200 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20  ir.Y)..         
34210 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34220 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64        return Add
34230 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
34240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34250 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
34260 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
34270 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72 2e 58   package, pair.X
34280 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  , perUser,..    
34290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342a0 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76  wow64, whatIf, v
342b0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
342c0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
342d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
342e0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
342f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34300 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
34310 76 65 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  veVsDataProvider
34320 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34330 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
34340 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
34350 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65 72 55  x, package, perU
34360 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  ser, wow64,..   
34370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34380 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34390 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
343a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
343b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
343c0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
343d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
343e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
34420 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
34430 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  n Visual Studio 
34440 50 61 63 6b 61 67 65 20 48 61 6e 64 6c 69 6e 67  Package Handling
34450 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
34460 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e  e static void In
34470 69 74 69 61 6c 69 7a 65 56 73 50 61 63 6b 61 67  itializeVsPackag
34480 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
34490 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
344a0 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
344b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 67 6c 6f          bool glo
344c0 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
344d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
344e0 65 66 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61  ef Package packa
344f0 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ge..            
34500 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
34510 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
34520 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
34530 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
34550 61 63 6b 61 67 65 20 3d 20 6e 65 77 20 50 61 63  ackage = new Pac
34560 6b 61 67 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  kage();....     
34570 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
34580 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  ge.AssemblyName 
34590 3d 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  = assemblyName;.
345a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
345b0 20 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41   package.GlobalA
345c0 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 67  ssemblyCache = g
345d0 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
345e0 68 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  he;....         
345f0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41         package.A
34600 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
34610 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
34620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34630 20 20 20 22 37 37 41 42 39 41 39 44 2d 37 38 42     "77AB9A9D-78B
34640 39 2d 34 42 41 37 2d 39 31 41 43 2d 38 37 33 46  9-4BA7-91AC-873F
34650 35 33 33 38 46 31 44 32 22 29 3b 0d 0a 0d 0a 20  5338F1D2");.... 
34660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
34670 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64  ackage.PackageId
34680 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20   = new Guid(..  
34690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346a0 20 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37    "DCBE6C8D-0E57
346b0 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37  -4099-A183-98FF7
346c0 34 43 36 34 44 39 43 22 29 3b 0d 0a 0d 0a 20 20  4C64D9C");....  
346d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
346e0 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 20  ckage.ServiceId 
346f0 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
34700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34710 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d   "DCBE6C8D-0E57-
34720 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34  4099-A183-98FF74
34730 43 36 34 44 39 44 22 29 3b 0d 0a 0d 0a 20 20 20  C64D9D");....   
34740 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
34750 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
34760 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
34770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34780 20 20 20 22 30 45 42 41 41 42 36 45 2d 43 41 38     "0EBAAB6E-CA8
34790 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36  0-4B4A-8DDF-CBE6
347a0 42 46 30 35 38 43 37 31 22 29 3b 0d 0a 0d 0a 20  BF058C71");.... 
347b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
347c0 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
347d0 64 65 72 49 64 20 3d 20 6e 65 77 20 47 75 69 64  derId = new Guid
347e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
347f0 20 20 20 20 20 20 20 22 30 45 42 41 41 42 36 45         "0EBAAB6E
34800 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d  -CA80-4B4A-8DDF-
34810 43 42 45 36 42 46 30 35 38 43 37 30 22 29 3b 0d  CBE6BF058C70");.
34820 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
34830 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34840 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
34850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
34890 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
348a0 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56  static bool AddV
348b0 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
348c0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
348d0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
348e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
348f0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
34900 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
34910 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
34920 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
34930 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
34940 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
34950 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
34960 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
34970 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
34980 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
34990 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
349a0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
349b0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
349c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
349d0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
349e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
349f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34a00 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
34a10 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
34a20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34a30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
34a40 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
34a50 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
34a60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
34a70 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
34a80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34a90 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
34aa0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
34ab0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
34ad0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
34ae0 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
34af0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
34b00 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
34b10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34b20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
34b30 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
34b40 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
34b50 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72   suffix, perUser
34b60 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
34b70 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
34b80 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
34b90 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
34ba0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
34bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34bc0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
34bd0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
34be0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
34bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
34c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34c10 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
34c20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34c30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34c40 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
34c50 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
34c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34c70 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
34c80 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
34c90 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
34ca0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
34cb0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
34cc0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
34cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34ce0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
34cf0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
34d00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
34d10 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
34d20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
34d30 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
34d40 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
34d50 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
34d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
34d70 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74  y, "Packages", t
34d80 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
34d90 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
34da0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
34dc0 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
34dd0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
34de0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e00 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
34e10 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
34e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e30 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
34e40 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
34e50 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67  key: {0}\\Packag
34e60 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
34e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e80 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
34e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ea0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34ec0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
34ee0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
34ef0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
34f00 2a 57 41 52 4e 49 4e 47 2a 20 43 68 61 6e 67 69  *WARNING* Changi
34f10 6e 67 20 61 6e 79 20 6f 66 20 74 68 65 73 65 20  ng any of these 
34f20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6c 69 6b 65  values will like
34f30 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
34f40 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
34f50 20 72 65 71 75 69 72 65 20 61 20 6e 65 77 20 22   require a new "
34f60 70 61 63 6b 61 67 65 20 6c 6f 61 64 20 6b 65 79  package load key
34f70 22 20 28 50 4c 4b 29 20 74 6f 20 62 65 0d 0a 20  " (PLK) to be.. 
34f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f90 20 20 20 2f 2f 20 20 20 20 20 20 20 67 65 6e 65     //       gene
34fa0 72 61 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74  rated in order t
34fb0 6f 20 70 72 6f 70 65 72 6c 79 20 73 75 70 70 6f  o properly suppo
34fc0 72 74 20 6c 6f 61 64 69 6e 67 20 74 68 65 0d 0a  rt loading the..
34fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fe0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 61 63      //       pac
34ff0 6b 61 67 65 20 69 6e 74 6f 20 56 69 73 75 61 6c  kage into Visual
35000 20 53 74 75 64 69 6f 20 32 30 30 38 20 61 6e 64   Studio 2008 and
35010 20 65 61 72 6c 69 65 72 20 77 69 74 68 6f 75 74   earlier without
35020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35030 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
35040 68 65 20 6d 61 74 63 68 69 6e 67 20 56 69 73 75  he matching Visu
35050 61 6c 20 53 74 75 64 69 6f 20 53 44 4b 20 62 65  al Studio SDK be
35060 69 6e 67 20 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a  ing installed...
35070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35080 20 20 20 20 2f 2f 20 20 20 20 20 20 20 50 6c 65      //       Ple
35090 61 73 65 20 72 65 66 65 72 20 74 6f 20 74 68 65  ase refer to the
350a0 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
350b0 72 5c 70 6c 6b 2e 74 78 74 22 20 66 69 6c 65 0d  r\plk.txt" file.
350c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
350d0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f       //       fo
350e0 72 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 6f  r the existing o
350f0 66 66 69 63 69 61 6c 20 76 61 6c 75 65 73 20 61  fficial values a
35100 6e 64 20 75 70 64 61 74 65 20 74 68 65 6d 20 69  nd update them i
35110 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
35120 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
35130 6e 65 63 65 73 73 61 72 79 2e 20 20 41 6c 73 6f  necessary.  Also
35140 2c 20 74 68 65 20 6e 65 77 6c 79 20 67 65 6e 65  , the newly gene
35150 72 61 74 65 64 20 70 61 63 6b 61 67 65 20 6c 6f  rated package lo
35160 61 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ad..            
35170 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
35180 20 6b 65 79 20 69 74 73 65 6c 66 2c 20 77 68 69   key itself, whi
35190 63 68 20 69 73 20 61 20 31 32 38 20 63 68 61 72  ch is a 128 char
351a0 61 63 74 65 72 20 61 6c 70 68 61 6e 75 6d 65 72  acter alphanumer
351b0 69 63 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ic..            
351c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
351d0 20 73 74 72 69 6e 67 2c 20 6d 75 73 74 20 62 65   string, must be
351e0 20 70 6c 61 63 65 64 20 69 6e 20 74 68 65 20 72   placed in the r
351f0 65 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20 6e  esource string n
35200 61 6d 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  amed..          
35210 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
35220 20 20 20 22 34 30 30 22 20 69 6e 20 74 68 65 20     "400" in the 
35230 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72  "SQLite.Designer
35240 5c 56 53 50 61 63 6b 61 67 65 2e 72 65 73 78 22  \VSPackage.resx"
35250 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20   file..         
35260 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
35270 20 20 20 20 61 6e 64 20 74 68 65 6e 20 74 68 65      and then the
35280 20 64 65 73 69 67 6e 65 72 20 61 73 73 65 6d 62   designer assemb
35290 6c 79 20 69 74 73 65 6c 66 20 6d 75 73 74 20 62  ly itself must b
352a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
352b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
352c0 72 65 63 6f 6d 70 69 6c 65 64 2e 20 20 41 73 20  recompiled.  As 
352d0 6f 66 20 74 68 69 73 20 77 72 69 74 69 6e 67 20  of this writing 
352e0 28 69 6e 20 46 65 62 72 75 61 72 79 20 32 30 31  (in February 201
352f0 32 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2),..           
35300 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
35310 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    the following 
35320 55 52 4c 20 69 73 20 74 68 65 20 70 72 6f 70 65  URL is the prope
35330 72 20 70 6c 61 63 65 20 74 6f 20 67 65 6e 65 72  r place to gener
35340 61 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ate..           
35350 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
35360 20 20 70 61 63 6b 61 67 65 20 6c 6f 61 64 20 6b    package load k
35370 65 79 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  eys:..          
35380 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
35390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353a0 20 20 2f 2f 20 20 20 20 20 20 20 68 74 74 70 3a    //       http:
353b0 2f 2f 6d 73 64 6e 2e 6d 69 63 72 6f 73 6f 66 74  //msdn.microsoft
353c0 2e 63 6f 6d 2f 65 6e 2d 75 73 2f 76 73 74 75 64  .com/en-us/vstud
353d0 69 6f 2f 63 63 36 35 35 37 39 35 0d 0a 20 20 20  io/cc655795..   
353e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
35400 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
35410 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
35420 70 61 63 6b 61 67 65 4b 65 79 20 3d 0d 0a 20 20  packageKey =..  
35430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35440 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
35450 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
35460 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20  ubKey(subKey,.. 
35470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35480 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
35490 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
354a0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
354b0 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
354c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354d0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
354e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
354f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35510 20 20 69 66 20 28 70 61 63 6b 61 67 65 4b 65 79    if (packageKey
35520 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
35530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35540 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35560 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
35570 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
35580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35590 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
355a0 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
355b0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
355c0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
355d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355e0 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61        key, packa
355f0 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
35600 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
35610 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
35620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35630 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
35640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35650 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
35660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35670 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
35680 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
35690 61 63 6b 61 67 65 4b 65 79 2c 20 6e 75 6c 6c 2c  ackageKey, null,
356a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
356b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
356c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
356d0 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67   Designer Packag
356e0 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29  e", ProjectName)
356f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
35710 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
35720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35730 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
35740 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
35750 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
35760 22 43 6c 61 73 73 22 2c 0d 0a 20 20 20 20 20 20  "Class",..      
35770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35780 20 20 20 20 20 20 22 53 51 4c 69 74 65 2e 44 65        "SQLite.De
35790 73 69 67 6e 65 72 2e 53 51 4c 69 74 65 50 61 63  signer.SQLitePac
357a0 6b 61 67 65 22 2c 20 77 68 61 74 49 66 2c 20 76  kage", whatIf, v
357b0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
357c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357d0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
357e0 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
357f0 61 67 65 4b 65 79 2c 20 22 43 6f 64 65 42 61 73  ageKey, "CodeBas
35800 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
35810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35820 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49   fileName, whatI
35830 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
35840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35850 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
35860 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
35870 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 44 22  packageKey, "ID"
35880 2c 20 34 30 30 2c 20 77 68 61 74 49 66 2c 0d 0a  , 400, whatIf,..
35890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358a0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
358b0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
358c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358d0 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
358e0 79 20 3d 20 47 65 74 53 79 73 74 65 6d 44 69 72  y = GetSystemDir
358f0 65 63 74 6f 72 79 28 77 6f 77 36 34 29 3b 0d 0a  ectory(wow64);..
35900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35910 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
35920 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29  rectory == null)
35930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
35950 72 65 63 74 6f 72 79 20 3d 20 53 74 72 69 6e 67  rectory = String
35960 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20  .Empty;....     
35970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35980 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
35990 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
359a0 67 65 4b 65 79 2c 20 22 49 6e 70 72 6f 63 53 65  geKey, "InprocSe
359b0 72 76 65 72 33 32 22 2c 0d 0a 20 20 20 20 20 20  rver32",..      
359c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359d0 20 20 20 20 20 20 50 61 74 68 2e 43 6f 6d 62 69        Path.Combi
359e0 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d  ne(directory, "m
359f0 73 63 6f 72 65 65 2e 64 6c 6c 22 29 2c 0d 0a 20  scoree.dll"),.. 
35a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a10 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
35a20 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
35a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a40 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
35a50 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
35a60 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 6d  packageKey, "Com
35a70 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a 20 20 20 20  panyName",..    
35a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a90 20 20 20 20 20 20 20 20 22 68 74 74 70 3a 2f 2f          "http://
35aa0 73 79 73 74 65 6d 2e 64 61 74 61 2e 73 71 6c 69  system.data.sqli
35ab0 74 65 2e 6f 72 67 2f 22 2c 20 77 68 61 74 49 66  te.org/", whatIf
35ac0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
35ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ae0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
35af0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
35b00 61 63 6b 61 67 65 4b 65 79 2c 20 22 4d 69 6e 45  ackageKey, "MinE
35b10 64 69 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20  dition",..      
35b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b30 20 20 20 20 20 20 22 73 74 61 6e 64 61 72 64 22        "standard"
35b40 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
35b50 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
35b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
35b70 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
35b80 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
35b90 79 2c 20 22 50 72 6f 64 75 63 74 4e 61 6d 65 22  y, "ProductName"
35ba0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
35bc0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
35bd0 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61  } Designer Packa
35be0 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  ge", ProjectName
35bf0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
35c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c10 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
35c20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35c30 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
35c40 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
35c50 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
35c60 20 22 50 72 6f 64 75 63 74 56 65 72 73 69 6f 6e   "ProductVersion
35c70 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
35c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c90 22 31 2e 30 22 2c 20 77 68 61 74 49 66 2c 20 76  "1.0", whatIf, v
35ca0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
35cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cc0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
35cd0 65 67 69 73 74 72 79 4b 65 79 20 74 6f 6f 6c 62  egistryKey toolb
35ce0 6f 78 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20  oxKey =..       
35cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d00 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
35d10 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
35d20 62 4b 65 79 28 70 61 63 6b 61 67 65 4b 65 79 2c  bKey(packageKey,
35d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d50 20 20 22 54 6f 6f 6c 62 6f 78 22 2c 20 77 68 61    "Toolbox", wha
35d60 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
35d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35da0 20 20 20 20 20 20 20 69 66 20 28 74 6f 6f 6c 62         if (toolb
35db0 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  oxKey == null)..
35dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35dd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
35e00 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
35e10 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
35e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e30 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
35e40 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
35e50 69 73 74 72 79 20 6b 65 79 3a 20 22 20 2b 0d 0a  istry key: " +..
35e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e80 20 20 20 20 22 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f      "{0}\\Toolbo
35e90 78 22 2c 20 70 61 63 6b 61 67 65 4b 65 79 29 3b  x", packageKey);
35ea0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ec0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
35ed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
35ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35ef0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f10 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
35f20 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
35f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f40 20 20 20 20 20 20 20 20 20 20 74 6f 6f 6c 62 6f            toolbo
35f50 78 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 20 49  xKey, "Default I
35f60 74 65 6d 73 22 2c 20 33 2c 20 77 68 61 74 49 66  tems", 3, whatIf
35f70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f90 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20     verbose);..  
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
35fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fe0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
35ff0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
36000 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
36010 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
36020 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
36030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36040 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d           key, "M
36050 65 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61  enus", true, wha
36060 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
36070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36080 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36090 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
360a0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
360b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
360d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
360e0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
360f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
36110 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
36120 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
36130 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20  \\Menus",..     
36140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36150 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
36160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36170 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
36180 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
36190 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
361a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361b0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
361c0 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
361d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361e0 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
361f0 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
36200 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
36210 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
36220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
36230 2c 20 31 30 30 30 2c 20 33 22 2c 20 77 68 61 74  , 1000, 3", what
36240 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
36250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
36260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36270 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
36280 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
36290 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
362a0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
362b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362c0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65          key, "Se
362d0 72 76 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77  rvices", true, w
362e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
362f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36300 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36310 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
36320 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
36330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36340 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36350 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
36360 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
36370 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
36380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36390 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
363a0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
363b0 30 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a  0}\\Services",..
363c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363d0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
363e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
363f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
36400 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
36410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36420 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
36430 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
36440 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
36450 73 65 72 76 69 63 65 4b 65 79 20 3d 0d 0a 20 20  serviceKey =..  
36460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36470 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
36480 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
36490 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20  ubKey(subKey,.. 
364a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364b0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
364c0 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53  ge.ServiceId.ToS
364d0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
364e0 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
364f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36500 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
36510 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
36520 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36540 20 20 69 66 20 28 73 65 72 76 69 63 65 4b 65 79    if (serviceKey
36550 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
36560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36570 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36590 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
365a0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
365b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365c0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
365d0 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
365e0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
365f0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
36600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36610 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61        key, packa
36620 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53  ge.ServiceId.ToS
36630 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
36640 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
36650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36660 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
36670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36680 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
36690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366a0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
366b0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73  elper.SetValue(s
366c0 65 72 76 69 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c  erviceKey, null,
366d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
366e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
366f0 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
36700 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
36710 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  mat), whatIf,.. 
36720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36730 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
36740 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
36750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36760 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
36770 65 74 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b  etValue(serviceK
36780 65 79 2c 20 22 4e 61 6d 65 22 2c 0d 0a 20 20 20  ey, "Name",..   
36790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367a0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
367b0 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69  Format("{0} Desi
367c0 67 6e 65 72 20 53 65 72 76 69 63 65 22 2c 20 50  gner Service", P
367d0 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20  rojectName),..  
367e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367f0 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
36800 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
36810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36820 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36830 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
36840 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36850 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
36860 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
36870 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
368a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
368b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
368c0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
368d0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
368e0 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a  moveVsPackage(..
368f0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
36900 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
36910 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
36920 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
36930 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
36940 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
36950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
36960 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
36970 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
36980 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
36990 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
369a0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
369b0 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
369c0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
369d0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
369e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
369f0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
36a00 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
36a10 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
36a20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
36a30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
36a40 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
36a50 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
36a60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36a70 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
36a80 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
36a90 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
36aa0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
36ab0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
36ac0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
36ad0 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
36ae0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
36af0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36b00 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
36b10 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
36b20 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
36b30 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
36b40 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
36b50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
36b60 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
36b70 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
36b80 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
36b90 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
36ba0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
36bb0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
36bc0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
36bd0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
36be0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
36bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36c00 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
36c10 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
36c20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
36c30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36c40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
36c50 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
36c60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
36c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c80 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
36c90 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
36ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cb0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
36cc0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
36cd0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
36ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cf0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
36d00 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
36d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36d20 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
36d40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36d50 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
36d60 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
36d70 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
36d80 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
36d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36da0 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63         key, "Pac
36db0 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68  kages", true, wh
36dc0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
36dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36de0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36df0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
36e00 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
36e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36e30 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
36e40 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
36e50 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
36e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e70 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
36e80 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
36e90 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20  }\\Packages",.. 
36ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36eb0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
36ec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36ed0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
36ee0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
36ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
36f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36f10 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
36f20 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
36f30 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
36f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f50 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
36f60 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74  e.PackageId.ToSt
36f70 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
36f80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36f90 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
36fa0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
36fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
36fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36fd0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
36fe0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
36ff0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
37000 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
37010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37020 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e         key, "Men
37030 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  us", true, whatI
37040 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
37050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37070 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
37080 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
37090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
370a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
370b0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
370c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
370d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
370e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
370f0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
37100 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
37110 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20  Menus",..       
37120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37130 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
37140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37150 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
37160 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
37170 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
37180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37190 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
371a0 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20  .DeleteValue(.. 
371b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371c0 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
371d0 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64  ackage.PackageId
371e0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
371f0 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37210 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20  throwOnMissing, 
37220 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
37230 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
37240 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
37250 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
37260 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
37270 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
37280 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
37290 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
372a0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
372b0 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72 75   "Services", tru
372c0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
372d0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
372e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
372f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
37300 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
37310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37320 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37340 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
37350 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
37360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37370 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
37380 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
37390 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73  y: {0}\\Services
373a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
373b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373c0 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
373d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
373f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37400 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
37410 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
37420 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
37430 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
37440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37450 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
37460 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
37470 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
37480 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
37490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374a0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
374b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
374c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
374d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
374e0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
374f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
37500 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
37510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
37550 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
37560 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
37570 63 65 73 73 56 73 50 61 63 6b 61 67 65 28 0d 0a  cessVsPackage(..
37580 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
37590 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
375a0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
375b0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
375c0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
375d0 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
375e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
375f0 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
37600 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
37610 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
37620 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
37630 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
37640 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
37650 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
37660 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
37670 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
37680 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
37690 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
376a0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
376b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
376c0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
376d0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
376e0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
376f0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
37700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
37710 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
37720 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
37730 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
37740 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
37750 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
37760 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
37770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
37780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37790 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
377a0 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61  d VS callback da
377b0 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
377c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
377d0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
377e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
377f0 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
37800 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
37820 74 75 72 6e 20 41 64 64 56 73 50 61 63 6b 61 67  turn AddVsPackag
37830 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
37840 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
37850 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66   vsVersion, suff
37860 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69  ix, package, pai
37870 72 2e 58 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20  r.X, perUser,.. 
37880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37890 20 20 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66     wow64, whatIf
378a0 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
378b0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
378c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
378d0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
378e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
378f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
37900 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d  emoveVsPackage(.
37910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37920 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
37930 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
37940 20 70 61 63 6b 61 67 65 2c 20 70 65 72 55 73 65   package, perUse
37950 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  r, wow64,..     
37960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
37970 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77  hrowOnMissing, w
37980 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
37990 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
379a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
379b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
379c0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
379d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
379e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
379f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
37a20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
37a30 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 53 65  Visual Studio Se
37a40 74 75 70 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  tup Handling..  
37a50 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
37a60 61 74 69 63 20 76 6f 69 64 20 56 73 44 65 76 45  atic void VsDevE
37a70 6e 76 53 65 74 75 70 4f 75 74 70 75 74 44 61 74  nvSetupOutputDat
37a80 61 52 65 63 65 69 76 65 64 28 0d 0a 20 20 20 20  aReceived(..    
37a90 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 73          object s
37aa0 65 6e 64 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  ender,..        
37ab0 20 20 20 20 44 61 74 61 52 65 63 65 69 76 65 64      DataReceived
37ac0 45 76 65 6e 74 41 72 67 73 20 65 0d 0a 20 20 20  EventArgs e..   
37ad0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
37ae0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37af0 20 20 20 50 72 6f 63 65 73 73 20 70 72 6f 63 65     Process proce
37b00 73 73 20 3d 20 73 65 6e 64 65 72 20 61 73 20 50  ss = sender as P
37b10 72 6f 63 65 73 73 3b 0d 0a 0d 0a 20 20 20 20 20  rocess;....     
37b20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
37b30 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
37b40 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
37b50 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um,..           
37b60 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
37b70 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
37b80 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
37b90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37ba0 20 20 20 56 73 44 65 76 45 6e 76 53 65 74 75 70     VsDevEnvSetup
37bb0 46 6f 72 6d 61 74 2c 20 46 6f 72 44 69 73 70 6c  Format, ForDispl
37bc0 61 79 28 70 72 6f 63 65 73 73 29 2c 0d 0a 20 20  ay(process),..  
37bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
37be0 72 44 69 73 70 6c 61 79 28 65 29 29 2c 20 74 72  rDisplay(e)), tr
37bf0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
37c00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
37c10 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
37c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
37c60 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
37c70 74 61 74 69 63 20 76 6f 69 64 20 56 73 44 65 76  tatic void VsDev
37c80 45 6e 76 53 65 74 75 70 45 72 72 6f 72 44 61 74  EnvSetupErrorDat
37c90 61 52 65 63 65 69 76 65 64 28 0d 0a 20 20 20 20  aReceived(..    
37ca0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 73          object s
37cb0 65 6e 64 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  ender,..        
37cc0 20 20 20 20 44 61 74 61 52 65 63 65 69 76 65 64      DataReceived
37cd0 45 76 65 6e 74 41 72 67 73 20 65 0d 0a 20 20 20  EventArgs e..   
37ce0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
37cf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37d00 20 20 20 50 72 6f 63 65 73 73 20 70 72 6f 63 65     Process proce
37d10 73 73 20 3d 20 73 65 6e 64 65 72 20 61 73 20 50  ss = sender as P
37d20 72 6f 63 65 73 73 3b 0d 0a 0d 0a 20 20 20 20 20  rocess;....     
37d30 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
37d40 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
37d50 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
37d60 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um,..           
37d70 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
37d80 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
37d90 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
37da0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37db0 20 20 20 56 73 44 65 76 45 6e 76 53 65 74 75 70     VsDevEnvSetup
37dc0 46 6f 72 6d 61 74 2c 20 46 6f 72 44 69 73 70 6c  Format, ForDispl
37dd0 61 79 28 70 72 6f 63 65 73 73 29 2c 0d 0a 20 20  ay(process),..  
37de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
37df0 72 44 69 73 70 6c 61 79 28 65 29 29 2c 20 74 72  rDisplay(e)), tr
37e00 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
37e10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
37e20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
37e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
37e70 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
37e80 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73  tatic bool AddVs
37e90 44 65 76 45 6e 76 53 65 74 75 70 28 0d 0a 20 20  DevEnvSetup(..  
37ea0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
37eb0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
37ec0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
37ed0 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20   directory,..   
37ee0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
37ef0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
37f00 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
37f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
37f20 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
37f30 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
37f40 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
37f50 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
37f60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37f70 20 69 66 20 28 70 65 72 55 73 65 72 29 0d 0a 20   if (perUser).. 
37f80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
37fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37fb0 20 20 2f 2f 20 4e 4f 54 45 3a 20 56 69 73 75 61    // NOTE: Visua
37fc0 6c 20 53 74 75 64 69 6f 20 64 6f 65 73 20 6e 6f  l Studio does no
37fd0 74 20 73 75 70 70 6f 72 74 20 72 75 6e 6e 69 6e  t support runnin
37fe0 67 20 69 6e 20 27 73 65 74 75 70 27 0d 0a 20 20  g in 'setup'..  
37ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
38000 20 20 20 20 20 20 20 6d 6f 64 65 20 6f 6e 20 61         mode on a
38010 20 70 65 72 2d 75 73 65 72 20 62 61 73 69 73 3b   per-user basis;
38020 20 74 68 65 72 65 66 6f 72 65 2c 20 73 6b 69 70   therefore, skip
38030 20 72 75 6e 6e 69 6e 67 0d 0a 20 20 20 20 20 20   running..      
38040 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
38050 20 20 20 69 74 20 69 6e 20 74 68 61 74 20 63 61     it in that ca
38060 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se...           
38070 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
38080 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
38090 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
380a0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
380b0 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  dium,..         
380c0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
380d0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
380e0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
380f0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
38100 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56 69               "Vi
38110 73 75 61 6c 20 53 74 75 64 69 6f 20 7b 30 7d 20  sual Studio {0} 
38120 27 73 65 74 75 70 27 20 6d 6f 64 65 20 69 73 20  'setup' mode is 
38130 70 65 72 2d 6d 61 63 68 69 6e 65 20 6f 6e 6c 79  per-machine only
38140 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
38150 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70             "skip
38160 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73  ping...", ForDis
38170 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29  play(vsVersion))
38180 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
38190 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
381a0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
381b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
381c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
381d0 50 72 6f 63 65 73 73 53 74 61 72 74 49 6e 66 6f  ProcessStartInfo
381e0 20 73 74 61 72 74 49 6e 66 6f 20 3d 20 6e 65 77   startInfo = new
381f0 20 50 72 6f 63 65 73 73 53 74 61 72 74 49 6e 66   ProcessStartInf
38200 6f 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  o();....        
38210 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
38220 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 65 74      // NOTE: Set
38230 20 74 68 65 20 63 6f 72 65 20 70 72 6f 70 65 72   the core proper
38240 74 69 65 73 20 66 6f 72 20 74 68 65 20 70 72 6f  ties for the pro
38250 63 65 73 73 20 74 6f 20 73 74 61 72 74 2e 20 20  cess to start.  
38260 49 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  In this..       
38270 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
38280 73 65 2c 20 77 65 20 61 72 65 20 73 74 61 72 74  se, we are start
38290 69 6e 67 20 74 68 65 20 70 72 69 6d 61 72 79 20  ing the primary 
382a0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 65 78  Visual Studio ex
382b0 65 63 75 74 61 62 6c 65 0d 0a 20 20 20 20 20 20  ecutable..      
382c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28        //       (
382d0 64 65 76 65 6e 76 2e 65 78 65 29 20 69 6e 20 22  devenv.exe) in "
382e0 73 65 74 75 70 22 20 6d 6f 64 65 2c 20 73 6f 20  setup" mode, so 
382f0 74 68 61 74 20 69 74 20 63 61 6e 20 72 65 66 72  that it can refr
38300 65 73 68 20 69 74 73 0d 0a 20 20 20 20 20 20 20  esh its..       
38310 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69       //       li
38320 73 74 20 6f 66 20 69 6e 73 74 61 6c 6c 65 64 20  st of installed 
38330 70 61 63 6b 61 67 65 73 20 61 6e 64 20 74 68 65  packages and the
38340 69 72 20 61 73 73 6f 63 69 61 74 65 64 20 72 65  ir associated re
38350 73 6f 75 72 63 65 73 2e 0d 0a 20 20 20 20 20 20  sources...      
38360 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
38370 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e        startInfo.
38380 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
38390 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
383a0 79 2c 20 22 64 65 76 65 6e 76 2e 65 78 65 22 29  y, "devenv.exe")
383b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ;..            s
383c0 74 61 72 74 49 6e 66 6f 2e 41 72 67 75 6d 65 6e  tartInfo.Argumen
383d0 74 73 20 3d 20 22 2f 73 65 74 75 70 22 3b 0d 0a  ts = "/setup";..
383e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
383f0 74 49 6e 66 6f 2e 57 6f 72 6b 69 6e 67 44 69 72  tInfo.WorkingDir
38400 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f  ectory = directo
38410 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ry;....         
38420 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
38430 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 65 74 20     // NOTE: Set 
38440 74 68 65 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67  the boolean flag
38450 20 70 72 6f 70 65 72 74 69 65 73 20 74 68 61 74   properties that
38460 20 72 65 71 75 69 72 65 20 6e 6f 6e 2d 64 65 66   require non-def
38470 61 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 20  ault..          
38480 20 20 2f 2f 20 20 20 20 20 20 20 76 61 6c 75 65    //       value
38490 73 20 66 6f 72 20 74 68 65 20 70 72 6f 63 65 73  s for the proces
384a0 73 20 74 6f 20 73 74 61 72 74 2e 20 20 49 6e 20  s to start.  In 
384b0 74 68 69 73 20 63 61 73 65 2c 20 77 65 20 64 6f  this case, we do
384c0 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20   not..          
384d0 20 20 2f 2f 20 20 20 20 20 20 20 77 61 6e 74 20    //       want 
384e0 74 68 65 20 73 68 65 6c 6c 20 74 6f 20 62 65 20  the shell to be 
384f0 75 73 65 64 20 66 6f 72 20 73 74 61 72 74 69 6e  used for startin
38500 67 20 74 68 65 20 70 72 6f 63 65 73 73 2e 20 20  g the process.  
38510 49 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  In..            
38520 2f 2f 20 20 20 20 20 20 20 61 64 64 69 74 69 6f  //       additio
38530 6e 2c 20 62 6f 74 68 20 73 74 61 6e 64 61 72 64  n, both standard
38540 20 6f 75 74 70 75 74 20 61 6e 64 20 65 72 72 6f   output and erro
38550 72 20 64 61 74 61 20 73 68 6f 75 6c 64 20 62 65  r data should be
38560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
38570 20 20 20 20 20 20 20 72 65 64 69 72 65 63 74 65         redirecte
38580 64 2c 20 73 6f 20 69 74 20 63 61 6e 20 62 65 20  d, so it can be 
38590 6c 6f 67 67 65 64 20 70 72 6f 70 65 72 6c 79 2e  logged properly.
385a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
385b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
385c0 61 72 74 49 6e 66 6f 2e 55 73 65 53 68 65 6c 6c  artInfo.UseShell
385d0 45 78 65 63 75 74 65 20 3d 20 66 61 6c 73 65 3b  Execute = false;
385e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
385f0 61 72 74 49 6e 66 6f 2e 52 65 64 69 72 65 63 74  artInfo.Redirect
38600 53 74 61 6e 64 61 72 64 4f 75 74 70 75 74 20 3d  StandardOutput =
38610 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
38620 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 52 65      startInfo.Re
38630 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 45 72  directStandardEr
38640 72 6f 72 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  ror = true;.... 
38650 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65             Proce
38660 73 73 20 70 72 6f 63 65 73 73 20 3d 20 6e 65 77  ss process = new
38670 20 50 72 6f 63 65 73 73 28 29 3b 0d 0a 0d 0a 20   Process();.... 
38680 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 65             proce
38690 73 73 2e 53 74 61 72 74 49 6e 66 6f 20 3d 20 73  ss.StartInfo = s
386a0 74 61 72 74 49 6e 66 6f 3b 0d 0a 0d 0a 20 20 20  tartInfo;....   
386b0 20 20 20 20 20 20 20 20 20 70 72 6f 63 65 73 73           process
386c0 2e 4f 75 74 70 75 74 44 61 74 61 52 65 63 65 69  .OutputDataRecei
386d0 76 65 64 20 2b 3d 20 6e 65 77 20 44 61 74 61 52  ved += new DataR
386e0 65 63 65 69 76 65 64 45 76 65 6e 74 48 61 6e 64  eceivedEventHand
386f0 6c 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ler(..          
38700 20 20 20 20 20 20 56 73 44 65 76 45 6e 76 53 65        VsDevEnvSe
38710 74 75 70 4f 75 74 70 75 74 44 61 74 61 52 65 63  tupOutputDataRec
38720 65 69 76 65 64 29 3b 0d 0a 0d 0a 20 20 20 20 20  eived);....     
38730 20 20 20 20 20 20 20 70 72 6f 63 65 73 73 2e 45         process.E
38740 72 72 6f 72 44 61 74 61 52 65 63 65 69 76 65 64  rrorDataReceived
38750 20 2b 3d 20 6e 65 77 20 44 61 74 61 52 65 63 65   += new DataRece
38760 69 76 65 64 45 76 65 6e 74 48 61 6e 64 6c 65 72  ivedEventHandler
38770 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
38780 20 20 20 56 73 44 65 76 45 6e 76 53 65 74 75 70     VsDevEnvSetup
38790 45 72 72 6f 72 44 61 74 61 52 65 63 65 69 76 65  ErrorDataReceive
387a0 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  d);....         
387b0 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
387c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
387d0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
387e0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
387f0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
38800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38810 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 6