System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a82ea2cf00a6e5ac2c4c17f094e2678c50ad7238:


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 4e 61 6d  ing invariantNam
03d0: 65 2c 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f  e,      /* 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 22 77 68 61   allowed in "wha
9320: 74 2d 69 66 22 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 22  afe because in "
aff0: 77 68 61 74 2d 69 66 22 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 22 77       //       "w
c220: 68 61 74 2d 69 66 22 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 22 77 68 61 74 2d  rating in "what-
c710: 69 66 22 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 22 77       //       "w
c890: 68 61 74 2d 69 66 22 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 73 74 72 69 6e 67 20 69 6e 76 61 72 69  te string invari
e940: 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  antName;..      
e950: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
e960: 69 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d  ing InvariantNam
e970: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
e980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e990: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69    get { return i
e9a0: 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 20 7d 0d  nvariantName; }.
e9b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e9c0: 20 73 65 74 20 7b 20 69 6e 76 61 72 69 61 6e 74   set { invariant
e9d0: 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
e9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ea00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
ea50: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
ea60: 66 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b  factoryTypeName;
ea70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
ea80: 62 6c 69 63 20 73 74 72 69 6e 67 20 46 61 63 74  blic string Fact
ea90: 6f 72 79 54 79 70 65 4e 61 6d 65 0d 0a 20 20 20  oryTypeName..   
eaa0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
eac0: 7b 20 72 65 74 75 72 6e 20 66 61 63 74 6f 72 79  { return factory
ead0: 54 79 70 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  TypeName; }..   
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
eaf0: 20 7b 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61   { factoryTypeNa
eb00: 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
eb10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
eb20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
eb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
eb70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
eb80: 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e  rivate AssemblyN
eb90: 61 6d 65 20 70 72 6f 76 69 64 65 72 41 73 73 65  ame providerAsse
eba0: 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
ebb0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73         public As
ebc0: 73 65 6d 62 6c 79 4e 61 6d 65 20 50 72 6f 76 69  semblyName Provi
ebd0: 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d  derAssemblyName.
ebe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f  get { return pro
ec10: 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  viderAssemblyNam
ec20: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
ec30: 20 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76        set { prov
ec40: 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  iderAssemblyName
ec50: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
ec60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ec70: 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ecc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
ecd0: 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
ece0: 65 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62  e designerAssemb
ecf0: 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
ed00: 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
ed10: 6d 62 6c 79 4e 61 6d 65 20 44 65 73 69 67 6e 65  mblyName Designe
ed20: 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20  rAssemblyName.. 
ed30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
ed50: 74 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67  t { return desig
ed60: 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b  nerAssemblyName;
ed70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ed80: 20 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e      set { design
ed90: 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
eda0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
edb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
edc0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
edd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ee10: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ee20: 74 65 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73  te bool globalAs
ee30: 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20  semblyCache;..  
ee40: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ee50: 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65   bool GlobalAsse
ee60: 6d 62 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20  mblyCache..     
ee70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ee80: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ee90: 72 65 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73  return globalAss
eea0: 65 6d 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20  emblyCache; }.. 
eeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
eec0: 65 74 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d  et { globalAssem
eed0: 62 6c 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65  blyCache = value
eee0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
eef0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ef00: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ef10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef40: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ef50: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
ef60: 64 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20  d packageId;..  
ef70: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ef80: 20 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d   Guid PackageId.
ef90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
efa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efb0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63  get { return pac
efc0: 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  kageId; }..     
efd0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
efe0: 20 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c   packageId = val
eff0: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
f000: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f010: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f050: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f060: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
f070: 75 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a  uid serviceId;..
f080: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
f090: 69 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49  ic Guid ServiceI
f0a0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
f0b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f0c0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
f0d0: 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20  erviceId; }..   
f0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
f0f0: 20 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76   { serviceId = v
f100: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
f110: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f120: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f170: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f180: 20 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65   Guid dataSource
f190: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
f1a0: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
f1b0: 61 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  aSourceId..     
f1c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f1d0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
f1e0: 72 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63  return dataSourc
f1f0: 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  eId; }..        
f200: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61          set { da
f210: 74 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c  taSourceId = val
f220: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
f230: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f240: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f290: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
f2a0: 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72  uid dataProvider
f2b0: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
f2c0: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
f2d0: 61 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20  aProviderId..   
f2e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
f300: 7b 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f  { return dataPro
f310: 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20  viderId; }..    
f320: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
f330: 7b 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  { dataProviderId
f340: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
f350: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f360: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
f370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
f3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f3c0: 76 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74  vate Guid adoNet
f3d0: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20  TechnologyId;.. 
f3e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
f3f0: 63 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63  c Guid AdoNetTec
f400: 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20  hnologyId..     
f410: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f420: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
f430: 72 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63  return adoNetTec
f440: 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20  hnologyId; }..  
f450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
f460: 74 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f  t { adoNetTechno
f470: 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20  logyId = value; 
f480: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
f490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
f4a0: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
f4b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
f4c0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
f4d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f520: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
f530: 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73  nfiguration Clas
f540: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
f550: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
f560: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  Configuration.. 
f570: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f580: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
f590: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
f5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f5b0: 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20  vate const char 
f5c0: 53 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20  Switch = '-';.. 
f5d0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f5e0: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c  te const char Al
f5f0: 74 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a  tSwitch = '/';..
f600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f650: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f660: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
f670: 72 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20  readonly char[] 
f680: 53 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d  SwitchChars = {.
f690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f6a0: 20 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74   Switch, AltSwit
f6b0: 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
f6c0: 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
f6d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f710: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f720: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
f730: 73 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69  st string Invari
f740: 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65  antName = "Syste
f750: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d  m.Data.SQLite";.
f760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f770: 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
f780: 67 20 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61  g Ef6InvariantNa
f790: 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
f7a0: 61 2e 53 51 4c 69 74 65 2e 45 46 36 22 3b 0d 0a  a.SQLite.EF6";..
f7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f800: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f810: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
f820: 74 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70  tring FactoryTyp
f830: 65 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20  eName =..       
f840: 20 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d           "System
f850: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
f860: 69 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a 0d 0a  iteFactory";....
f870: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
f880: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
f890: 20 45 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e   Ef6FactoryTypeN
f8a0: 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ame =..         
f8b0: 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44         "System.D
f8c0: 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 53  ata.SQLite.EF6.S
f8d0: 51 4c 69 74 65 50 72 6f 76 69 64 65 72 46 61 63  QLiteProviderFac
f8e0: 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20  tory";..        
f8f0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
f900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f950: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f960: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
f970: 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20   Static Data..  
f980: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f990: 65 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c  e static Assembl
f9a0: 79 20 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d  y systemEf6Assem
f9b0: 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bly;..          
f9c0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
f9d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
fa20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
fa30: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44  region Private D
fa40: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
fa50: 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
fa60: 79 4e 61 6d 65 20 63 6f 72 65 41 73 73 65 6d 62  yName coreAssemb
fa70: 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
fa80: 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73       private Ass
fa90: 65 6d 62 6c 79 4e 61 6d 65 20 6c 69 6e 71 41 73  emblyName linqAs
faa0: 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
fab0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
fac0: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 65 66   AssemblyName ef
fad0: 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a  6AssemblyName;..
fae0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
faf0: 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  ate AssemblyName
fb00: 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c   designerAssembl
fb10: 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
fb20: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
fb30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
fb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb80: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
fb90: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
fba0: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
fbb0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
fbc0: 74 65 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te Configuration
fbd0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
fbe0: 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
fbf0: 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
fc00: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f         string lo
fc10: 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  gFileName,..    
fc20: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
fc30: 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
fc50: 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
fc60: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
fc70: 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71       string linq
fc80: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
fc90: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
fca0: 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a  g ef6FileName,..
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcc0: 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
fcd0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
fce0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
fcf0: 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
fd00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fd10: 20 20 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67     string config
fd20: 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
fd30: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
fd40: 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
fd50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fd60: 20 20 20 73 74 72 69 6e 67 20 64 65 62 75 67 46     string debugF
fd70: 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
fd80: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
fd90: 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  raceFormat,..   
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
fdb0: 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c  tallFlags instal
fdc0: 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20  lFlags,..       
fdd0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
fde0: 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69 6f  iority debugPrio
fdf0: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
fe00: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
fe10: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
fe20: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
fe30: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
fe40: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
fe50: 20 20 20 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c      bool install
fe60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fe70: 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe90: 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65  bool noRuntimeVe
fea0: 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
feb0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 44          bool noD
fec0: 65 73 6b 74 6f 70 2c 0d 0a 20 20 20 20 20 20 20  esktop,..       
fed0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
fee0: 43 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20 20  Compact,..      
fef0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
ff00: 6f 4e 65 74 46 78 32 30 2c 0d 0a 20 20 20 20 20  oNetFx20,..     
ff10: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
ff20: 6e 6f 4e 65 74 46 78 33 35 2c 0d 0a 20 20 20 20  noNetFx35,..    
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
ff40: 20 6e 6f 4e 65 74 46 78 34 30 2c 0d 0a 20 20 20   noNetFx40,..   
ff50: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
ff60: 6c 20 6e 6f 4e 65 74 46 78 34 35 2c 0d 0a 20 20  l noNetFx45,..  
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
ff80: 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 31 2c 0d 0a  ol noNetFx451,..
ff90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffa0: 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 2c 0d 0a  bool noVs2005,..
ffb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffc0: 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c 0d 0a  bool noVs2008,..
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffe0: 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c 0d 0a  bool noVs2010,..
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10000 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 2c 0d 0a  bool noVs2012,..
10010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10020 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 2c 0d 0a  bool noVs2013,..
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10040 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a 20  bool noTrace,.. 
10050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10060 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d 0a  ool noConsole,..
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20 20  bool noLog,..   
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
100a0 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
100b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
100c0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
100d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
100e0 20 62 6f 6f 6c 20 64 65 62 75 67 2c 0d 0a 20 20   bool debug,..  
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10100 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
10120 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20  l confirm..     
10130 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
10140 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10160 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61 73 73  s.assembly = ass
10170 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  embly;..        
10180 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 67          this.log
10190 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69  FileName = logFi
101a0 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
101b0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 69           this.di
101c0 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74  rectory = direct
101d0 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
101e0 20 20 20 20 20 20 74 68 69 73 2e 63 6f 72 65 46        this.coreF
101f0 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69  ileName = coreFi
10200 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
10210 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69           this.li
10220 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e  nqFileName = lin
10230 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  qFileName;..    
10240 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10250 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 65  .ef6FileName = e
10260 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  f6FileName;..   
10270 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10280 73 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  s.designerFileNa
10290 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 46 69 6c  me = designerFil
102a0 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
102b0 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 67          this.reg
102c0 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 72  istryVersion = r
102d0 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d  egistryVersion;.
102e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
102f0 20 74 68 69 73 2e 63 6f 6e 66 69 67 56 65 72 73   this.configVers
10300 69 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65 72 73  ion = configVers
10310 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
10320 20 20 20 20 20 20 74 68 69 73 2e 76 73 56 65 72        this.vsVer
10330 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 73 56  sionSuffix = vsV
10340 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20  ersionSuffix;.. 
10350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10360 68 69 73 2e 64 65 62 75 67 46 6f 72 6d 61 74 20  his.debugFormat 
10370 3d 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a  = debugFormat;..
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10390 74 68 69 73 2e 74 72 61 63 65 46 6f 72 6d 61 74  this.traceFormat
103a0 20 3d 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d   = traceFormat;.
103b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
103c0 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 46 6c 61   this.installFla
103d0 67 73 20 3d 20 69 6e 73 74 61 6c 6c 46 6c 61 67  gs = installFlag
103e0 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
103f0 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 50 72      this.debugPr
10400 69 6f 72 69 74 79 20 3d 20 64 65 62 75 67 50 72  iority = debugPr
10410 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  iority;..       
10420 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 72           this.tr
10430 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 74 72  acePriority = tr
10440 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  acePriority;..  
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10460 69 73 2e 70 65 72 55 73 65 72 20 3d 20 70 65 72  is.perUser = per
10470 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
10480 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74         this.inst
10490 61 6c 6c 20 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a  all = install;..
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104b0 74 68 69 73 2e 77 6f 77 36 34 20 3d 20 77 6f 77  this.wow64 = wow
104c0 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64;..           
104d0 20 20 20 20 20 74 68 69 73 2e 6e 6f 52 75 6e 74       this.noRunt
104e0 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 6e 6f 52  imeVersion = noR
104f0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a  untimeVersion;..
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 74 68 69 73 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d  this.noDesktop =
10520 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20   noDesktop;..   
10530 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10540 73 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 6e 6f  s.noCompact = no
10550 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20  Compact;..      
10560 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
10570 6f 4e 65 74 46 78 32 30 20 3d 20 6e 6f 4e 65 74  oNetFx20 = noNet
10580 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx20;..         
10590 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
105a0 74 46 78 33 35 20 3d 20 6e 6f 4e 65 74 46 78 33  tFx35 = noNetFx3
105b0 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
105c0 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
105d0 34 30 20 3d 20 6e 6f 4e 65 74 46 78 34 30 3b 0d  40 = noNetFx40;.
105e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105f0 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 35 20   this.noNetFx45 
10600 3d 20 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20  = noNetFx45;..  
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10620 69 73 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20  is.noNetFx451 = 
10630 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20 20 20  noNetFx451;..   
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10650 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20 6e 6f 56  s.noVs2005 = noV
10660 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20 20  s2005;..        
10670 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
10680 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30 30 38  s2008 = noVs2008
10690 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
106a0 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 30     this.noVs2010
106b0 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20   = noVs2010;..  
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
106d0 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d 20 6e 6f  is.noVs2012 = no
106e0 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20 20 20  Vs2012;..       
106f0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
10700 56 73 32 30 31 33 20 3d 20 6e 6f 56 73 32 30 31  Vs2013 = noVs201
10710 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  3;..            
10720 20 20 20 20 74 68 69 73 2e 6e 6f 54 72 61 63 65      this.noTrace
10730 20 3d 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20   = noTrace;..   
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10750 73 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f  s.noConsole = no
10760 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20  Console;..      
10770 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
10780 6f 4c 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20  oLog = noLog;.. 
10790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
107a0 68 69 73 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69  his.throwOnMissi
107b0 6e 67 20 3d 20 74 68 72 6f 77 4f 6e 4d 69 73 73  ng = throwOnMiss
107c0 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ing;..          
107d0 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74 49        this.whatI
107e0 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20  f = whatIf;..   
107f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10800 73 2e 64 65 62 75 67 20 3d 20 64 65 62 75 67 3b  s.debug = debug;
10810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10820 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65 20 3d    this.verbose =
10830 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20   verbose;..     
10840 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10850 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66 69 72  confirm = confir
10860 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m;..            
10870 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
10880 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
10890 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
108a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
108e0 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
108f0 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74  ion Private Stat
10900 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
10910 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
10920 73 74 61 74 69 63 20 76 6f 69 64 20 47 65 74 44  static void GetD
10930 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28  efaultFileNames(
10940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10950 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 69 72    ref string dir
10960 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
10970 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
10980 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
10990 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
109a0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 6c 69     ref string li
109b0 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  nqFileName,..   
109c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
109d0 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e   string ef6FileN
109e0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
109f0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
10a00 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
10a10 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
10a20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
10a30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10a40 20 20 20 20 20 69 66 20 28 74 68 69 73 41 73 73       if (thisAss
10a50 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  embly == null)..
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a70 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
10a90 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e  irectory = Path.
10aa0 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65  GetDirectoryName
10ab0 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f  (thisAssembly.Lo
10ac0 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  cation);....    
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10ae0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
10af0 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
10b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10b10 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
10b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b30 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
10b40 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
10b50 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
10b70 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e  taller.CoreFileN
10b80 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
10b90 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c           linqFil
10ba0 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
10bb0 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d  bine(directory,.
10bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10bd0 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4c       Installer.L
10be0 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  inqFileName);...
10bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c00 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50   ef6FileName = P
10c10 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
10c20 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
10c30 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
10c40 61 6c 6c 65 72 2e 45 66 36 46 69 6c 65 4e 61 6d  aller.Ef6FileNam
10c50 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
10c60 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72 46         designerF
10c70 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
10c80 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
10c90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10ca0 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72         Installer
10cb0 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .DesignerFileNam
10cc0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
10cd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10ce0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d20 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
10d30 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
10d40 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 4f 70  tic bool CheckOp
10d50 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
10d60 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
10d70 67 20 61 72 67 0d 0a 20 20 20 20 20 20 20 20 20  g arg..         
10d80 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
10d90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10da0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10db0 72 65 73 75 6c 74 20 3d 20 61 72 67 3b 0d 0a 0d  result = arg;...
10dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10dd0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
10de0 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75 6c  ullOrEmpty(resul
10df0 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
10e00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10e10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 6d      // NOTE: Rem
10e40 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69 6e 67 20  ove all leading 
10e50 73 77 69 74 63 68 20 63 68 61 72 73 2e 0d 0a 20  switch chars... 
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e70 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
10e80 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
10e90 74 20 3d 20 72 65 73 75 6c 74 2e 54 72 69 6d 53  t = result.TrimS
10ea0 74 61 72 74 28 53 77 69 74 63 68 43 68 61 72 73  tart(SwitchChars
10eb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
10ec0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ee0 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f 77 20 6d    // NOTE: How m
10ef0 61 6e 79 20 63 68 61 72 73 20 77 65 72 65 20 72  any chars were r
10f00 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20 20 20 20  emoved?..       
10f10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
10f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f30 20 20 20 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d       int count =
10f40 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d 20 72 65   arg.Length - re
10f50 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  sult.Length;....
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
10f80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
10f90 4f 54 45 3a 20 57 61 73 20 74 68 65 72 65 20 61  OTE: Was there a
10fa0 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d 0a 20 20  t least one?..  
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
10fd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
10fe0 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  unt > 0)..      
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11010 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11030 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4f 6b       // NOTE: Ok
11040 2c 20 72 65 70 6c 61 63 65 20 74 68 65 69 72 20  , replace their 
11050 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20 20 20 20  original..      
11060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11070 20 20 2f 2f 20 20 20 20 20 20 20 61 72 67 75 6d    //       argum
11080 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ent...          
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
110a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
110b0 20 20 20 20 20 20 20 20 20 20 61 72 67 20 3d 20            arg = 
110c0 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20  result;....     
110d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11100 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 69  / NOTE: Yes, thi
11110 73 20 69 73 20 61 20 73 77 69 74 63 68 2e 0d 0a  s is a switch...
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11130 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11150 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
11160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11170 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11180 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
111a0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
111b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
111c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
111d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
11210 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
11220 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
11230 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28 0d 0a 20   MatchOption(.. 
11240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
11250 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20 20 20 20  tring arg,..    
11260 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
11270 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20  ng option..     
11280 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
11290 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
112b0 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ((arg == null) |
112c0 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20 6e 75 6c  | (option == nul
112d0 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
112e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
112f0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
11300 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11310 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28   String.Compare(
11320 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f 6e 2c 20  arg, 0, option, 
11330 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
11340 20 20 20 20 20 20 20 20 61 72 67 2e 4c 65 6e 67          arg.Leng
11350 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  th, StringCompar
11360 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
11370 72 65 43 61 73 65 29 20 3d 3d 20 30 3b 0d 0a 20  reCase) == 0;.. 
11380 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
113a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
113b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
113c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
113d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
113e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
113f0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
11400 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  ol? ParseBoolean
11410 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11420 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 0d 0a     string text..
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
11450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11460 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
11470 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 74  NullOrEmpty(text
11480 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
11490 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
114a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
114b0 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
114d0 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72 73 65 28   (bool.TryParse(
114e0 74 65 78 74 2c 20 6f 75 74 20 76 61 6c 75 65 29  text, out value)
114f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11500 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11510 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  n value;..      
11520 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11540 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
11550 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11560 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
11570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
115b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
115c0 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65  vate static obje
115d0 63 74 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20  ct ParseEnum(.. 
115e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
115f0 79 70 65 20 65 6e 75 6d 54 79 70 65 2c 0d 0a 20  ype enumType,.. 
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
11610 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a 20 20 20  tring text,..   
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
11630 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20 20 20 20  l noCase..      
11640 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
11650 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11660 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11670 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20 6e 75 6c  (enumType == nul
11680 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79 70 65 2e  l) || !enumType.
11690 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20 20 20 20  IsEnum)..       
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
116b0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
116d0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
116e0 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20  rEmpty(text)).. 
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11710 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11740 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11750 20 45 6e 75 6d 2e 50 61 72 73 65 28 65 6e 75 6d   Enum.Parse(enum
11760 54 79 70 65 2c 20 74 65 78 74 2c 20 6e 6f 43 61  Type, text, noCa
11770 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
11780 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117a0 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
117b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117d0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
117e0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
117f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11810 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11820 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
11830 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
11850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11890 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
118a0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
118b0 62 6f 6f 6c 20 49 73 53 79 73 74 65 6d 45 66 36  bool IsSystemEf6
118c0 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c  AssemblyAvailabl
118d0 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
118e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
118f0 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 45 66      if (systemEf
11900 36 41 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  6Assembly != nul
11910 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
11920 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
11930 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
11940 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 20 20 20 20 73 79 73 74 65 6d 45 66 36 41 73 73      systemEf6Ass
11980 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79  embly = Assembly
11990 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c  .ReflectionOnlyL
119a0 6f 61 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  oad(..          
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
119c0 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 4e  stemEf6AssemblyN
119d0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
119f0 28 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62  (systemEf6Assemb
11a00 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
11a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11a30 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
11a40 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
11a50 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
11a60 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
11a90 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
11aa0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ac0 20 20 22 45 6e 74 69 74 79 20 46 72 61 6d 65 77    "Entity Framew
11ad0 6f 72 6b 20 36 20 61 73 73 65 6d 62 6c 79 20 77  ork 6 assembly w
11ae0 61 73 20 72 65 73 6f 6c 76 65 64 2e 22 2c 0d 0a  as resolved.",..
11af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
11b10 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
11b40 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
11b50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11b60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11b80 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
11b90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11bb0 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11be0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
11bf0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
11c00 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
11c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
11c30 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
11c40 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
11c50 20 20 20 20 20 20 20 20 22 45 6e 74 69 74 79 20          "Entity 
11c60 46 72 61 6d 65 77 6f 72 6b 20 36 20 61 73 73 65  Framework 6 asse
11c70 6d 62 6c 79 20 77 61 73 20 6e 6f 74 20 72 65 73  mbly was not res
11c80 6f 6c 76 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  olved.",..      
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
11ca0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
11cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11cc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
11ce0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
11cf0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
11d00 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
11d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
11d50 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
11d60 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d 65  Public Static Me
11d70 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
11d80 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
11d90 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 43   Configuration C
11da0 72 65 61 74 65 44 65 66 61 75 6c 74 28 29 0d 0a  reateDefault()..
11db0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
11dd0 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
11de0 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
11df0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
11e00 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 6e  coreFileName = n
11e10 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
11e20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e        string lin
11e30 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c  qFileName = null
11e40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11e50 20 20 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c     string ef6Fil
11e60 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  eName = null;.. 
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
11e80 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
11e90 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
11ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11eb0 20 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65    GetDefaultFile
11ec0 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
11ee0 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20 63  directory, ref c
11ef0 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66  oreFileName, ref
11f00 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a   linqFileName,..
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 20 20 20 72 65 66 20 65 66 36 46 69 6c 65 4e      ref ef6FileN
11f30 61 6d 65 2c 20 72 65 66 20 64 65 73 69 67 6e 65  ame, ref designe
11f40 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  rFileName);.... 
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11f60 65 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67  eturn new Config
11f70 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  uration(..      
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
11f90 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c 6c  isAssembly, null
11fa0 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 63 6f 72  , directory, cor
11fb0 65 46 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46  eFileName, linqF
11fc0 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
11fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 66                ef
11fe0 36 46 69 6c 65 4e 61 6d 65 2c 20 64 65 73 69 67  6FileName, desig
11ff0 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 6e 75 6c  nerFileName, nul
12000 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a  l, null, null,..
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
12030 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f  ugFormat, TraceO
12040 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 0d  ps.TraceFormat,.
12050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12060 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
12070 73 2e 44 65 66 61 75 6c 74 2c 20 54 72 61 63 65  s.Default, Trace
12080 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74  Priority.Default
12090 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
120a0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
120b0 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20 66 61  rity.Default, fa
120c0 6c 73 65 2c 20 74 72 75 65 2c 20 66 61 6c 73 65  lse, true, false
120d0 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d  , false, false,.
120e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
120f0 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73       false, fals
12100 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
12110 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
12120 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20  alse, false,..  
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12140 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20    false, false, 
12150 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
12160 6c 73 65 2c 20 66 61 6c 73 65 2c 20 74 72 75 65  lse, false, true
12170 2c 20 74 72 75 65 2c 0d 0a 20 20 20 20 20 20 20  , true,..       
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
12190 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
121a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
121b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
121c0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
121d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12200 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
12210 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
12220 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
12230 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
12240 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
12250 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46  ic static bool F
12260 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20  romArgs(..      
12270 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
12280 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20  [] args,..      
12290 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
122a0 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  trict,..        
122b0 20 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e 66          ref Conf
122c0 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
122d0 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
122e0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
122f0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
12300 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
12310 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
12330 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
12340 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12350 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
12360 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  gs == null)..   
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12380 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
12390 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
123a0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
123b0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
123c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
123e0 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e  figuration = Con
123f0 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61 74  figuration.Creat
12400 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20  eDefault();.... 
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12420 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20     int length = 
12430 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  args.Length;....
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
12460 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
12470 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  length; index++)
12480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12490 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124b0 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61 72   string arg = ar
124c0 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  gs[index];....  
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124e0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12500 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20    // NOTE: Skip 
12510 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 74 68 61  any argument tha
12520 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29 20 6f 72  t is null (?) or
12530 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 20   an empty..     
12540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12550 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69     //       stri
12560 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
12580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12590 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
125a0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
125b0 79 28 61 72 67 29 29 0d 0a 20 20 20 20 20 20 20  y(arg))..       
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125d0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
125e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
125f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12610 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
12620 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 6d  e are going to m
12630 6f 64 69 66 79 20 74 68 65 20 6f 72 69 67 69 6e  odify the origin
12640 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20  al argument..   
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12660 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79       //       by
12670 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 6c 65   removing any le
12680 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20 63 68 61  ading option cha
12690 72 61 63 74 65 72 73 3b 0d 0a 20 20 20 20 20 20  racters;..      
126a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126b0 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 72 65    //       there
126c0 66 6f 72 65 2c 20 77 65 20 75 73 65 20 61 20 6e  fore, we use a n
126d0 65 77 20 73 74 72 69 6e 67 20 74 6f 20 68 6f 6c  ew string to hol
126e0 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  d the..         
126f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12700 2f 20 20 20 20 20 20 20 6d 6f 64 69 66 69 65 64  /       modified
12710 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20   argument...    
12720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12730 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12750 73 74 72 69 6e 67 20 6e 65 77 41 72 67 20 3d 20  string newArg = 
12760 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  arg;....        
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
12790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
127a0 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70  OTE: All the sup
127b0 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
127c0 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74  ine options must
127d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
127e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
127f0 20 20 20 62 65 67 69 6e 20 77 69 74 68 20 61 6e     begin with an
12800 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65   option characte
12810 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e 75 73 0d  r (e.g. a minus.
12820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12830 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
12840 20 20 6f 72 20 66 6f 72 77 61 72 64 20 73 6c 61    or forward sla
12850 73 68 29 3b 20 61 74 74 65 6d 70 74 20 74 6f 20  sh); attempt to 
12860 76 61 6c 69 64 61 74 65 20 74 68 61 74 0d 0a 20  validate that.. 
12870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12880 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
12890 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c  now.  If we fail
128a0 20 69 6e 20 73 74 72 69 63 74 20 6d 6f 64 65 2c   in strict mode,
128b0 20 77 65 20 61 72 65 20 64 6f 6e 65 3b 0d 0a 20   we are done;.. 
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
128e0 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20  otherwise, just 
128f0 73 6b 69 70 20 74 68 69 73 20 61 72 67 75 6d 65  skip this argume
12900 6e 74 20 61 6e 64 20 61 64 76 61 6e 63 65 0d 0a  nt and advance..
12910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12920 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
12930 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6f 6e 65   to the next one
12940 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12950 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
12960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12970 20 20 20 20 20 20 20 69 66 20 28 21 43 68 65 63         if (!Chec
12980 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77 41  kOption(ref newA
12990 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rg))..          
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
129b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
129d0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
129e0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
12a10 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
12a20 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
12a30 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a50 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
12a60 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
12a70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a90 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20     "Unsupported 
12aa0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67  command line arg
12ab0 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ument: {0}",..  
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
12ae0 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20  rDisplay(arg)), 
12af0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
12b00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12b20 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
12b50 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
12b80 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
12b90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
12ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12bb0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bd0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c       // NOTE: Al
12be0 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20  l the supported 
12bf0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
12c00 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20  ions must..     
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61 76 65     //       have
12c30 20 61 20 76 61 6c 75 65 3b 20 74 68 65 72 65 66   a value; theref
12c40 6f 72 65 2c 20 61 74 74 65 6d 70 74 20 74 6f 20  ore, attempt to 
12c50 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20  advance..       
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74 20   //       to it 
12c80 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c  now.  If we fail
12c90 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a  , we are done...
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cb0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cd0 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a      index++;....
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cf0 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65          if (inde
12d00 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a 20 20  x >= length)..  
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d40 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
12d50 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
12d60 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
12d90 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
12da0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
12dd0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
12de0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 20 20 20 20 20 20 20 20 20 20 22 4d 69 73 73             "Miss
12e10 69 6e 67 20 76 61 6c 75 65 20 66 6f 72 20 6f 70  ing value for op
12e20 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  tion: {0}",..   
12e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12e50 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74  Display(arg)), t
12e60 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
12e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
12e90 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12ec0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
12f50 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65  he textual value
12f60 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64   of this command
12f70 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20   line..         
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12f90 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 0d  /       option..
12fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12fb0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
12fe0 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d   = args[index];.
12ff0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13000 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
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 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
13030 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68  Figure out which
13040 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
13050 74 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20 20  tion this is..  
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13070 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28        //       (
13080 62 61 73 65 64 20 6f 6e 20 61 20 70 61 72 74 69  based on a parti
13090 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68 29 20 61  al name match) a
130a0 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a 20 20 20  nd then try..   
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
130d0 20 69 6e 74 65 72 70 72 65 74 20 74 68 65 20 74   interpret the t
130e0 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73 20  extual value as 
130f0 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20 20  the correct..   
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13110 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 79       //       ty
13120 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pe...           
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
13140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13150 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61 74           if (Mat
13160 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
13170 20 22 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22   "configVersion"
13180 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13190 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131b0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
131c0 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67 56  guration.configV
131d0 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a  ersion = text;..
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
13220 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
13230 22 63 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20  "confirm"))..   
13240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13250 20 20 20 20 20 7b 0d 0a 20 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 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
13280 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
13290 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132b0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
132c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
13310 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
13320 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
13330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
13350 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
13360 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
13370 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13390 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
133a0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
133b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
133e0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
133f0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
13400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
13430 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
13440 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13460 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
13470 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
134a0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
134d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
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 63                 c
13500 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13540 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
13550 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20 28  tion.confirm = (
13560 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
13570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13580 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135a0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
135b0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f  tion(newArg, "co
135c0 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20  reFileName")).. 
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13610 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.coreFileName
13620 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13640 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
13660 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
13670 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67  n(newArg, "debug
13680 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
13690 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
136c0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
136d0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
136e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13700 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
13710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13720 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13750 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
13760 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
13770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13790 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
137a0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
137b0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
137e0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
137f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
13830 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
13840 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
13850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13860 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
13870 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
13880 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138b0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
138c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138e0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
138f0 0d 0a 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 20 20 20                  
13910 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
13920 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13940 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
13950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13970 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13990 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
139a0 75 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ug = (bool)value
139b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
139c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
139f0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
13a00 67 2c 20 22 64 65 62 75 67 46 6f 72 6d 61 74 22  g, "debugFormat"
13a10 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13a20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
13a50 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f  guration.debugFo
13a60 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20  rmat = text;..  
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
13a90 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 20 3d  ps.DebugFormat =
13aa0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
13ab0 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  ebugFormat;..   
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ad0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13af0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
13b00 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65  tion(newArg, "de
13b10 62 75 67 50 72 69 6f 72 69 74 79 22 29 29 0d 0a  bugPriority"))..
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
13b60 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28  lue = ParseEnum(
13b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b90 20 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72    typeof(TracePr
13ba0 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74  iority), text, t
13bb0 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rue);....       
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bd0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
13be0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
13c30 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
13c40 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
13c70 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
13c80 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
13c90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
13cc0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
13cd0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
13d00 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31  id {0} value: {1
13d10 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
13d40 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
13d50 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
13d90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13db0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
13dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
13df0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
13e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13e40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13e60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
13e70 75 67 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72  ugPriority = (Tr
13e80 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75  acePriority)valu
13e90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13eb0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 50 72  TraceOps.DebugPr
13ec0 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75  iority = configu
13ed0 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f  ration.debugPrio
13ee0 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f10 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
13f20 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
13f30 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e 65 72  ewArg, "designer
13f40 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f80 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
13f90 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.designerFileNa
13fa0 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  me = text;..    
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13fe0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
13ff0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72  ion(newArg, "dir
14000 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20  ectory"))..     
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14020 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14040 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
14050 64 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78 74  directory = text
14060 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14080 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140a0 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49   // NOTE: *SPECI
140b0 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68  AL* Must refresh
140c0 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d   the file names.
140d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
140f0 20 20 20 20 20 20 68 65 72 65 20 62 65 63 61 75        here becau
14100 73 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  se the underlyin
14110 67 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  g directory..   
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
14140 20 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d 0a    has changed...
14150 20 20 20 20 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 2f 2f 0d 0a              //..
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14180 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
14190 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng coreFileName 
141a0 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
141b0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  coreFileName;...
141c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
141d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
141e0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
141f0 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e  rEmpty(coreFileN
14200 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
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 63 6f 72 65 46 69 6c 65 4e         coreFileN
14230 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
14240 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65 4e  leName(coreFileN
14250 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
14280 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
14290 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  reFileName))..  
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
142c0 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  reFileName = Ins
142d0 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e  taller.CoreFileN
142e0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
14310 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  n.coreFileName =
14320 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14350 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
14360 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c  rectory, coreFil
14370 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69         string li
143a0 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e  nqFileName = con
143b0 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46  figuration.linqF
143c0 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
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 69 66 20 28 21 53 74 72          if (!Str
143f0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
14400 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  y(linqFileName))
14410 0d 0a 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 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d    linqFileName =
14440 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
14450 65 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  e(linqFileName);
14460 0d 0a 0d 0a 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 20 20                  
14480 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
14490 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c  lOrEmpty(linqFil
144a0 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
144b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144c0 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c           linqFil
144d0 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65  eName = Installe
144e0 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  r.LinqFileName;.
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 63                 c
14510 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e  onfiguration.lin
14520 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  qFileName = Path
14530 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
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 64 69 72 65 63 74 6f  guration.directo
14570 72 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ry, linqFileName
14580 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65    string ef6File
145b0 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61  Name = configura
145c0 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65  tion.ef6FileName
145d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145f0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
14600 75 6c 6c 4f 72 45 6d 70 74 79 28 65 66 36 46 69  ullOrEmpty(ef6Fi
14610 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 20 20 20 20 20 20 20 65 66 36 46 69 6c            ef6Fil
14640 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
14650 46 69 6c 65 4e 61 6d 65 28 65 66 36 46 69 6c 65  FileName(ef6File
14660 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14680 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
14690 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 65  .IsNullOrEmpty(e
146a0 66 36 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  f6FileName))..  
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 66                ef
146d0 36 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74  6FileName = Inst
146e0 61 6c 6c 65 72 2e 45 66 36 46 69 6c 65 4e 61 6d  aller.Ef6FileNam
146f0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
14720 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  ef6FileName = Pa
14730 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20  th.Combine(..   
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
14760 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63  figuration.direc
14770 74 6f 72 79 2c 20 65 66 36 46 69 6c 65 4e 61 6d  tory, ef6FileNam
14780 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e     string design
147b0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e  erFileName = con
147c0 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67  figuration.desig
147d0 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  nerFileName;....
147e0 20 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 69 66 20 28              if (
14800 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
14810 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69  Empty(designerFi
14820 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
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 64 65 73 69 67 6e            design
14850 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
14860 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65  h.GetFileName(de
14870 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
14880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148a0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
148b0 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65  lOrEmpty(designe
148c0 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  rFileName))..   
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
148f0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
14900 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e  Installer.Design
14910 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  erFileName;.... 
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
14940 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65  guration.designe
14950 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  rFileName = Path
14960 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
14990 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f  guration.directo
149a0 72 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ry, designerFile
149b0 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
149e0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
149f0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
14a00 6e 65 77 41 72 67 2c 20 22 65 66 36 46 69 6c 65  newArg, "ef6File
14a10 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65 66  configuration.ef
14a60 36 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74  6FileName = text
14a70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14a80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
14ab0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
14ac0 67 2c 20 22 69 6e 73 74 61 6c 6c 22 29 29 0d 0a  g, "install"))..
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b00 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
14b10 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
14b20 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
14b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b40 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
14b50 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b90 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
14ba0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
14bb0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14be0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
14bf0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
14c00 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14c30 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
14c40 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
14c70 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
14c80 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
14c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
14cc0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
14cd0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14d00 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
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 20 20 20 20                  
14d30 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
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 20                  
14d60 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
14d70 0d 0a 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 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
14de0 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20  uration.install 
14df0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e30 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
14e40 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
14e50 22 69 6e 73 74 61 6c 6c 46 6c 61 67 73 22 29 29  "installFlags"))
14e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14e70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e90 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
14ea0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75  value = ParseEnu
14eb0 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m(..            
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ed0 20 20 20 20 74 79 70 65 6f 66 28 49 6e 73 74 61      typeof(Insta
14ee0 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78 74 2c 20  llFlags), text, 
14ef0 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
14f20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f60 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
14f70 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
14f80 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
14f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
14fb0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
14fc0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
14fd0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ff0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
15000 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
15010 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15030 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
15040 6c 69 64 20 69 6e 73 74 61 6c 6c 20 66 6c 61 67  lid install flag
15050 73 20 76 61 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a  s value: {0}",..
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15080 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 74      ForDisplay(t
15090 65 78 74 29 29 2c 20 74 72 61 63 65 43 61 74 65  ext)), traceCate
150a0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
150b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
150d0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15100 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
15110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15120 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
15130 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15180 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d  n.installFlags =
15190 20 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 76   (InstallFlags)v
151a0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
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 65 6c 73 65 20 69            else i
151e0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
151f0 65 77 41 72 67 2c 20 22 6c 69 6e 71 46 69 6c 65  ewArg, "linqFile
15200 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15240 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69  configuration.li
15250 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  nqFileName = tex
15260 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
15270 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15290 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
152a0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
152b0 72 67 2c 20 22 6c 6f 67 46 69 6c 65 4e 61 6d 65  rg, "logFileName
152c0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15300 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
15310 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15330 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15350 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
15360 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
15370 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d 0a 20 20  noCompact"))..  
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15390 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
153a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153b0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
153c0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
153d0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
153e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153f0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
15400 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15420 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
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 65 72 72 6f 72 20 3d           error =
15450 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
15460 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
15490 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
154a0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
154b0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
154e0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
154f0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
15500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15510 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
15520 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
15530 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15560 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
15570 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
15580 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
15590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
155b0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
155e0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
15610 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
15670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15680 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
15690 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 74 20  ation.noCompact 
156a0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
156b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
156d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156e0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
156f0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
15700 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20  "noConsole")).. 
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15720 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15740 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
15750 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
15760 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
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 69 66 20 28 76 61 6c 75 65         if (value
15790 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
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 65 72 72 6f 72 20            error 
157e0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
157f0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
15820 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
15830 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
15840 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
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 74 72 61 63 65 43 61           traceCa
15870 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
15880 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
15890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158a0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
158b0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
158c0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158f0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
15900 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
15910 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15930 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
15940 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15970 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
159b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159d0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a10 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
15a20 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65  ration.noConsole
15a30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
15a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
15a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a70 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
15a80 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
15a90 20 22 6e 6f 44 65 73 6b 74 6f 70 22 29 29 0d 0a   "noDesktop"))..
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ab0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 62 6f 6f 6c 3f 20 76 61 6c         bool? val
15ae0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
15af0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
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 69 66 20 28 76 61 6c 75          if (valu
15b20 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 65 72 72 6f 72             error
15b70 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
15b80 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
15b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
15bc0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
15bd0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
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 74 72 61 63 65 43            traceC
15c00 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
15c10 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
15c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
15c40 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
15c50 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c80 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
15c90 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
15ca0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15cd0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
15ce0 20 20 20 20 20 20 20 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 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d30 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
15d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d60 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15da0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
15db0 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 73 6b 74 6f  uration.noDeskto
15dc0 70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  p = (bool)value;
15dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15de0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
15e10 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
15e20 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d 0a 20 20 20  , "noLog"))..   
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e60 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
15e70 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
15e80 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
15eb0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ed0 20 20 20 20 20 7b 0d 0a 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 65 72 72 6f 72 20 3d 20          error = 
15f00 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
15f10 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
15f40 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
15f50 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
15f60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
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 74 72 61 63 65 43 61 6c 6c         traceCall
15f90 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
15fa0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fc0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
15fd0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
15fe0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
16020 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
16030 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16050 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16060 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16090 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
160c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
160f0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
16140 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f  tion.noLog = (bo
16150 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
16160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16170 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
16190 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
161a0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
161b0 74 46 78 32 30 22 29 29 0d 0a 20 20 20 20 20 20  tFx20"))..      
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
16200 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
16210 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
16240 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16260 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
16290 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
162a0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162c0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
162d0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
162e0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16310 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16320 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16330 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
16360 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
16370 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
163a0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
163b0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
163c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
163f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
16420 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16450 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
16480 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164c0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
164d0 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 28 62  n.noNetFx20 = (b
164e0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16500 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
16520 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
16530 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e  ion(newArg, "noN
16540 65 74 46 78 33 35 22 29 29 0d 0a 20 20 20 20 20  etFx35"))..     
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16560 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16580 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
16590 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
165a0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
165d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
165e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
16620 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
16630 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
16660 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
16670 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
16680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
166b0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
166c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166e0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
166f0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
16700 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
16730 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
16740 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
16750 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16770 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
16780 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
167b0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
167e0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
16810 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16850 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
16860 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 28  on.noNetFx35 = (
16870 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
168c0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
168d0 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20 20 20  NetFx40"))..    
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
16920 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
16930 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
16960 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
169b0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
169c0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
169f0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
16a00 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
16a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
16a40 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
16a50 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a70 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
16a80 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
16a90 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ac0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
16ad0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
16ae0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16b10 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16b40 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
16b70 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16ba0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 20 20 20 20 20 7d 0d 0a 0d 0a 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 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
16bf0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  ion.noNetFx40 = 
16c00 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c40 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
16c50 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
16c60 6f 4e 65 74 46 78 34 35 22 29 29 0d 0a 20 20 20  oNetFx45"))..   
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
16cb0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
16cc0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
16cf0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d30 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
16d40 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
16d50 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
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 20 20 20 20 54 72 61               Tra
16d80 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
16d90 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
16da0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dc0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
16dd0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
16de0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
16e10 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
16e20 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
16e60 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
16e70 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e90 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16ea0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
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 20 20 20 20 20 20 69 66 20               if 
16ed0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16f00 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16f30 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 20 20 20 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61         configura
16f80 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d  tion.noNetFx45 =
16f90 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
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 7d 0d 0a 20 20 20 20 20 20         }..      
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fd0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
16fe0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
16ff0 6e 6f 4e 65 74 46 78 34 35 31 22 29 29 0d 0a 20  noNetFx451")).. 
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
17040 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
17050 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
17080 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
170d0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
170e0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
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 54                 T
17110 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
17120 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
17130 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17160 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
17170 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
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 20 20 20 20 22 49 6e 76              "Inv
171a0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
171b0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
171f0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
17200 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17220 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17230 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17260 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17290 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
172a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
172b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172c0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 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 20 63 6f 6e 66 69 67 75           configu
17310 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35  ration.noNetFx45
17320 31 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  1 = (bool)value;
17330 0d 0a 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 7d 0d 0a 20 20 20            }..   
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17360 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
17370 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
17380 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  , "noRuntimeVers
17390 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ion"))..        
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
173d0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
173e0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
173f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
17420 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17440 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
17470 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
17480 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174a0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
174b0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
174c0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174f0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
17500 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
17510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17530 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
17540 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
17550 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
17580 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
17590 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
175a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175c0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
175d0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
175e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175f0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
17600 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
17610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17620 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
17630 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
17640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17650 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
17660 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17680 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176a0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
176b0 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
176c0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
176d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
176e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17700 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
17710 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
17720 20 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20 20   "noTrace"))..  
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17740 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17760 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
17770 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
17780 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
177b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177d0 20 20 20 20 20 20 7b 0d 0a 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 65 72 72 6f 72 20 3d           error =
17800 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
17810 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
17840 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
17850 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
17860 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
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 74 72 61 63 65 43 61 6c          traceCal
17890 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
178a0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
178b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178c0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
178d0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
178e0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
17920 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
17930 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
17960 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
17990 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
179a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
179c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
179d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a30 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
17a40 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d 20  ation.noTrace = 
17a50 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
17a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a90 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
17aa0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
17ab0 6f 56 73 32 30 30 35 22 29 29 0d 0a 20 20 20 20  oVs2005"))..    
17ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ad0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17af0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
17b00 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
17b10 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
17b40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b60 20 20 20 20 7b 0d 0a 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 65 72 72 6f 72 20 3d 20 54         error = T
17b90 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
17ba0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
17bd0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
17be0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
17bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
17c20 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
17c30 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c50 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
17c60 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
17c70 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ca0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
17cb0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
17cc0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ce0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17cf0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17d20 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
17d50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17d80 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dc0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
17dd0 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20 28  ion.noVs2005 = (
17de0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
17e30 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
17e40 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20 20 20  Vs2008"))..     
17e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e60 20 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
17e90 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
17ea0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ec0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
17ed0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ef0 20 20 20 7b 0d 0a 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 65 72 72 6f 72 20 3d 20 54 72        error = Tr
17f20 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
17f30 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f50 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
17f60 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
17f70 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
17f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fa0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
17fb0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
17fc0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fe0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
17ff0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
18000 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
18030 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
18040 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
18050 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18070 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
18080 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
180b0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
180e0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18110 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18130 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
18160 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 28 62  on.noVs2008 = (b
18170 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18190 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
181b0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
181c0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
181d0 73 32 30 31 30 22 29 29 0d 0a 20 20 20 20 20 20  s2010"))..      
181e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181f0 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
18220 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
18230 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
18260 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18280 20 20 7b 0d 0a 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 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
182b0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
182c0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
182d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
182f0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
18300 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18330 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
18340 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
18350 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18370 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
18380 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
18390 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
183c0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
183d0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
183e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18400 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
18410 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18430 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
18440 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18470 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18490 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
184a0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
184f0 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28 62 6f  n.noVs2010 = (bo
18500 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18520 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
18540 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
18550 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73  on(newArg, "noVs
18560 32 30 31 32 22 29 29 0d 0a 20 20 20 20 20 20 20  2012"))..       
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
185b0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
185c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
185f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 7b 0d 0a 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 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
18640 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
18650 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18670 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
18680 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
18690 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186c0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
186d0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
186e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
18710 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
18720 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
18750 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
18760 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
18770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
187a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187c0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
187d0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18800 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
18830 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
18840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18850 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
18880 2e 6e 6f 56 73 32 30 31 32 20 3d 20 28 62 6f 6f  .noVs2012 = (boo
18890 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
188d0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
188e0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
188f0 30 31 33 22 29 29 0d 0a 20 20 20 20 20 20 20 20  013"))..        
18900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18910 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
18930 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
18940 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
18950 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18970 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
18980 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189c0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
189d0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
189e0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a00 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
18a10 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
18a20 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
18a60 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
18a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
18aa0 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
18ab0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
18ae0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
18af0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
18b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
18b30 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
18b60 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18b90 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bb0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
18bc0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c00 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
18c10 6e 6f 56 73 32 30 31 33 20 3d 20 28 62 6f 6f 6c  noVs2013 = (bool
18c20 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18c50 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
18c60 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
18c70 28 6e 65 77 41 72 67 2c 20 22 70 65 72 55 73 65  (newArg, "perUse
18c80 72 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r"))..          
18c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18ca0 0a 20 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 20 20 20 62 6f 6f               boo
18cc0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
18cd0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
18ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18d00 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
18d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
18d60 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
18d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
18da0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
18db0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18de0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
18df0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
18e30 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
18e40 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
18e70 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
18e80 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18eb0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
18ec0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ee0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
18ef0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
18f20 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
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 63 6f 6e 74 69 6e 75 65          continue
18f50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 70 65  configuration.pe
18fa0 72 55 73 65 72 20 3d 20 28 62 6f 6f 6c 29 76 61  rUser = (bool)va
18fb0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18fe0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
18ff0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
19000 77 41 72 67 2c 20 22 72 65 67 69 73 74 72 79 56  wArg, "registryV
19010 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20  ersion"))..     
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19030 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19050 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
19060 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20  registryVersion 
19070 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
190a0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
190b0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
190c0 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69 63 74  (newArg, "strict
190d0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
19110 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
19120 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
19130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19150 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
19160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19170 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
191b0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
191c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191e0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
191f0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
19200 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19230 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
19240 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
19280 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
19290 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192b0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
192c0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
192d0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19300 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
19310 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19330 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
19340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19360 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
19370 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19390 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
193a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
193b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
193c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
193e0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19400 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74 68  / NOTE: Allow th
19410 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61  e command line a
19420 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 20 20  rguments to..   
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
19450 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 22    override the "
19460 73 74 72 69 63 74 6e 65 73 73 22 20 73 65 74 74  strictness" sett
19470 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
19480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19490 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 76 69 64   //       provid
194a0 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
194b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
194d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
194f0 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61  trict = (bool)va
19500 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19530 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
19540 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
19550 77 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e 4d 69  wArg, "throwOnMi
19560 73 73 69 6e 67 22 29 29 0d 0a 20 20 20 20 20 20  ssing"))..      
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19580 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195a0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
195b0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
195c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
195f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19630 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
19640 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
19650 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
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 54 72 61 63 65 50            TraceP
19680 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
19690 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
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 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
196d0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
196e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
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 22 49 6e 76 61 6c 69 64 20         "Invalid 
19710 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
19720 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
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 46 6f                Fo
19750 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
19760 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
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 74 72 61 63 65 43 61 74 65         traceCate
197a0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
197d0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
19800 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
19830 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19850 20 20 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
19880 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  n.throwOnMissing
19890 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
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 7d 0d 0a 20 20 20 20           }..    
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
198e0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
198f0 20 22 74 72 61 63 65 46 6f 72 6d 61 74 22 29 29   "traceFormat"))
19900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19910 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
19940 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d  ration.traceForm
19950 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  at = text;..    
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19970 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
19980 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 63  .TraceFormat = c
19990 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
199a0 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ceFormat;..     
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
199e0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
199f0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63  on(newArg, "trac
19a00 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20  ePriority"))..  
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a40 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
19a50 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  e = ParseEnum(..
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 20 20 20 20 20 20                  
19a80 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f  typeof(TracePrio
19a90 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75  rity), text, tru
19aa0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ac0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
19ad0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 20 20 7b 0d 0a 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 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
19b20 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
19b30 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
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 54 72 61 63 65             Trace
19b60 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
19b70 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
19b80 0a 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 20                  
19ba0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
19bb0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
19bc0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
19bf0 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22   {0} value: {1}"
19c00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
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 46 6f 72 44 69 73 70 6c 61         ForDispla
19c30 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
19c40 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c70 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
19c80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19ce0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d00 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
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 20 20 20 20 63 6f 6e               con
19d50 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65  figuration.trace
19d60 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63  Priority = (Trac
19d70 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b  ePriority)value;
19d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
19da0 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69 6f  aceOps.TracePrio
19db0 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61  rity = configura
19dc0 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69  tion.tracePriori
19dd0 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e00 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
19e10 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
19e20 41 72 67 2c 20 22 76 65 72 62 6f 73 65 22 29 29  Arg, "verbose"))
19e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19e40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
19e70 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
19e80 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ea0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
19eb0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
19ec0 20 20 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 7b 0d 0a 20 20 20            {..   
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
19f00 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
19f10 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f40 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
19f50 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
19f60 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
19f90 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
19fa0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19fd0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
19fe0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
19ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1a020 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
1a030 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a060 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a070 0d 0a 20 20 20 20 20 20 20 20 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 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1a0d0 0d 0a 0d 0a 20 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 20 20 20                  
1a0f0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1a140 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f 73  iguration.verbos
1a150 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  e = (bool)value;
1a160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a170 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1a180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a190 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
1a1a0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
1a1b0 2c 20 22 76 73 56 65 72 73 69 6f 6e 53 75 66 66  , "vsVersionSuff
1a1c0 69 78 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ix"))..         
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1a1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1a200 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 73 56 65  nfiguration.vsVe
1a210 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 74 65  rsionSuffix = te
1a220 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a250 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1a260 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
1a270 41 72 67 2c 20 22 77 68 61 74 49 66 22 29 29 0d  Arg, "whatIf")).
1a280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a290 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
1a2c0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
1a2d0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
1a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2f0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
1a300 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a320 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a340 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1a350 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
1a360 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
1a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1a3a0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
1a3b0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a3e0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1a3f0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
1a420 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
1a430 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
1a440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a460 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1a470 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
1a480 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a4b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1a4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4e0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a510 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1a520 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a540 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a560 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a580 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1a590 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 20  guration.whatIf 
1a5a0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5e0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
1a5f0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
1a600 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20 20 20  "wow64"))..     
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
1a650 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
1a660 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
1a690 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
1a6e0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1a6f0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1a720 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1a730 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1a740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1a770 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1a780 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7a0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
1a7b0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
1a7c0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1a7f0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
1a800 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
1a810 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a830 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1a840 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a860 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
1a870 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a890 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1a8a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1a8d0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a910 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1a920 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f 6c  on.wow64 = (bool
1a930 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
1a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a950 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a960 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1a970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a980 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1a9b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1a9c0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
1a9f0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
1aa00 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1aa40 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1aa70 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d  Unsupported comm
1aa80 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a  and line option:
1aa90 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aab0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1aac0 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 43  ay(arg)), traceC
1aad0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
1ab00 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1ab30 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1ab80 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
1ab90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
1abb0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
1abc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1abd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1abe0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1abf0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1ac00 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
1ac10 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac30 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1ac40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65  traceCallback, e
1ac50 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1ac60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ac70 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1ac80 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64 69   "Failed to modi
1ac90 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  fy configuration
1aca0 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .";..           
1acb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1acc0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1acd0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1ace0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1acf0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ad00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1ad40 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
1ad50 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
1ad60 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
1ad70 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
1ad80 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62   public static b
1ad90 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20 20  ool Process(..  
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1adb0 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20  ring[] args,..  
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
1add0 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
1ade0 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1ae00 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20   strict,..      
1ae10 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
1ae20 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1ae40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ae60 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1ae70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ae80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1ae90 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
1aea0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1aeb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aed0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e       error = "In
1aee0 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74  valid configurat
1aef0 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1af40 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
1af50 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20  mbly assembly = 
1af60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61 73  configuration.as
1af70 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20  sembly;....     
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1af90 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20 6e  f (assembly == n
1afa0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1afb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e       error = "In
1afe0 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e 22  valid assembly."
1aff0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b000 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b010 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b030 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b040 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
1b050 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63  iguration.noTrac
1b060 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1b070 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b090 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
1b0a0 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a  ation.noLog &&..
1b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
1b0d0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
1b0e0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c  (configuration.l
1b0f0 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  ogFileName))..  
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b110 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73       // NOTE: Us
1b160 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c 6f  e the default lo
1b170 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20  g file name...  
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1b1c0 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
1b1d0 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c 65  ame = GetLogFile
1b1e0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
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 22 74 72 61 63 65 22 29 3b         "trace");
1b210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b220 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b240 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1b250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1b280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b290 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
1b2a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43  onfiguration.noC
1b2b0 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20 20  onsole)..       
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b310 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72 62  // NOTE: In verb
1b320 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 67 20  ose mode, debug 
1b330 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65 65  output (that mee
1b340 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e  //       the con
1b370 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74 79  figured priority
1b380 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20   criteria) will 
1b390 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c 61 79  //       display
1b3c0 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c  ed to the consol
1b3d0 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 72  e; otherwise, tr
1b3e0 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ace..           
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 75 74   //       output
1b410 20 28 74 68 61 74 20 6d 65 65 74 73 20 74 68 65   (that meets the
1b420 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f   configured prio
1b430 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b450 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69 74 65    //       crite
1b460 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64 69 73  ria) will be dis
1b470 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f  played to the co
1b480 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  nsole...        
1b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4c0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
1b4d0 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20 20  ation.debug)..  
1b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1b520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b540 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74 68   // NOTE: Add th
1b550 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20  e console trace 
1b560 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65 0d  listener to the.
1b570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20 6f   //       list o
1b5a0 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72  f trace listener
1b5b0 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 79 0d  s maintained by.
1b5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 54 72   //       the Tr
1b5f0 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28 69 2e  aceOps class (i.
1b600 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73  e. only messages
1b610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61 74 20    //       that 
1b640 6d 65 65 74 20 74 68 65 20 64 65 62 75 67 20 70  meet the debug p
1b650 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65 0d  riority will be.
1b660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e 20 6f   //       seen o
1b690 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d  n the console)..
1b6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6c0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6e0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 65       TraceOps.Se
1b6f0 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72  tupDebugListener
1b700 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b720 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b740 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b760 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b780 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1b7b0 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 6f  E: Add the conso
1b7c0 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65  le trace listene
1b7d0 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  r to the..      
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b800 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69 6c 74     list of built
1b810 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74 65 6e  -in trace listen
1b820 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20  ers (i.e...     
1b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b840 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1b850 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65      only message
1b860 73 20 74 68 61 74 20 6d 65 65 74 20 74 68 65 20  s that meet the 
1b870 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1b8a0 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65  priority will be
1b8b0 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e   seen on the con
1b8c0 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20 20  sole)...        
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1b8f0 20 20 20 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 54 72 61 63              Trac
1b910 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28  e.Listeners.Add(
1b920 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63 65  new ConsoleTrace
1b930 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20 20  Listener());..  
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b950 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1b960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b970 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b990 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1b9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9e0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
1b9f0 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26  uration.noLog &&
1ba00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 53                !S
1ba20 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
1ba30 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  pty(configuratio
1ba40 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d  n.logFileName)).
1ba50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ba60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba80 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69          Trace.Li
1ba90 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20  steners.Add(new 
1baa0 54 65 78 74 57 72 69 74 65 72 54 72 61 63 65 4c  TextWriterTraceL
1bab0 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 20 20  istener(..      
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bad0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1bae0 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
1baf0 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame));....      
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb10 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb30 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
1bb40 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20 63  echnically, we c
1bb50 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67 20 66  reated the log f
1bb60 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ile...          
1bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb80 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 20 66 69 6c 65 73 43 72 65 61 74 65 64 2b 2b    filesCreated++
1bbb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bbc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbe0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1bbf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc10 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d 70     // NOTE: Dump
1bc20 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69   the configurati
1bc30 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20 77  on now in case w
1bc40 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20 20  e need to..     
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bc60 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65 73  /       troubles
1bc70 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73 2e  hoot any issues.
1bc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bc90 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1bcb0 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   (configuration.
1bcc0 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3c 3d  debugPriority <=
1bcd0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d   TracePriority.M
1bce0 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20  edium)..        
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd00 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75  configuration.Du
1bd10 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  mp(debugCallback
1bd20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1bd30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1bd40 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
1bd50 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61  ePriority <= Tra
1bd60 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
1bd70 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1bd90 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 74  iguration.Dump(t
1bda0 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a  raceCallback);..
1bdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bdc0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bde0 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 72   NOTE: Show wher
1bdf0 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67  e we are running
1be00 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77 65   from and how we
1be10 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20 20   were..         
1be20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1be30 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20      invoked...  
1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be50 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1be60 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1be70 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73 65   location = asse
1be80 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d 0a  mbly.Location;..
1be90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bea0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
1beb0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
1bec0 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
1bed0 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  mLow,..         
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1bef0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1bf00 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1bf10 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65 78       "Running ex
1bf40 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30 7d  ecutable is: {0}
1bf50 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f  ", ForDisplay(lo
1bf60 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  cation)),..     
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf80 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1bf90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1bfa0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1bfb0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1bfc0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1bfd0 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20  ediumLow,..     
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1c000 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1c010 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1c020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c030 20 20 20 20 20 20 20 20 20 22 4f 72 69 67 69 6e           "Origin
1c040 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  al command line 
1c050 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  is: {0}",..     
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c070 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 43     Environment.C
1c080 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72 61  ommandLine), tra
1c090 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0b0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1c0c0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1c0d0 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c  Priority.MediumL
1c0e0 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1c100 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1c110 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1c120 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c140 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f 63     "Running proc
1c150 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49 73  ess is {0}.", Is
1c160 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20 3f  64BitProcess() ?
1c170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 36                "6
1c190 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62 69 74  4-bit" : "32-bit
1c1a0 22 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  "), traceCategor
1c1b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1c1c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1c1d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68  configuration.wh
1c1e0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
1c1f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c210 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c230 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68    // NOTE: If th
1c240 65 20 64 65 62 75 67 67 65 72 20 69 73 20 61 74  e debugger is at
1c250 74 61 63 68 65 64 20 61 6e 64 20 22 77 68 61 74  tached and "what
1c260 2d 69 66 22 0d 0a 20 20 20 20 20 20 20 20 20 20  -if"..          
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c280 20 20 20 20 20 20 20 6d 6f 64 65 20 69 73 20 5b         mode is [
1c290 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69  now] disabled, i
1c2a0 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d  ssue a warning..
1c2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c2c0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2e0 20 20 20 20 20 69 66 20 28 44 65 62 75 67 67 65       if (Debugge
1c2f0 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20  r.IsAttached).. 
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c310 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1c320 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1c330 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1c340 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1c370 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1c380 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72              "For
1c3b0 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c  ced to disable \
1c3c0 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
1c3d0 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20  with " +..      
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3f0 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67            "debug
1c400 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20  ger attached.", 
1c410 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1c420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c430 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c440 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1c450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c460 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c480 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1c490 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1c4a0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
1c4b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1c4d0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1c4e0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c500 20 20 20 20 20 20 20 20 20 20 22 4e 6f 20 61 63            "No ac
1c510 74 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c  tual changes wil
1c520 6c 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69  l be made to thi
1c530 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  s " +..         
1c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c550 20 20 20 22 73 79 73 74 65 6d 20 62 65 63 61 75     "system becau
1c560 73 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d  se \"what-if\" m
1c570 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22  ode is enabled."
1c580 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c5a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1c5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c5f0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
1c600 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
1c610 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d  e has not been m
1c620 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  anually..       
1c630 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1c640 20 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20        confirmed 
1c650 28 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78  (i.e. via the ex
1c660 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c  plicit command l
1c670 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ine..           
1c680 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1c690 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20    option), then 
1c6a0 73 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20  stop processing 
1c6b0 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65  now.  We enforce
1c6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c6d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
1c6e0 68 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74  his rule so that
1c6f0 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63   simply double-c
1c700 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20  licking the..   
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74   //       execut
1c730 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65  able will not re
1c740 73 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e  sult in any chan
1c750 67 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20  ges being..     
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c770 2f 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20  /       made to 
1c780 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20  the system...   
1c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7a0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1c7b0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
1c7c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66  nfiguration.conf
1c7d0 69 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  irm)..          
1c7e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c800 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61       error = "Ca
1c810 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74  nnot continue, t
1c820 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f  he \"confirm\" o
1c830 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20  ption is " +..  
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 20 22 6e 6f 74 20 65            "not e
1c860 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20  nabled.";....   
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c880 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1c890 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1c8a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c8f0 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1c900 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
1c910 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1c930 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1c940 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
1c950 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c970 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1c980 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1c990 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67  k, e, traceCateg
1c9a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1c9c0 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
1c9d0 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72  process configur
1c9e0 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
1c9f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ca10 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1ca20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1ca30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1ca40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ca80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
1ca90 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
1caa0 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
1cab0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
1cac0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
1cad0 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75  tic bool CheckRu
1cae0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20  ntimeVersion(.. 
1caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1cb00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
1cb10 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1cb30 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
1cb40 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1cb50 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1cb90 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1cba0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1cbb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1cbc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1cbd0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1cbe0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc00 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
1cc10 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61  nvalid configura
1cc20 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
1cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc40 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1cc80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cc90 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68       // NOTE: Wh
1cca0 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  at version of th
1ccb0 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68  e runtime was th
1ccc0 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29  e core (primary)
1ccd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cce0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1ccf0 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64  ssembly compiled
1cd00 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22   against (e.g. "
1cd10 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a  v2.0.50727" or..
1cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd30 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34      //       "v4
1cd40 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20  .0.30319")...   
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd60 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1cd70 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1cd80 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
1cd90 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61  Version = GetIma
1cda0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1cdb0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1cdc0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1cdd0 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
1cde0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ce00 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1ce10 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1ce20 57 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74  We allow the act
1ce30 75 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ual image runtim
1ce40 65 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65  e checking to be
1ce50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ce60 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
1ce70 79 70 61 73 73 65 64 20 76 69 61 20 74 68 65 20  ypassed via the 
1ce80 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  "-noRuntimeVersi
1ce90 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  on" command line
1cea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ceb0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
1cec0 70 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d  ption.  The comm
1ced0 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20  and line option 
1cee0 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d  is intended for.
1cef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cf00 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
1cf10 70 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a  pert use only...
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf30 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1cf50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1cf60 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d  RuntimeVersion).
1cf70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cf80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfa0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1cfb0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1cfc0 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
1cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfe0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1cff0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1d000 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1d010 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1d020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d030 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73      "Assembly is
1d040 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
1d050 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1d060 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20   {0}; " +..     
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 20 20 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c         "however,
1d090 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65   installation re
1d0a0 73 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64  strictions based
1d0b0 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20   on this " +..  
1d0c0 20 20 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 22 66 61 63 74 20            "fact 
1d0e0 68 61 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c  have been disabl
1d0f0 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61  ed via the comma
1d100 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20  nd line.",..    
1d110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d120 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67          coreImag
1d130 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1d140 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1d150 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1d170 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1d190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d1a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1c0 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63  // TODO: Restric
1d1d0 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  t the configurat
1d1e0 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69  ion based on whi
1d1f0 63 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20  ch image..      
1d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d210 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76         runtime v
1d220 65 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d  ersions (which m
1d230 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72  ore-or-less corr
1d240 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20  espond..        
1d250 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1d260 20 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61       to .NET Fra
1d270 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29  mework versions)
1d280 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62   are supported b
1d290 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  y the..         
1d2a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1d2b0 20 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20      versions of 
1d2c0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68  Visual Studio th
1d2d0 61 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64  at are installed
1d2e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d2f0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d310 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
1d320 4f 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67  OrEmpty(coreImag
1d330 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1d340 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1d350 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
1d380 69 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61  id core file ima
1d390 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69  ge runtime versi
1d3a0 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
1d3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1d3c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1d3f0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1d400 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d  (String.Equals(.
1d410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d420 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
1d430 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  eImageRuntimeVer
1d440 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65  sion, CLRv2Image
1d450 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d  RuntimeVersion,.
1d460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d470 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
1d480 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
1d490 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20  dinal))..       
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4e0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
1d4f0 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75   the CLR v2.0 ru
1d500 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  ntime, make sure
1d510 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20   we disable..   
1d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d530 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
1d540 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65  y attempt to use
1d550 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74   it for things t
1d560 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20  hat require..   
1d570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d580 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
1d590 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
1d5a0 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  ed for the CLR v
1d5b0 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20  4.0.  It is..   
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5d0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e       //       un
1d5e0 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20  certain if this 
1d5f0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72  is actually a pr
1d600 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20  oblem in..      
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d620 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74    //       pract
1d630 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76  ice as the CLR v
1d640 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64  4.0 can load and
1d650 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20   use an..       
1d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d670 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62   //       assemb
1d680 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  ly compiled with
1d690 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68   the CLR v2.0; h
1d6a0 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20  owever,..       
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6c0 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20   //       since 
1d6d0 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66  this project off
1d6e0 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75  ers both configu
1d6f0 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20  rations,..      
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75    //       we cu
1d720 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77  rrently disallow
1d730 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d   this mismatch..
1d740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d750 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d770 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1d780 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74  on.noNetFx40 = t
1d790 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1d7b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1d7c0 74 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx45 = true;.. 
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7e0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1d7f0 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31 20  tion.noNetFx451 
1d800 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d820 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1d830 6f 56 73 32 30 31 30 20 3d 20 74 72 75 65 3b 0d  oVs2010 = true;.
1d840 0a 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 63 6f 6e 66 69 67 75           configu
1d860 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20  ration.noVs2012 
1d870 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d890 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1d8a0 6f 56 73 32 30 31 33 20 3d 20 74 72 75 65 3b 0d  oVs2013 = true;.
1d8b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d8c0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1d8d0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1d8e0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1d8f0 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20  Medium,..       
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d910 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1d920 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1d930 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1d940 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d960 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70  Assembly is comp
1d970 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45  iled for the .NE
1d980 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c  T Framework {0},
1d990 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9b0 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74    "support for t
1d9c0 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
1d9d0 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73  k {1} is now dis
1d9e0 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  abled.",..      
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da00 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67 65        CLRv2Image
1da10 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20  RuntimeVersion, 
1da20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv4ImageRuntim
1da30 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
1da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da50 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1da60 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da90 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72      else if (Str
1daa0 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20  ing.Equals(..   
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dac0 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61           coreIma
1dad0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1dae0 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  , CLRv4ImageRunt
1daf0 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db10 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43           StringC
1db20 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
1db30 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
1db40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db60 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65  // NOTE: For the
1db90 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69 6d   CLR v4.0 runtim
1dba0 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20  e, make sure we 
1dbb0 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  disable..       
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbd0 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74   //       any at
1dbe0 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20  tempt to use it 
1dbf0 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20  for things that 
1dc00 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20  require..       
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73   //       an ass
1dc30 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66  embly compiled f
1dc40 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e  or the CLR v2.0.
1dc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc60 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc80 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1dc90 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20  ion.noNetFx20 = 
1dca0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1dcc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
1dcd0 65 74 46 78 33 35 20 3d 20 74 72 75 65 3b 0d 0a  etFx35 = true;..
1dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcf0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1dd00 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d  ation.noVs2005 =
1dd10 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1dd40 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a  Vs2008 = true;..
1dd50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dd60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1dd70 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1dd80 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1dd90 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddb0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1ddc0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1ddd0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1dde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1de00 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
1de10 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
1de20 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20   Framework {0}, 
1de30 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de50 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68   "support for th
1de60 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1de70 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61   {1} is now disa
1de80 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
1de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dea0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1deb0 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv4ImageRuntim
1dec0 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
1ded0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dee0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1def0 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e  ay(CLRv2ImageRun
1df00 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  timeVersion)),..
1df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1df30 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1df60 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
1df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1df90 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1dfa0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
1dfb0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfd0 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f   "unsupported co
1dfe0 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75  re file image ru
1dff0 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 22 20  ntime version " 
1e000 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e020 7b 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d  {0}, must be {1}
1e030 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20   or {2}",..     
1e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e050 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1e060 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69  y(coreImageRunti
1e070 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1e080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e090 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1e0a0 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75  lay(CLRv2ImageRu
1e0b0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a  ntimeVersion),..
1e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1e0e0 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67  isplay(CLRv4Imag
1e0f0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1e100 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e120 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e140 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1e150 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1e160 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1e170 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1e180 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1e190 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e1c0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1e1d0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1e1e0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
1e1f0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1e210 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1e220 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74  ceCallback, e, t
1e230 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1e240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e250 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
1e260 61 69 6c 65 64 20 74 6f 20 63 68 65 63 6b 20 69  ailed to check i
1e270 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72  mage runtime ver
1e280 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  sion.";..       
1e290 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e2b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1e2c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1e2d0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1e2e0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1e2f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e330 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e340 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1e350 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  lic Methods..   
1e360 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1e370 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a  bool HasFlags(..
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68 61 73  InstallFlags has
1e3a0 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20  Flags,..        
1e3b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c          bool all
1e3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e3d0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
1e3e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e3f0 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20      if (all)..  
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e410 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61    return ((insta
1e420 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61  llFlags & hasFla
1e430 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67 73 29  gs) == hasFlags)
1e440 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1e450 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1e470 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61  urn ((installFla
1e480 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 21  gs & hasFlags) !
1e490 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e  = InstallFlags.N
1e4a0 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  one);..         
1e4b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e4c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1e4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e500 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1e510 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1e520 6f 6c 20 49 73 4c 69 6e 71 53 75 70 70 6f 72 74  ol IsLinqSupport
1e530 65 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ed()..          
1e540 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e550 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1e560 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1e570 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  : Return non-zer
1e580 6f 20 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e  o if the System.
1e590 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
1e5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e5b0 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
1e5c0 62 6c 79 20 73 68 6f 75 6c 64 20 62 65 20 70 72  bly should be pr
1e5d0 6f 63 65 73 73 65 64 20 64 75 72 69 6e 67 20 74  ocessed during t
1e5e0 68 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20 20  he install...   
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1e600 20 20 20 20 20 20 49 66 20 74 68 65 20 74 61 72        If the tar
1e610 67 65 74 20 69 73 20 56 69 73 75 61 6c 20 53 74  get is Visual St
1e620 75 64 69 6f 20 32 30 30 35 2c 20 74 68 69 73 20  udio 2005, this 
1e630 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
1e640 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
1e650 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20  eturn zero...   
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1e670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e680 20 72 65 74 75 72 6e 20 21 6e 6f 4e 65 74 46 78   return !noNetFx
1e690 33 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 30  35 || !noNetFx40
1e6a0 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 20 7c   || !noNetFx45 |
1e6b0 7c 20 21 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a  | !noNetFx451;..
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1e6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e730 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 45 66  public bool IsEf
1e740 36 53 75 70 70 6f 72 74 65 64 28 29 0d 0a 20 20  6Supported()..  
1e750 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1e770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e780 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e   // NOTE: Return
1e790 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
1e7a0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1e7b0 69 74 65 2e 45 46 36 0d 0a 20 20 20 20 20 20 20  ite.EF6..       
1e7c0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1e7d0 20 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c    assembly shoul
1e7e0 64 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 64  d be processed d
1e7f0 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61 6c  uring the instal
1e800 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l...            
1e810 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20      //       If 
1e820 74 68 65 20 74 61 72 67 65 74 20 69 73 20 56 69  the target is Vi
1e830 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 35  sual Studio 2005
1e840 20 6f 72 20 56 69 73 75 61 6c 0d 0a 20 20 20 20   or Visual..    
1e850 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1e860 20 20 20 20 20 53 74 75 64 69 6f 20 32 30 30 38       Studio 2008
1e870 2c 20 74 68 69 73 20 6d 75 73 74 20 72 65 74 75  , this must retu
1e880 72 6e 20 7a 65 72 6f 2e 20 20 41 6c 73 6f 2c 20  rn zero.  Also, 
1e890 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
1e8a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
1e8b0 20 45 46 36 20 63 6f 72 65 20 61 73 73 65 6d 62   EF6 core assemb
1e8c0 6c 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ly is unavailabl
1e8d0 65 2c 20 74 68 69 73 20 6d 75 73 74 0d 0a 20 20  e, this must..  
1e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e8f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 7a 65         return ze
1e900 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro...           
1e910 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1e920 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 6f 4e           if (noN
1e930 65 74 46 78 34 30 20 26 26 20 6e 6f 4e 65 74 46  etFx40 && noNetF
1e940 78 34 35 20 26 26 20 6e 6f 4e 65 74 46 78 34 35  x45 && noNetFx45
1e950 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
1e960 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1e970 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1e980 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1e990 49 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d  IsSystemEf6Assem
1e9a0 62 6c 79 41 76 61 69 6c 61 62 6c 65 28 29 3b 0d  blyAvailable();.
1e9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1e9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1e9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1ea20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79   public Assembly
1ea30 4e 61 6d 65 20 47 65 74 43 6f 72 65 41 73 73 65  Name GetCoreAsse
1ea40 6d 62 6c 79 4e 61 6d 65 28 29 20 2f 2a 20 52 45  mblyName() /* RE
1ea50 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20  QUIRED */..     
1ea60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ea70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1ea80 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  reAssemblyName =
1ea90 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1eaa0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eac0 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65  coreAssemblyName
1ead0 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e   = AssemblyName.
1eae0 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  GetAssemblyName(
1eaf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eb00 20 20 20 20 20 20 20 20 20 20 43 6f 72 65 46 69            CoreFi
1eb10 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
1eb20 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
1eb30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1eb40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1eb50 6e 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61  n coreAssemblyNa
1eb60 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
1eb70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1eb80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1eb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ebd0 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
1ebe0 6d 62 6c 79 4e 61 6d 65 20 47 65 74 4c 69 6e 71  mblyName GetLinq
1ebf0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 20 2f  AssemblyName() /
1ec00 2a 20 4f 50 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20  * OPTIONAL */.. 
1ec10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ec30 20 28 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65   (IsLinqSupporte
1ec40 64 28 29 20 26 26 20 28 6c 69 6e 71 41 73 73 65  d() && (linqAsse
1ec50 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  mblyName == null
1ec60 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1ec70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ec80 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 41             linqA
1ec90 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73  ssemblyName = As
1eca0 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73  semblyName.GetAs
1ecb0 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20  semblyName(..   
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecd0 20 20 20 20 20 4c 69 6e 71 46 69 6c 65 4e 61 6d       LinqFileNam
1ece0 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  e); /* throw */.
1ecf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ed00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1ed10 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 69 6e        return lin
1ed20 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a  qAssemblyName;..
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ed40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1ed50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1eda0 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e  public AssemblyN
1edb0 61 6d 65 20 47 65 74 45 66 36 41 73 73 65 6d 62  ame GetEf6Assemb
1edc0 6c 79 4e 61 6d 65 28 29 20 2f 2a 20 4f 50 54 49  lyName() /* OPTI
1edd0 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ONAL */..       
1ede0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1edf0 20 20 20 20 20 20 20 20 69 66 20 28 49 73 45 66          if (IsEf
1ee00 36 53 75 70 70 6f 72 74 65 64 28 29 20 26 26 20  6Supported() && 
1ee10 28 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65  (ef6AssemblyName
1ee20 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee50 20 20 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61     ef6AssemblyNa
1ee60 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d  me = AssemblyNam
1ee70 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d  e.GetAssemblyNam
1ee80 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 45 66 36 46              Ef6F
1eea0 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72  ileName); /* thr
1eeb0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
1eec0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1eee0 72 6e 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61  rn ef6AssemblyNa
1eef0 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
1ef00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1ef10 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1ef20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ef60 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
1ef70 6d 62 6c 79 4e 61 6d 65 20 47 65 74 44 65 73 69  mblyName GetDesi
1ef80 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
1ef90 28 29 20 2f 2a 20 52 45 51 55 49 52 45 44 20 2a  () /* REQUIRED *
1efa0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
1efb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1efc0 20 20 69 66 20 28 64 65 73 69 67 6e 65 72 41 73    if (designerAs
1efd0 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75  semblyName == nu
1efe0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1eff0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f000 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69              desi
1f010 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
1f020 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e   = AssemblyName.
1f030 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  GetAssemblyName(
1f040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f050 20 20 20 20 20 20 20 20 20 20 44 65 73 69 67 6e            Design
1f060 65 72 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  erFileName); /* 
1f070 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
1f080 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f0a0 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72 41 73  eturn designerAs
1f0b0 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
1f0c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f0d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1f0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f120 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1f130 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74 49 6e  lic string GetIn
1f140 76 61 72 69 61 6e 74 4e 61 6d 65 28 29 0d 0a 20  variantName().. 
1f150 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f170 74 75 72 6e 20 49 73 45 66 36 53 75 70 70 6f 72  turn IsEf6Suppor
1f180 74 65 64 28 29 20 3f 20 45 66 36 49 6e 76 61 72  ted() ? Ef6Invar
1f190 69 61 6e 74 4e 61 6d 65 20 3a 20 49 6e 76 61 72  iantName : Invar
1f1a0 69 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  iantName;..     
1f1b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f1c0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f210 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1f220 63 20 73 74 72 69 6e 67 20 47 65 74 46 61 63 74  c string GetFact
1f230 6f 72 79 54 79 70 65 4e 61 6d 65 28 29 0d 0a 20  oryTypeName().. 
1f240 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f260 74 75 72 6e 20 49 73 45 66 36 53 75 70 70 6f 72  turn IsEf6Suppor
1f270 74 65 64 28 29 20 3f 20 45 66 36 46 61 63 74 6f  ted() ? Ef6Facto
1f280 72 79 54 79 70 65 4e 61 6d 65 20 3a 20 46 61 63  ryTypeName : Fac
1f290 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d 0a 20  toryTypeName;.. 
1f2a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1f2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1f310 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61  ublic AssemblyNa
1f320 6d 65 20 47 65 74 50 72 6f 76 69 64 65 72 41 73  me GetProviderAs
1f330 73 65 6d 62 6c 79 4e 61 6d 65 28 29 0d 0a 20 20  semblyName()..  
1f340 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1f360 75 72 6e 20 49 73 45 66 36 53 75 70 70 6f 72 74  urn IsEf6Support
1f370 65 64 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ed() ?..        
1f380 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 45              GetE
1f390 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29  f6AssemblyName()
1f3a0 20 3a 20 47 65 74 43 6f 72 65 41 73 73 65 6d 62   : GetCoreAssemb
1f3b0 6c 79 4e 61 6d 65 28 29 3b 20 2f 2a 20 74 68 72  lyName(); /* thr
1f3c0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
1f3d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f3e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f420 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f430 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
1f440 69 64 20 44 75 6d 70 28 0d 0a 20 20 20 20 20 20  id Dump(..      
1f450 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
1f460 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
1f470 6c 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 20  lback..         
1f480 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1f490 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f4a0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61           if (tra
1f4b0 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
1f4c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1f4d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1f4f0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1f500 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1f510 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f530 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 22 2c       "Assembly",
1f540 20 46 6f 72 44 69 73 70 6c 61 79 28 61 73 73 65   ForDisplay(asse
1f550 6d 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  mbly)),..       
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1f580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f590 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1f5a0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1f5b0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1f5c0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5e0 20 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20   "LogFileName", 
1f5f0 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67 46 69  ForDisplay(logFi
1f600 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f620 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1f630 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f640 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f650 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1f660 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1f670 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f690 20 20 20 22 44 69 72 65 63 74 6f 72 79 22 2c 20     "Directory", 
1f6a0 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
1f6b0 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  tory)),..       
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1f6e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f6f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1f700 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1f710 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1f720 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f740 20 22 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c   "CoreFileName",
1f750 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65   ForDisplay(core
1f760 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
1f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f780 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1f790 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1f7b0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1f7c0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1f7d0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7f0 20 20 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61       "LinqFileNa
1f800 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
1f810 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  linqFileName)),.
1f820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f830 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1f840 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f860 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1f870 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1f880 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1f890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f8a0 20 20 20 20 20 20 20 20 20 22 45 66 36 46 69 6c           "Ef6Fil
1f8b0 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  eName", ForDispl
1f8c0 61 79 28 65 66 36 46 69 6c 65 4e 61 6d 65 29 29  ay(ef6FileName))
1f8d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f8e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1f8f0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f910 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1f920 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1f930 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1f940 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f950 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 69             "Desi
1f960 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 2c 20 46  gnerFileName", F
1f970 6f 72 44 69 73 70 6c 61 79 28 64 65 73 69 67 6e  orDisplay(design
1f980 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  erFileName)),.. 
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1f9b0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1f9d0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1f9e0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1f9f0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa10 20 20 20 20 20 20 20 22 52 65 67 69 73 74 72 79         "Registry
1fa20 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73  Version", ForDis
1fa30 70 6c 61 79 28 72 65 67 69 73 74 72 79 56 65 72  play(registryVer
1fa40 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa60 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1fa70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fa80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1fa90 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1faa0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1fab0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fad0 20 22 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22   "ConfigVersion"
1fae0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e  , ForDisplay(con
1faf0 66 69 67 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  figVersion)),.. 
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1fb20 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1fb40 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1fb50 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1fb60 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb80 20 20 20 20 20 20 20 22 56 73 56 65 72 73 69 6f         "VsVersio
1fb90 6e 53 75 66 66 69 78 22 2c 20 46 6f 72 44 69 73  nSuffix", ForDis
1fba0 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 53 75  play(vsVersionSu
1fbb0 66 66 69 78 29 29 2c 0d 0a 20 20 20 20 20 20 20  ffix)),..       
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbd0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1fbe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fbf0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1fc00 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1fc10 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1fc20 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1fc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc40 20 22 44 65 62 75 67 46 6f 72 6d 61 74 22 2c 20   "DebugFormat", 
1fc50 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67  ForDisplay(debug
1fc60 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20  Format)),..     
1fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc80 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1fc90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1fca0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1fcb0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1fcc0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1fcd0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcf0 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74 22     "TraceFormat"
1fd00 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
1fd10 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  ceFormat)),..   
1fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd30 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1fd40 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1fd50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1fd60 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1fd70 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1fd80 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fda0 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61       "InstallFla
1fdb0 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  gs", ForDisplay(
1fdc0 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d  installFlags)),.
1fdd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fde0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1fdf0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe10 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1fe20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1fe30 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1fe40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fe50 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 50           "DebugP
1fe60 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
1fe70 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f 72 69  play(debugPriori
1fe80 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
1fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1fea0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1feb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fec0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1fed0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1fee0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1fef0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ff10 54 72 61 63 65 50 72 69 6f 72 69 74 79 22 2c 20  TracePriority", 
1ff20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65  ForDisplay(trace
1ff30 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20  Priority)),..   
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff50 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1ff60 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ff70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ff80 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1ff90 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1ffa0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffc0 20 20 20 20 20 22 50 65 72 55 73 65 72 22 2c 20       "PerUser", 
1ffd0 46 6f 72 44 69 73 70 6c 61 79 28 70 65 72 55 73  ForDisplay(perUs
1ffe0 65 72 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  er)),..         
1fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20000 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
20010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20020 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
20030 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
20040 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
20050 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
20060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20070 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73  Install", ForDis
20080 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d  play(install)),.
20090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
200a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
200b0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200d0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
200e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
200f0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
20100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20110 20 20 20 20 20 20 20 20 20 22 57 6f 77 36 34 22           "Wow64"
20120 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 6f 77  , ForDisplay(wow
20130 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  64)),..         
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20150 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
20160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20170 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
20180 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
20190 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
201a0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
201b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
201c0 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
201d0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
201e0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
201f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20200 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20210 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
20220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20230 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
20240 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
20250 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
20260 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20270 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65             "NoDe
20280 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c  sktop", ForDispl
20290 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d  ay(noDesktop)),.
202a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
202b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
202c0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
202d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
202f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
20300 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
20310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20320 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70           "NoComp
20330 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  act", ForDisplay
20340 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20  (noCompact)),.. 
20350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20360 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
20370 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
20380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
20390 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
203a0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
203b0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
203c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203d0 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32         "NoNetFx2
203e0 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
203f0 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20  oNetFx20)),..   
20400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20410 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
20420 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
20430 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20440 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
20450 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
20460 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
20470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20480 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 33 35 22       "NoNetFx35"
20490 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
204a0 65 74 46 78 33 35 29 29 2c 0d 0a 20 20 20 20 20  etFx35)),..     
204b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
204d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
204e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
204f0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
20500 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
20510 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
20520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20530 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20     "NoNetFx40", 
20540 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
20550 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx40)),..       
20560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20570 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
20580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20590 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
205a0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
205b0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
205c0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
205d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205e0 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c 20 46 6f   "NoNetFx45", Fo
205f0 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
20600 34 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  45)),..         
20610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20620 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
20630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20640 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
20650 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
20660 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
20670 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
20680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20690 4e 6f 4e 65 74 46 78 34 35 31 22 2c 20 46 6f 72  NoNetFx451", For
206a0 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34  Display(noNetFx4
206b0 35 31 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  51)),..         
206c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
206d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
206e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
206f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
20700 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
20710 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
20720 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
20730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20740 4e 6f 56 73 32 30 30 35 22 2c 20 46 6f 72 44 69  NoVs2005", ForDi
20750 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 35 29 29  splay(noVs2005))
20760 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20770 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20780 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
20790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207a0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
207b0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
207c0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
207d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
207e0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
207f0 32 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61  2008", ForDispla
20800 79 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20  y(noVs2008)),.. 
20810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20820 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
20830 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
20840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
20850 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
20860 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
20870 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
20880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20890 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30         "NoVs2010
208a0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
208b0 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20  Vs2010)),..     
208c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208d0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
208e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
208f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
20900 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
20910 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
20920 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
20930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20940 20 20 20 22 4e 6f 56 73 32 30 31 32 22 2c 20 46     "NoVs2012", F
20950 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
20960 31 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  12)),..         
20970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20980 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
20990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
209a0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
209b0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
209c0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
209d0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
209f0 4e 6f 56 73 32 30 31 33 22 2c 20 46 6f 72 44 69  NoVs2013", ForDi
20a00 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 33 29 29  splay(noVs2013))
20a10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20a20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20a30 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
20a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a50 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
20a60 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
20a70 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
20a80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20a90 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72             "NoTr
20aa0 61 63 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ace", ForDisplay
20ab0 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20  (noTrace)),..   
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ad0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
20ae0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
20af0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20b00 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
20b10 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
20b20 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
20b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b40 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22       "NoConsole"
20b50 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43  , ForDisplay(noC
20b60 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20  onsole)),..     
20b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b80 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
20b90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
20ba0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
20bb0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
20bc0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
20bd0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bf0 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44     "NoLog", ForD
20c00 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d  isplay(noLog)),.
20c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
20c30 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
20c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c50 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
20c60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
20c70 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
20c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c90 20 20 20 20 20 20 20 20 20 22 54 68 72 6f 77 4f           "ThrowO
20ca0 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f 72 44 69  nMissing", ForDi
20cb0 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73  splay(throwOnMis
20cc0 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  sing)),..       
20cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ce0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
20cf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20d00 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
20d10 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
20d20 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
20d30 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
20d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d50 20 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69   "WhatIf", ForDi
20d60 73 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d  splay(whatIf)),.
20d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20d80 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
20d90 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
20da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20db0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
20dc0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
20dd0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
20de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20df0 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 22           "Debug"
20e00 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62  , ForDisplay(deb
20e10 75 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ug)),..         
20e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20e30 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
20e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20e50 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
20e60 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
20e70 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
20e80 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
20e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20ea0 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73  Verbose", ForDis
20eb0 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d  play(verbose)),.
20ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20ed0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
20ee0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
20ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f00 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
20f10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
20f20 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
20f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20f40 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72           "Confir
20f50 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  m", ForDisplay(c
20f60 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20  onfirm)),..     
20f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f80 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
20f90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
20fa0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fe0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21000 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
21010 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
21020 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21040 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
21050 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
21060 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
21070 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
21080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21090 22 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c  "AssemblyTitle",
210a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
210b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
210c0 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65  rDisplay(GetAsse
210d0 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62  mblyTitle(assemb
210e0 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ly))),..        
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21100 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
21110 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
21120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21130 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
21140 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
21150 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
21160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21170 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
21180 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
21190 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on",..          
211a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211b0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74    ForDisplay(Get
211c0 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
211d0 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29  ation(assembly))
211e0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21200 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
21210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21220 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
21230 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
21240 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
21250 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
21260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
212c0 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
212d0 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
212e0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
212f0 65 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d  e Assembly assem
21300 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bly;..          
21310 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c    public Assembl
21320 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y Assembly..    
21330 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21340 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
21350 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79   return assembly
21360 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21370 20 20 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d       set { assem
21380 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  bly = value; }..
21390 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
213a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
213b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21400 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c  private string l
21410 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ogFileName;..   
21420 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
21430 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61  string LogFileNa
21440 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
21450 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21460 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
21470 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  logFileName; }..
21480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21490 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d  set { logFileNam
214a0 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
214b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
214c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
214d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
21520 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 69 72  ivate string dir
21530 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
21540 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
21550 6e 67 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20  ng Directory..  
21560 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21570 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
21580 20 7b 20 72 65 74 75 72 6e 20 64 69 72 65 63 74   { return direct
21590 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ory; }..        
215a0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 69          set { di
215b0 72 65 63 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b  rectory = value;
215c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
215d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
215e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
215f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21620 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21630 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
21640 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  ng coreFileName;
21650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
21660 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 72 65  blic string Core
21670 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
21680 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21690 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
216a0 65 74 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61  eturn coreFileNa
216b0 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
216c0 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 72         set { cor
216d0 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  eFileName = valu
216e0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
216f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21700 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21740 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21750 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
21760 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
21770 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
21780 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 69  public string Li
21790 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  nqFileName..    
217a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
217b0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
217c0 20 72 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65   return linqFile
217d0 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
217e0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
217f0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  inqFileName = va
21800 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
21810 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21820 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21860 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21870 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21880 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61  string ef6FileNa
21890 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
218a0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 45   public string E
218b0 66 36 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  f6FileName..    
218c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
218d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
218e0 20 72 65 74 75 72 6e 20 65 66 36 46 69 6c 65 4e   return ef6FileN
218f0 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
21900 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 65 66          set { ef
21910 36 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  6FileName = valu
21920 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
21930 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21940 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21980 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21990 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
219a0 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c  ring designerFil
219b0 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
219c0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
219d0 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g DesignerFileNa
219e0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
219f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21a00 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
21a10 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
21a20 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21a30 20 20 20 20 20 73 65 74 20 7b 20 64 65 73 69 67       set { desig
21a40 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  nerFileName = va
21a50 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
21a60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21a70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21ac0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21ad0 73 74 72 69 6e 67 20 72 65 67 69 73 74 72 79 56  string registryV
21ae0 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ersion;..       
21af0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
21b00 6e 67 20 52 65 67 69 73 74 72 79 56 65 72 73 69  ng RegistryVersi
21b10 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
21b20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21b30 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
21b40 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b  registryVersion;
21b50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21b60 20 20 20 20 73 65 74 20 7b 20 72 65 67 69 73 74      set { regist
21b70 72 79 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75  ryVersion = valu
21b80 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
21b90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21ba0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21be0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21bf0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
21c00 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69  ring configVersi
21c10 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
21c20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43   public string C
21c30 6f 6e 66 69 67 56 65 72 73 69 6f 6e 0d 0a 20 20  onfigVersion..  
21c40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21c50 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
21c60 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67   { return config
21c70 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20  Version; }..    
21c80 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
21c90 7b 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20  { configVersion 
21ca0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
21cb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21cc0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
21cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21cf0 2f 2f 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 0d 0a 0d 0a  ////////////....
21d10 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
21d20 61 74 65 20 73 74 72 69 6e 67 20 76 73 56 65 72  ate string vsVer
21d30 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20  sionSuffix;..   
21d40 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
21d50 73 74 72 69 6e 67 20 56 73 56 65 72 73 69 6f 6e  string VsVersion
21d60 53 75 66 66 69 78 0d 0a 20 20 20 20 20 20 20 20  Suffix..        
21d70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21d80 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
21d90 75 72 6e 20 76 73 56 65 72 73 69 6f 6e 53 75 66  urn vsVersionSuf
21da0 66 69 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  fix; }..        
21db0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 73          set { vs
21dc0 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20  VersionSuffix = 
21dd0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
21de0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21df0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
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 0d 0a 0d 0a 20 20  //////////....  
21e40 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
21e50 65 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  e string debugFo
21e60 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
21e70 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
21e80 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20   DebugFormat..  
21e90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
21eb0 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
21ec0 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20  ormat; }..      
21ed0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
21ee0 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76 61  debugFormat = va
21ef0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
21f00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21f10 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21f60 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21f70 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
21f80 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
21f90 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54   public string T
21fa0 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20  raceFormat..    
21fb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21fc0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
21fd0 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72   return traceFor
21fe0 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  mat; }..        
21ff0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 72          set { tr
22000 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  aceFormat = valu
22010 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
22020 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22030 20 20 20 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 2f  ////////////////
22060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22070 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22080 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e        private In
22090 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61  stallFlags insta
220a0 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
220b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73        public Ins
220c0 74 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c  tallFlags Instal
220d0 6c 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20  lFlags..        
220e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
220f0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
22100 75 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  urn installFlags
22110 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
22120 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61       set { insta
22130 6c 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b  llFlags = value;
22140 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22150 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22160 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
221b0 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61 63      private Trac
221c0 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50  ePriority debugP
221d0 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
221e0 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72 61        public Tra
221f0 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67  cePriority Debug
22200 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
22210 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22220 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
22230 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72  eturn debugPrior
22240 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ity; }..        
22250 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
22260 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61  bugPriority = va
22270 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
22280 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22290 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
222a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
222e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
222f0 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
22300 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  acePriority;..  
22310 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
22320 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 54   TracePriority T
22330 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20  racePriority..  
22340 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22350 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
22360 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50   { return traceP
22370 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20  riority; }..    
22380 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
22390 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  { tracePriority 
223a0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
223b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
223c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
223d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
223e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
223f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22410 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
22420 61 74 65 20 62 6f 6f 6c 20 70 65 72 55 73 65 72  ate bool perUser
22430 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
22440 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 55 73  ublic bool PerUs
22450 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  er..            
22460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22470 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
22480 70 65 72 55 73 65 72 3b 20 7d 0d 0a 20 20 20 20  perUser; }..    
22490 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
224a0 7b 20 70 65 72 55 73 65 72 20 3d 20 76 61 6c 75  { perUser = valu
224b0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
224c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
224d0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
224e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22510 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22520 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
22530 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20  ol install;..   
22540 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
22550 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20  bool Install..  
22560 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22570 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
22580 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c   { return instal
22590 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  l; }..          
225a0 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
225b0 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  all = value; }..
225c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
225d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
225e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22630 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f 77  private bool wow
22640 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64;..           
22650 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f 77   public bool Wow
22660 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  64..            
22670 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22680 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
22690 77 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20 20  wow64; }..      
226a0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
226b0 77 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b 20 7d  wow64 = value; }
226c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
226d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
226e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22720 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22730 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
22740 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b  oRuntimeVersion;
22750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
22760 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74  blic bool NoRunt
22770 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  imeVersion..    
22780 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22790 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
227a0 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d   return noRuntim
227b0 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20  eVersion; }..   
227c0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
227d0 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   { noRuntimeVers
227e0 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ion = value; }..
227f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22800 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
22810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22860 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44  private bool noD
22870 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20  esktop;..       
22880 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
22890 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20   NoDesktop..    
228a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
228b0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
228c0 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f   return noDeskto
228d0 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  p; }..          
228e0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65        set { noDe
228f0 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d  sktop = value; }
22900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
22920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22960 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22970 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
22980 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20  oCompact;..     
22990 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
229a0 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20  ol NoCompact..  
229b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
229c0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
229d0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70   { return noComp
229e0 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  act; }..        
229f0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
22a00 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b  Compact = value;
22a10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22a20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22a30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22a80 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
22a90 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
22aa0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
22ab0 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a  bool NoNetFx20..
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
22ae0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
22af0 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20  tFx20; }..      
22b00 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
22b10 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75  noNetFx20 = valu
22b20 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
22b30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22b40 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b80 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22b90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
22ba0 6f 6c 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20  ol noNetFx35;.. 
22bb0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
22bc0 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 33 35  c bool NoNetFx35
22bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
22be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22bf0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
22c00 4e 65 74 46 78 33 35 3b 20 7d 0d 0a 20 20 20 20  NetFx35; }..    
22c10 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
22c20 7b 20 6e 6f 4e 65 74 46 78 33 35 20 3d 20 76 61  { noNetFx35 = va
22c30 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
22c40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22c50 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c90 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22ca0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22cb0 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d  bool noNetFx40;.
22cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
22cd0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
22ce0 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  40..            
22cf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22d00 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
22d10 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20  noNetFx40; }..  
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
22d30 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20  t { noNetFx40 = 
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 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35  e bool noNetFx45
22dd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
22de0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74  ublic bool NoNet
22df0 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20  Fx45..          
22e00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22e10 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
22e20 6e 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d 0d 0a  n noNetFx45; }..
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 6f 4e 65 74 46 78 34 35 20  set { noNetFx45 
22e50 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
22e60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22e70 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22ec0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
22ed0 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
22ee0 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  451;..          
22ef0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
22f00 4e 65 74 46 78 34 35 31 0d 0a 20 20 20 20 20 20  NetFx451..      
22f10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22f20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
22f30 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 31  eturn noNetFx451
22f40 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
22f50 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74       set { noNet
22f60 46 78 34 35 31 20 3d 20 76 61 6c 75 65 3b 20 7d  Fx451 = 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 62 6f 6f 6c 20 6e    private bool n
22ff0 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20  oVs2005;..      
23000 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
23010 6c 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20 20  l NoVs2005..    
23020 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23030 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
23040 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 35   return noVs2005
23050 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
23060 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
23070 30 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  005 = value; }..
23080 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23090 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
230a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
230f0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
23100 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20  s2008;..        
23110 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
23120 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20  NoVs2008..      
23130 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23140 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
23150 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20  eturn noVs2008; 
23160 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
23170 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30     set { noVs200
23180 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  8 = value; }..  
23190 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
231a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
231b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
231f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
23200 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
23210 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  010;..          
23220 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
23230 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20  Vs2010..        
23240 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23250 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
23260 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d  urn noVs2010; }.
23270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23280 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20   set { noVs2010 
23290 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
232a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
232b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
232c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
23300 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
23310 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31  ate bool noVs201
23320 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2;..            
23330 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73  public bool NoVs
23340 32 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20  2012..          
23350 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23360 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
23370 6e 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a 20  n noVs2012; }.. 
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
23390 65 74 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d 20  et { noVs2012 = 
233a0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
233b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
233c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
233d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23410 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
23420 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 3b  e bool noVs2013;
23430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23440 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
23450 31 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  13..            
23460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23470 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
23480 6e 6f 56 73 32 30 31 33 3b 20 7d 0d 0a 20 20 20  noVs2013; }..   
23490 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
234a0 20 7b 20 6e 6f 56 73 32 30 31 33 20 3d 20 76 61   { noVs2013 = va
234b0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
234c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
234d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
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 0d 0a 0d 0a 20 20 20 20  ////////....    
23520 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23530 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20  bool noTrace;.. 
23540 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
23550 63 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a  c bool NoTrace..
23560 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
23580 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72  et { return noTr
23590 61 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ace; }..        
235a0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
235b0 54 72 61 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d  Trace = value; }
235c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
235d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
235e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
235f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23620 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
23630 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
23640 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20  oConsole;..     
23650 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
23660 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20  ol NoConsole..  
23670 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23680 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
23690 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73   { return noCons
236a0 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ole; }..        
236b0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
236c0 43 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b  Console = value;
236d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
236e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
236f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23730 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23740 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
23750 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20   noLog;..       
23760 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
23770 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20   NoLog..        
23780 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23790 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
237a0 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20  urn noLog; }..  
237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
237c0 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75  t { noLog = valu
237d0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
237e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
237f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23830 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23840 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
23850 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
23860 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
23870 70 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68 72 6f  public bool Thro
23880 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20  wOnMissing..    
23890 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
238a0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
238b0 20 72 65 74 75 72 6e 20 74 68 72 6f 77 4f 6e 4d   return throwOnM
238c0 69 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20  issing; }..     
238d0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
238e0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20   throwOnMissing 
238f0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
23900 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23910 20 20 20 20 20 20 20 20 20 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 2f 2f 0d 0a 0d 0a  ////////////....
23960 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
23970 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
23980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23990 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
239a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
239b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239c0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68   get { return wh
239d0 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
239e0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77           set { w
239f0 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d  hatIf = value; }
23a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23a10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
23a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
23a70 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64    private bool d
23a80 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  ebug;..         
23a90 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 44     public bool D
23aa0 65 62 75 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ebug..          
23ab0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23ac0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
23ad0 6e 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20 20 20  n debug; }..    
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
23af0 7b 20 64 65 62 75 67 20 3d 20 76 61 6c 75 65 3b  { debug = value;
23b00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23b10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23b20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23b70 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
23b80 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20   verbose;..     
23b90 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
23ba0 6f 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol Verbose..    
23bb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23bc0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
23bd0 20 72 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b   return verbose;
23be0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23bf0 20 20 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73      set { verbos
23c00 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
23c10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23c20 20 20 20 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 0d 0a  //////////////..
23c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
23c80 69 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69  ivate bool confi
23c90 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rm;..           
23ca0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e   public bool Con
23cb0 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  firm..          
23cc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23cd0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
23ce0 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20  n confirm; }..  
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
23d00 74 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61  t { confirm = va
23d10 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
23d20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
23d30 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
23d40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23d50 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
23d60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23db0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
23dc0 6f 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  on FrameworkList
23dd0 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
23de0 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
23df0 6c 61 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69  lass FrameworkLi
23e00 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  st..        {.. 
23e10 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
23e20 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
23e30 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
23e40 20 20 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65      public Frame
23e50 77 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20  workList()..    
23e60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23e70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
23e80 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
23e90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23ea0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
23eb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f  ////////////////
23ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f00 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
23f10 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
23f20 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
23f30 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
23f40 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
23f50 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20  ootKey;..       
23f60 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
23f70 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74  RegistryKey Root
23f80 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
23f90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23fa0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
23fb0 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20   rootKey; }..   
23fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
23fd0 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c   { rootKey = val
23fe0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
23ff0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24000 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
24010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24040 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
24050 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
24060 74 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b  tringList names;
24070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
24080 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20  blic StringList 
24090 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20  Names..         
240a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
240b0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
240c0 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20  rn names; }..   
240d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
240e0 20 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65   { names = value
240f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
24100 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
24110 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
24120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24150 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24160 20 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72       private Ver
24170 73 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73  sionMap versions
24180 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
24190 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70  ublic VersionMap
241a0 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20   Versions..     
241b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
241c0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
241d0 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b  return versions;
241e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
241f0 20 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f      set { versio
24200 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ns = value; }.. 
24210 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
24220 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
24260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24270 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
24280 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73  rivate StringLis
24290 74 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b  t platformNames;
242a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
242b0 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20  blic StringList 
242c0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20  PlatformNames.. 
242d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
242f0 74 20 7b 20 72 65 74 75 72 6e 20 70 6c 61 74 66  t { return platf
24300 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20  ormNames; }..   
24310 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
24320 20 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73   { platformNames
24330 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
24340 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
24350 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
24360 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
24370 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
24380 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
24390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
243e0 23 72 65 67 69 6f 6e 20 56 73 4c 69 73 74 20 43  #region VsList C
243f0 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
24400 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
24410 73 73 20 56 73 4c 69 73 74 0d 0a 20 20 20 20 20  ss VsList..     
24420 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24430 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
24440 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
24450 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
24460 63 20 56 73 4c 69 73 74 28 29 0d 0a 20 20 20 20  c VsList()..    
24470 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24480 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
24490 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
244a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
244b0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
244c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
244d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24510 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
24520 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
24530 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
24540 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
24550 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
24560 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20  y rootKey;..    
24570 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
24580 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52  ockRegistryKey R
24590 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20  ootKey..        
245a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
245b0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
245c0 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a  urn rootKey; }..
245d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245e0 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20  set { rootKey = 
245f0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
24600 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24610 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24660 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
24670 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65  e VersionList ve
24680 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20  rsions;..       
24690 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73       public Vers
246a0 69 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73  ionList Versions
246b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
246c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
246d0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65   get { return ve
246e0 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20  rsions; }..     
246f0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
24700 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75   versions = valu
24710 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
24720 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
24730 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
24740 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24750 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
24760 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
24770 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
24780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
247d0 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
247e0 73 74 61 6e 74 20 44 61 74 61 0d 0a 20 20 20 20  stant Data..    
247f0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
24800 74 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c  t string CoreFil
24810 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  eName = "System.
24820 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22  Data.SQLite.dll"
24830 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
24840 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
24850 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 22  LinqFileName = "
24860 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
24870 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20  te.Linq.dll";.. 
24880 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
24890 6f 6e 73 74 20 73 74 72 69 6e 67 20 45 66 36 46  onst string Ef6F
248a0 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65  ileName = "Syste
248b0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
248c0 36 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  6.dll";..       
248d0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
248e0 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69  tring DesignerFi
248f0 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  leName = "SQLite
24900 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d  .Designer.dll";.
24910 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
24920 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72   const string Pr
24930 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51  oviderName = "SQ
24940 4c 69 74 65 20 44 61 74 61 20 50 72 6f 76 69 64  Lite Data Provid
24950 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  er";..        pr
24960 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
24970 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  ng ProjectName =
24980 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
24990 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
249a0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
249b0 72 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65  ring LegacyProje
249c0 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  ctName = "SQLite
249d0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
249e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a20 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24a30 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
24a40 74 72 69 6e 67 20 44 65 73 63 72 69 70 74 69 6f  tring Descriptio
24a50 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n =..           
24a60 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
24a70 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 66   Data Provider f
24a80 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20  or SQLite";.... 
24a90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24ae0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
24af0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43  e const string C
24b00 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
24b10 56 65 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e  Version = "v2.0.
24b20 35 30 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20  50727";..       
24b30 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
24b40 74 72 69 6e 67 20 43 4c 52 76 34 49 6d 61 67 65  tring CLRv4Image
24b50 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
24b60 20 22 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a   "v4.0.30319";..
24b70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
24b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24bc0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
24bd0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
24be0 67 20 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d  g SystemEf6Assem
24bf0 62 6c 79 4e 61 6d 65 20 3d 20 22 45 6e 74 69 74  blyName = "Entit
24c00 79 46 72 61 6d 65 77 6f 72 6b 2c 20 22 20 2b 0d  yFramework, " +.
24c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 56 65  .            "Ve
24c20 72 73 69 6f 6e 3d 36 2e 30 2e 30 2e 30 2c 20 43  rsion=6.0.0.0, C
24c30 75 6c 74 75 72 65 3d 6e 65 75 74 72 61 6c 2c 20  ulture=neutral, 
24c40 50 75 62 6c 69 63 4b 65 79 54 6f 6b 65 6e 3d 62  PublicKeyToken=b
24c50 37 37 61 35 63 35 36 31 39 33 34 65 30 38 39 22  77a5c561934e089"
24c60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
24c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cb0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24cc0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
24cd0 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75  ring NameAndValu
24ce0 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20  eFormat = "{0}: 
24cf0 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  {1}";..        p
24d00 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
24d10 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66 66 69  ing LogFileSuffi
24d20 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20  x = ".log";.... 
24d30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24d80 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
24d90 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 56  e const string V
24da0 73 44 65 76 45 6e 76 53 65 74 75 70 46 6f 72 6d  sDevEnvSetupForm
24db0 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b  at = "{0}: {1}";
24dc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
24dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e10 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
24e20 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
24e30 69 6e 67 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 20  ing RootKeyName 
24e40 3d 20 22 53 6f 66 74 77 61 72 65 22 3b 0d 0a 20  = "Software";.. 
24e50 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
24e60 6f 6e 73 74 20 73 74 72 69 6e 67 20 57 6f 77 36  onst string Wow6
24e70 34 53 75 62 4b 65 79 4e 61 6d 65 20 3d 20 22 57  4SubKeyName = "W
24e80 6f 77 36 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a  ow6432Node";....
24e90 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24ee0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
24ef0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
24f00 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  The .NET Framewo
24f10 72 6b 20 68 61 73 20 62 6f 74 68 20 33 32 2d 62  rk has both 32-b
24f20 69 74 20 61 6e 64 20 36 34 2d 62 69 74 20 65 64  it and 64-bit ed
24f30 69 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20  itions...       
24f40 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69   //..        pri
24f50 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
24f60 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74 46 78 49  only bool NetFxI
24f70 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 66 61 6c  s32BitOnly = fal
24f80 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  se;....        /
24f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fd0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24fe0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
24ff0 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20   NOTE: For now, 
25000 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 69 73  Visual Studio is
25010 20 61 6c 77 61 79 73 20 61 20 33 32 2d 62 69 74   always a 32-bit
25020 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20   application... 
25030 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
25040 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
25050 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20  c readonly bool 
25060 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20  VsIs32BitOnly = 
25070 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
25080 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
250d0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
250e0 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69  ic readonly stri
250f0 6e 67 20 56 73 49 64 46 6f 72 6d 61 74 20 3d 20  ng VsIdFormat = 
25100 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "B";....        
25110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25150 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25160 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
25170 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
25180 67 20 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65  g XPathForAddEle
25190 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
251a0 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
251b0 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
251c0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
251d0 65 73 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e  es/add[@invarian
251e0 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a  t=\"{0}\"]";....
251f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25200 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
25210 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52  string XPathForR
25220 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a  emoveElement =..
25230 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
25240 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
25250 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
25260 72 46 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76  rFactories/remov
25270 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b  e[@invariant=\"{
25280 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20  0}\"]";..       
25290 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
252a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
252b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
252f0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
25300 6e 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63  n Private Static
25310 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70   Data..        p
25320 72 69 76 61 74 65 20 73 74 61 74 69 63 20 41 73  rivate static As
25330 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73 65 6d  sembly thisAssem
25340 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47  bly = Assembly.G
25350 65 74 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d  etExecutingAssem
25360 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bly();....      
25370 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
25380 20 73 74 72 69 6e 67 20 74 72 61 63 65 43 61 74   string traceCat
25390 65 67 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  egory = Path.Get
253a0 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20  FileName(..     
253b0 20 20 20 20 20 20 20 74 68 69 73 41 73 73 65 6d         thisAssem
253c0 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 20 2f  bly.Location); /
253d0 2a 20 4e 4f 54 45 3a 20 53 61 6d 65 20 66 6f 72  * NOTE: Same for
253e0 20 64 65 62 75 67 20 61 6e 64 20 74 72 61 63 65   debug and trace
253f0 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  . */....        
25400 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54  private static T
25410 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62  raceCallback deb
25420 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70  ugCallback = App
25430 44 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20  Debug;..        
25440 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54  private static T
25450 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
25460 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70  ceCallback = App
25470 54 72 61 63 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  Trace;....      
25480 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
254d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
254e0 74 69 63 20 73 74 72 69 6e 67 20 73 79 73 74 65  tic string syste
254f0 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c  mDirectory = nul
25500 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e 44 4f 57  l;....#if WINDOW
25510 53 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  S..        priva
25520 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
25530 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
25540 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b 0d 0a 23  Wow64 = null;..#
25550 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
25560 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
255b0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
255c0 69 63 20 69 6e 74 20 66 69 6c 65 73 43 72 65 61  ic int filesCrea
255d0 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ted = 0;..      
255e0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
255f0 20 69 6e 74 20 66 69 6c 65 73 4d 6f 64 69 66 69   int filesModifi
25600 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ed = 0;..       
25610 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
25620 69 6e 74 20 66 69 6c 65 73 44 65 6c 65 74 65 64  int filesDeleted
25630 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 23   = 0;..        #
25640 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
25650 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
256a0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
256b0 54 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  Trace Handling..
256c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
256d0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
256e0 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20  tLogFileName(.. 
256f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
25700 67 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20  g typeName..    
25710 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72          ) /* thr
25720 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  ow */..        {
25730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
25740 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20  ring fileName = 
25750 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65  Path.GetTempFile
25760 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Name();..       
25770 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
25780 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  ctory = Path.Get
25790 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 66 69  DirectoryName(fi
257a0 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  leName);..      
257b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
257c0 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68  eNameOnly = Path
257d0 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74 68  .GetFileNameWith
257e0 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c  outExtension(fil
257f0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
25800 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65         string ne
25810 77 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  wFileName = Path
25820 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
25830 72 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ry, String.Forma
25840 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
25850 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c      "{0}{1}{2}",
25860 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
25870 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
25880 45 6d 70 74 79 28 74 79 70 65 4e 61 6d 65 29 20  Empty(typeName) 
25890 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
258a0 20 20 20 20 20 20 20 22 2e 22 20 2b 20 74 79 70         "." + typ
258b0 65 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45  eName : String.E
258c0 6d 70 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65  mpty, "." + file
258d0 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20  NameOnly +..    
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258f0 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29 29 3b  LogFileSuffix));
25900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25910 46 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61  File.Move(fileNa
25920 6d 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29  me, newFileName)
25930 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25940 20 72 65 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e   return newFileN
25950 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ame;..        }.
25960 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
25970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
259c0 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
259d0 64 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20 20  d AppDebug(..   
259e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
259f0 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
25a00 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
25a10 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
25a20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
25a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61  .            Tra
25a40 63 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65 28  ceOps.DebugCore(
25a50 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a70 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f  TraceOps.DebugFo
25a80 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e  rmat, TraceOps.N
25a90 65 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a 20  extDebugId(),.. 
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
25ab0 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d  raceOps.TimeStam
25ac0 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f  p(DateTime.UtcNo
25ad0 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61  w), message), ca
25ae0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
25af0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
25b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25b50 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
25b60 20 76 6f 69 64 20 41 70 70 54 72 61 63 65 28 0d   void AppTrace(.
25b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
25b80 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
25b90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
25ba0 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
25bb0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
25bc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25bd0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 43   TraceOps.TraceC
25be0 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ore(String.Forma
25bf0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
25c00 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
25c10 63 65 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f  ceFormat, TraceO
25c20 70 73 2e 4e 65 78 74 54 72 61 63 65 49 64 28 29  ps.NextTraceId()
25c30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25c40 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65     TraceOps.Time
25c50 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55  Stamp(DateTime.U
25c60 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29  tcNow), message)
25c70 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  , category);..  
25c80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
25c90 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
25ca0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
25cf0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
25d00 6e 20 47 65 6e 65 72 69 63 20 50 6c 61 74 66 6f  n Generic Platfo
25d10 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rm Handling..   
25d20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
25d30 74 69 63 20 62 6f 6f 6c 20 49 73 36 34 42 69 74  tic bool Is64Bit
25d40 50 72 6f 63 65 73 73 28 29 0d 0a 20 20 20 20 20  Process()..     
25d50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25d60 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
25d70 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72    // NOTE: Retur
25d80 6e 73 20 74 72 75 65 20 69 66 20 74 68 65 20 63  ns true if the c
25d90 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 69  urrent process i
25da0 73 20 36 34 2d 62 69 74 2e 20 20 49 66 20 74 68  s 64-bit.  If th
25db0 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
25dc0 2f 2f 20 20 20 20 20 20 20 69 73 20 74 72 75 65  //       is true
25dd0 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20 74 68 61 74  , we *know* that
25de0 20 77 65 20 6d 75 73 74 20 62 65 20 72 75 6e 6e   we must be runn
25df0 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 0d  ing on a 64-bit.
25e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
25e10 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20        operating 
25e20 73 79 73 74 65 6d 20 61 73 20 77 65 6c 6c 2e 20  system as well. 
25e30 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 69   However, if thi
25e40 73 20 69 73 20 66 61 6c 73 65 2c 20 77 65 0d 0a  s is false, we..
25e50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
25e60 20 20 20 20 20 64 6f 20 6e 6f 74 20 6e 65 63 65       do not nece
25e70 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 74 68 61  ssarily know tha
25e80 74 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67  t we are running
25e90 20 6f 6e 20 61 20 33 32 2d 62 69 74 0d 0a 20 20   on a 32-bit..  
25ea0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
25eb0 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73     operating sys
25ec0 74 65 6d 2c 20 64 75 65 20 74 6f 20 57 6f 57 36  tem, due to WoW6
25ed0 34 20 28 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36  4 (Win32-on-Win6
25ee0 34 29 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  4), etc...      
25ef0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
25f00 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e        return (In
25f10 74 50 74 72 2e 53 69 7a 65 20 3d 3d 20 73 69 7a  tPtr.Size == siz
25f20 65 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e  eof(long)); // N
25f30 4f 54 45 3a 20 50 6f 69 6e 74 65 72 20 69 73 20  OTE: Pointer is 
25f40 36 34 2d 62 69 74 73 3f 0d 0a 20 20 20 20 20 20  64-bits?..      
25f50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
25f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fa0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25fb0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
25fc0 20 62 6f 6f 6c 20 49 73 53 75 70 70 6f 72 74 65   bool IsSupporte
25fd0 64 52 6f 6f 74 4b 65 79 28 0d 0a 20 20 20 20 20  dRootKey(..     
25fe0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
25ff0 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20  try registry,.. 
26000 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
26010 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
26020 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
26030 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
26040 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
26050 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63   Object.Referenc
26060 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
26070 20 72 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   registry.Curren
26080 74 55 73 65 72 29 20 7c 7c 0d 0a 20 20 20 20 20  tUser) ||..     
26090 20 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63             Objec
260a0 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c  t.ReferenceEqual
260b0 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73  s(rootKey, regis
260c0 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65  try.LocalMachine
260d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
260e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
260f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
26140 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
26150 67 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65  g GetRootKeyName
26160 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
26170 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
26180 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
26190 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
261a0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
261b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
261c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
261d0 55 47 46 49 58 3a 20 41 70 70 61 72 65 6e 74 6c  UGFIX: Apparentl
261e0 79 2c 20 74 68 65 20 70 65 72 2d 75 73 65 72 20  y, the per-user 
261f0 72 65 67 69 73 74 72 79 20 68 69 76 65 20 64 6f  registry hive do
26200 65 73 20 6e 6f 74 20 75 73 65 0d 0a 20 20 20 20  es not use..    
26210 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
26220 20 20 20 74 68 65 20 22 57 6f 77 36 34 33 32 4e     the "Wow6432N
26230 6f 64 65 22 20 6e 6f 64 65 20 74 6f 20 73 74 6f  ode" node to sto
26240 72 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20  re settings for 
26250 33 32 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20  32-bit..        
26260 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61      //         a
26270 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 75 6e 6e  pplications runn
26280 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 20  ing on a 64-bit 
26290 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
262a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
262b0 2f 20 20 20 20 20 20 20 20 20 54 69 63 6b 65 74  /         Ticket
262c0 20 5b 61 30 36 37 37 33 30 39 66 30 5d 20 68 61   [a0677309f0] ha
262d0 73 20 66 75 72 74 68 65 72 20 64 65 74 61 69 6c  s further detail
262e0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
262f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
26300 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
26310 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52  rmat("{0}{1}", R
26320 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  ootKeyName,..   
26330 20 20 20 20 20 20 20 20 20 20 20 20 20 21 70 65               !pe
26340 72 55 73 65 72 20 26 26 20 77 6f 77 36 34 20 26  rUser && wow64 &
26350 26 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73  & Is64BitProcess
26360 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  () ?..          
26370 20 20 20 20 20 20 20 20 20 20 22 5c 5c 22 20 2b            "\\" +
26380 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65   Wow64SubKeyName
26390 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29   : String.Empty)
263a0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
263b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
263c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
26400 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
26410 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
26420 20 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74   GetSystemDirect
26430 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
26440 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
26450 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
26460 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44       {..#if WIND
26470 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OWS..           
26480 20 69 66 20 28 77 6f 77 36 34 29 0d 0a 20 20 20   if (wow64)..   
26490 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
264a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
264b0 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57  systemDirectoryW
264c0 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ow64 == null).. 
264d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
264e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
264f0 20 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65        systemDire
26500 63 74 6f 72 79 57 6f 77 36 34 20 3d 0d 0a 20 20  ctoryWow64 =..  
26510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26520 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
26530 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 79 73  veMethods.GetSys
26540 74 65 6d 44 69 72 65 63 74 6f 72 79 28 29 3b 0d  temDirectory();.
26550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26560 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
26570 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 79 73        return sys
26580 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
26590 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4;..            
265a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
265b0 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  lse..#endif..   
265c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
265d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
265e0 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20  systemDirectory 
265f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
26600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79                sy
26610 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20  stemDirectory = 
26620 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74  Environment.Syst
26630 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a  emDirectory;....
26640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26650 72 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69 72  return systemDir
26660 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
26670 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26680 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
26690 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
266a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
266b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
266f0 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65      #region Gene
26700 72 69 63 20 53 74 72 69 6e 67 20 48 61 6e 64 6c  ric String Handl
26710 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
26720 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
26730 6e 67 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ng ForDisplay(..
26740 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
26750 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ct value..      
26760 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
26770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26780 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
26790 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
267a0 20 20 20 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c      return "<nul
267b0 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  l>";....        
267c0 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
267d0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
267e0 54 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c 75  Type type = valu
267f0 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a  e.GetType();....
26800 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26810 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 58  type == typeof(X
26820 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20  mlElement))..   
26830 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26840 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
26850 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d  lement element =
26860 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c   (XmlElement)val
26870 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
26880 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
26890 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c  element.OuterXml
268a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
268b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
268c0 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74  se if (type == t
268d0 79 70 65 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d  ypeof(Version)).
268e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
268f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26900 56 65 72 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20  Version version 
26910 3d 20 28 56 65 72 73 69 6f 6e 29 76 61 6c 75 65  = (Version)value
26920 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26930 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74       result = St
26940 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30  ring.Format("v{0
26950 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20  }", version);.. 
26960 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
26970 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
26980 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f  f (type == typeo
26990 66 28 50 72 6f 63 65 73 73 53 74 61 72 74 49 6e  f(ProcessStartIn
269a0 66 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  fo))..          
269b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
269c0 20 20 20 20 20 50 72 6f 63 65 73 73 53 74 61 72       ProcessStar
269d0 74 49 6e 66 6f 20 73 74 61 72 74 49 6e 66 6f 20  tInfo startInfo 
269e0 3d 20 28 50 72 6f 63 65 73 73 53 74 61 72 74 49  = (ProcessStartI
269f0 6e 66 6f 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  nfo)value;....  
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26a10 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f  sult = String.Fo
26a20 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
26a30 20 20 20 20 20 20 20 20 20 20 20 22 66 69 6c 65             "file
26a40 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 61 72 67 75  Name = {0}, argu
26a50 6d 65 6e 74 73 20 3d 20 7b 31 7d 2c 20 77 6f 72  ments = {1}, wor
26a60 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 20 3d 20  kingDirectory = 
26a70 7b 32 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {2}, " +..      
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
26a90 73 65 53 68 65 6c 6c 45 78 65 63 75 74 65 20 3d  seShellExecute =
26aa0 20 7b 33 7d 2c 20 72 65 64 69 72 65 63 74 53 74   {3}, redirectSt
26ab0 61 6e 64 61 72 64 4f 75 74 70 75 74 20 3d 20 7b  andardOutput = {
26ac0 34 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  4}, " +..       
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 65               "re
26ae0 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 45 72  directStandardEr
26af0 72 6f 72 20 3d 20 7b 35 7d 22 2c 20 46 6f 72 44  ror = {5}", ForD
26b00 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
26b20 72 74 49 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65 29  rtInfo.FileName)
26b30 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 74 61  , ForDisplay(sta
26b40 72 74 49 6e 66 6f 2e 41 72 67 75 6d 65 6e 74 73  rtInfo.Arguments
26b50 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
26b60 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
26b70 61 79 28 73 74 61 72 74 49 6e 66 6f 2e 57 6f 72  ay(startInfo.Wor
26b80 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 29 2c 20  kingDirectory), 
26b90 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
26ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bb0 20 73 74 61 72 74 49 6e 66 6f 2e 55 73 65 53 68   startInfo.UseSh
26bc0 65 6c 6c 45 78 65 63 75 74 65 29 2c 20 46 6f 72  ellExecute), For
26bd0 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
26be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
26bf0 61 72 74 49 6e 66 6f 2e 52 65 64 69 72 65 63 74  artInfo.Redirect
26c00 53 74 61 6e 64 61 72 64 4f 75 74 70 75 74 29 2c  StandardOutput),
26c10 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
26c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c30 20 20 73 74 61 72 74 49 6e 66 6f 2e 52 65 64 69    startInfo.Redi
26c40 72 65 63 74 53 74 61 6e 64 61 72 64 45 72 72 6f  rectStandardErro
26c50 72 29 29 3b 20 2f 2a 20 52 45 43 55 52 53 49 56  r)); /* RECURSIV
26c60 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  E */..          
26c70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26c80 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d   else if (type =
26c90 3d 20 74 79 70 65 6f 66 28 50 72 6f 63 65 73 73  = typeof(Process
26ca0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
26cb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26cc0 20 20 20 50 72 6f 63 65 73 73 20 70 72 6f 63 65     Process proce
26cd0 73 73 20 3d 20 28 50 72 6f 63 65 73 73 29 76 61  ss = (Process)va
26ce0 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
26cf0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
26d00 20 70 72 6f 63 65 73 73 2e 49 64 2e 54 6f 53 74   process.Id.ToSt
26d10 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20  ring();..       
26d20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26d30 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70      else if (typ
26d40 65 20 3d 3d 20 74 79 70 65 6f 66 28 44 61 74 61  e == typeof(Data
26d50 52 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67  ReceivedEventArg
26d60 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s))..           
26d70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26d80 20 20 20 20 44 61 74 61 52 65 63 65 69 76 65 64      DataReceived
26d90 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41  EventArgs eventA
26da0 72 67 73 20 3d 20 28 44 61 74 61 52 65 63 65 69  rgs = (DataRecei
26db0 76 65 64 45 76 65 6e 74 41 72 67 73 29 76 61 6c  vedEventArgs)val
26dc0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
26dd0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
26de0 46 6f 72 44 69 73 70 6c 61 79 28 65 76 65 6e 74  ForDisplay(event
26df0 41 72 67 73 2e 44 61 74 61 29 3b 20 2f 2a 20 52  Args.Data); /* R
26e00 45 43 55 52 53 49 56 45 20 2a 2f 0d 0a 20 20 20  ECURSIVE */..   
26e10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
26e20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
26e30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26e40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
26e50 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74  ult = value.ToSt
26e60 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ring();....     
26e70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
26e80 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20  esult.Length == 
26e90 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
26ea0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
26eb0 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20  <empty>";....   
26ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
26ed0 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ult = String.For
26ee0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
26ef0 20 20 20 20 20 20 20 20 20 20 74 79 70 65 2e 49            type.I
26f00 73 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65  sSubclassOf(type
26f10 6f 66 28 56 61 6c 75 65 54 79 70 65 29 29 20 3f  of(ValueType)) ?
26f20 20 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c   "{0}" : "\"{0}\
26f30 22 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "",..           
26f40 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29           result)
26f50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
26f60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26f70 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
26f80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
26f90 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
26fa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
26fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ff0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
27000 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41 74 74  ion Assembly Att
27010 72 69 62 75 74 65 20 48 61 6e 64 6c 69 6e 67 0d  ribute Handling.
27020 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
27030 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
27040 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  tAssemblyConfigu
27050 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ration(..       
27060 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
27070 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
27080 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
27090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
270a0 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75   (assembly != nu
270b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
270c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
270d0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
270e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
270f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27100 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44  if (assembly.IsD
27110 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20  efined(..       
27120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27130 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65       typeof(Asse
27140 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
27150 6e 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c  nAttribute), fal
27160 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
27170 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27190 20 20 20 20 20 41 73 73 65 6d 62 6c 79 43 6f 6e       AssemblyCon
271a0 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62  figurationAttrib
271b0 75 74 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ute configuratio
271c0 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n =..           
271d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271e0 20 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67   (AssemblyConfig
271f0 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65  urationAttribute
27200 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
27220 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f  ssembly.GetCusto
27230 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20  mAttributes(..  
27240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
27260 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e  peof(AssemblyCon
27270 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62  figurationAttrib
27280 75 74 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ute),..         
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272a0 20 20 20 20 20 20 20 66 61 6c 73 65 29 5b 30 5d         false)[0]
272b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
272c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
272d0 75 72 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  urn configuratio
272e0 6e 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3b  n.Configuration;
272f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27300 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27310 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
27320 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
27330 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
27340 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27350 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
27360 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
27370 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
27380 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27390 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
273a0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
273b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
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 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
27410 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
27420 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79  ring GetAssembly
27430 54 69 74 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  Title(..        
27440 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
27450 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
27460 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
27470 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
27480 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
27490 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
274a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
274b0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
274c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
274e0 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65  f (assembly.IsDe
274f0 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20  fined(..        
27500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27510 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
27520 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
27530 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  e), false))..   
27540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27550 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27560 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
27570 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75  mblyTitleAttribu
27580 74 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20  te title =..    
27590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275a0 20 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c          (Assembl
275b0 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29  yTitleAttribute)
275c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
275d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
275e0 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d  sembly.GetCustom
275f0 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20  Attributes(..   
27600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27610 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
27620 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c  eof(AssemblyTitl
27630 65 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c  eAttribute), fal
27640 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20  se)[0];....     
27650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27660 20 20 20 72 65 74 75 72 6e 20 74 69 74 6c 65 2e     return title.
27670 54 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  Title;..        
27680 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
276a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
276b0 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
276c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
276d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276e0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
276f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27700 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27720 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
27730 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27740 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
27750 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
277a0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
277b0 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  n .NET Framework
277c0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
277d0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
277e0 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d  c string GetFram
277f0 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65  eworkRootKeyName
27800 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
27810 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
27820 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
27830 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
27840 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
27850 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27860 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
27870 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74  ("{0}\\Microsoft
27880 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22  \\.NETFramework"
27890 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
278a0 20 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d     GetRootKeyNam
278b0 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  e(perUser, wow64
278c0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
278d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
278e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27920 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
27930 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
27940 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b  ng GetFrameworkK
27950 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
27960 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
27970 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
27980 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
27990 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
279a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
279b0 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
279c0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
279d0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
279e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
279f0 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
27a00 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
27a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
27a20 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53  ring format = !S
27a30 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
27a40 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  pty(platformName
27a50 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
27a60 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f       "{0}\\Micro
27a70 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c  soft\\{1}\\v{2}\
27a80 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20  \{3}" :..       
27a90 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
27aa0 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
27ab0 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  {2}";....       
27ac0 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
27ad0 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74  ng.Format(format
27ae0 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65  , GetRootKeyName
27af0 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29  (perUser, wow64)
27b00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27b10 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
27b20 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
27b30 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
27b40 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
27b50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
27b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
27bb0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
27bc0 67 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d  g GetImageRuntim
27bd0 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20  eVersion(..     
27be0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
27bf0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
27c00 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
27c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
27c20 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
27c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c40 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
27c50 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 52  bly = Assembly.R
27c60 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61  eflectionOnlyLoa
27c70 64 46 72 6f 6d 28 0d 0a 20 20 20 20 20 20 20 20  dFrom(..        
27c80 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
27c90 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
27ca0 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
27cb0 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
27cc0 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
27cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ce0 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79   return assembly
27cf0 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  .ImageRuntimeVer
27d00 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
27d10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
27d20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
27d30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27d40 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
27d50 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
27d60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27d70 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
27d80 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
27d90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
27da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
27de0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
27df0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
27e00 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
27e10 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
27e20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
27e30 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
27e40 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
27e50 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
27e60 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
27e70 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
27e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
27e90 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
27ea0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
27eb0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
27ec0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
27ed0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
27ee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27ef0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
27f00 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
27f10 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
27f20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
27f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f40 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74 46 72 61   rootKey, GetFra
27f50 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d  meworkRootKeyNam
27f60 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  e(perUser, wow64
27f70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
27f80 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 77          false, w
27f90 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
27fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27fc0 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
27fd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27fe0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
27ff0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
28000 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
28010 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48 65  lue = RegistryHe
28020 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a  lper.GetValue(..
28030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28040 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c      key, "Instal
28050 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20 77 68  lRoot", null, wh
28060 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
28070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28080 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
28090 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
280a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280b0 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
280c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280d0 72 65 74 75 72 6e 20 50 61 74 68 2e 43 6f 6d 62  return Path.Comb
280e0 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ine(..          
280f0 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
28100 67 29 76 61 6c 75 65 2c 20 53 74 72 69 6e 67 2e  g)value, String.
28110 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 66  Format("v{0}", f
28120 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
28130 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
28140 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
28150 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
28160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
28170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
281c0 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61 6d 65  region Per-Frame
281d0 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20 48 61  work/Platform Ha
281e0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
281f0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
28200 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 46 72  oid InitializeFr
28210 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a 20 20  ameworkList(..  
28220 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
28230 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
28240 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
28250 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
28260 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
28270 20 20 20 20 20 20 20 20 20 20 72 65 66 20 46 72            ref Fr
28280 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
28290 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20  eworkList..     
282a0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
282b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
282c0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
282d0 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
282e0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
282f0 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 65 77  meworkList = new
28300 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29   FrameworkList()
28310 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28320 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
28330 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  st.RootKey == nu
28340 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28350 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
28360 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f  st.RootKey = roo
28370 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
28380 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
283d0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
283e0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
283f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
28400 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28410 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
28420 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 20 6e  rkList.Names = n
28430 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b  ew StringList();
28440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28450 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
28460 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
28470 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
28480 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20  n.NoDesktop)..  
28490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284a0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
284b0 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 46  Names.Add(".NETF
284c0 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d 0a 20  ramework");.... 
284d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
284e0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
284f0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
28500 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43  onfiguration.NoC
28510 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
28520 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28540 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
28550 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d  mes.Add(".NETCom
28560 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b  pactFramework");
28570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28580 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
28590 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e  ist.Names.Add(".
285a0 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77  NETCompactFramew
285b0 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ork");..        
285c0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
285d0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
285e0 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
285f0 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20  Framework");..  
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
28610 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28670 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
28680 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
28690 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e  st.Versions == n
286a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
286b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
286c0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
286d0 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65  st.Versions = ne
286e0 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 3b 0d  w VersionMap();.
286f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28700 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
28710 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
28720 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
28730 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20  .NoDesktop)..   
28740 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
28750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28760 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20      VersionList 
28770 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
28780 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e  st = new Version
28790 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
287a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
287b0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
287c0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
287d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
287e0 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20 20 20  etFx20)..       
287f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28800 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
28810 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
28820 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32 37 29  ion(2, 0, 50727)
28830 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28840 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28860 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e    // NOTE: The .
28870 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 33 2e  NET Framework 3.
28880 35 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  5 does not have 
28890 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20  its own..       
288a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
288b0 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b        directory;
288c0 20 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69   however, it sti
288d0 6c 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65  ll may have asse
288e0 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
288f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
28900 20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75     folders for u
28910 73 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75  se in Visual Stu
28920 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20  dio, etc...     
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28940 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
28950 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
28960 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
28970 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
28980 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 33 35 29 0d  tion.NoNetFx35).
28990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
289a0 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
289b0 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
289c0 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35  new Version(3, 5
289d0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
289e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
289f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
28a00 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
28a10 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
28a20 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40)..           
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
28a40 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
28a50 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
28a60 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d 0a  4, 0, 30319));..
28a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a80 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
28a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
28aa0 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20   NOTE: The .NET 
28ab0 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 20 64 6f  Framework 4.5 do
28ac0 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74 73 20  es not have its 
28ad0 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  own..           
28ae0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
28af0 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f 77    directory; how
28b00 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d  ever, it still m
28b10 61 79 20 68 61 76 65 20 61 73 73 65 6d 62 6c 79  ay have assembly
28b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28b30 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
28b40 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65 20 69  olders for use i
28b50 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2c  n Visual Studio,
28b60 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20   etc...         
28b70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
28b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b90 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
28ba0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
28bb0 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
28bc0 2e 4e 6f 4e 65 74 46 78 34 35 29 0d 0a 20 20 20  .NoNetFx45)..   
28bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28be0 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
28bf0 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
28c00 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c 20 35 30  Version(4, 5, 50
28c10 37 30 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  709));....      
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
28c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28c40 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
28c50 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
28c60 6b 20 34 2e 35 2e 31 20 64 6f 65 73 20 6e 6f 74  k 4.5.1 does not
28c70 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20   have its own.. 
28c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c90 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65     //       dire
28ca0 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20  ctory; however, 
28cb0 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76  it still may hav
28cc0 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  e assembly..    
28cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ce0 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73  //       folders
28cf0 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75   for use in Visu
28d00 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d  al Studio, etc..
28d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28d20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
28d30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
28d40 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
28d50 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
28d60 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74  figuration.NoNet
28d70 46 78 34 35 31 29 0d 0a 20 20 20 20 20 20 20 20  Fx451)..        
28d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d90 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
28da0 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
28db0 6f 6e 28 34 2c 20 35 2c 20 31 29 29 3b 0d 0a 0d  on(4, 5, 1));...
28dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28dd0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
28de0 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28  st.Versions.Add(
28df0 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c  ".NETFramework",
28e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28e10 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
28e20 70 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a  pVersionList);..
28e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
28e50 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
28e60 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
28e70 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
28e80 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20  on.NoCompact).. 
28e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28eb0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
28ec0 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
28ed0 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61  (".NETCompactFra
28ee0 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20  mework",..      
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f00 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73    new VersionLis
28f10 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20  t(new Version[] 
28f20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28f30 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
28f40 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30 2c 20  ersion(2, 0, 0, 
28f50 30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e 28  0), new Version(
28f60 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20 20 20  3, 5, 0, 0)..   
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f80 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   }));..         
28f90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
28fa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28fb0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
28fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29000 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
29010 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
29020 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  formNames == nul
29030 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
29040 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29050 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
29060 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d  .PlatformNames =
29070 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
29080 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
29090 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
290a0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
290b0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
290c0 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
290d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290e0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
290f0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
29100 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20  Add(null);....  
29110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
29120 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
29130 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
29140 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f  nfiguration.NoCo
29150 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
29160 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
29180 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
29190 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22  tformNames.Add("
291a0 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20  PocketPC");..   
291b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291c0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
291d0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
291e0 28 22 53 6d 61 72 74 70 68 6f 6e 65 22 29 3b 0d  ("Smartphone");.
291f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29200 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
29210 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
29220 2e 41 64 64 28 22 57 69 6e 64 6f 77 73 43 45 22  .Add("WindowsCE"
29230 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
29240 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29250 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
29260 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
29270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
292c0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
292d0 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44  l HaveFrameworkD
292e0 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
292f0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
29300 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
29310 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
29320 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
29330 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
29340 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
29350 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
29360 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
29370 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
29380 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
29390 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
293a0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
293b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
293c0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
293d0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
293e0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
293f0 20 20 72 65 66 20 73 74 72 69 6e 67 20 69 6e 73    ref string ins
29400 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d 0a 20  tallDirectory.. 
29410 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
29420 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29430 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
29440 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f  ame = GetFramewo
29450 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rkKeyName(..    
29460 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
29470 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
29480 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
29490 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73  tformName, perUs
294a0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
294b0 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a       wow64);....
294c0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
294d0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
294e0 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
294f0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
29500 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
29510 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
29520 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
29530 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
29540 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
29550 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29560 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
29570 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
29580 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29590 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
295a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
295b0 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e  latformName != n
295c0 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b  ull) // NOTE: Sk
295d0 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d  ip non-desktop..
295e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
295f0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
29600 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29610 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
29620 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65  ctory = GetFrame
29630 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
29640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29650 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
29660 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
29670 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77  erUser, wow64, w
29680 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
29690 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
296a0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
296b0 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
296c0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
296d0 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  y(directory)).. 
296e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296f0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
29700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29710 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
29720 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74  ry.Exists(direct
29730 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
29740 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29750 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
29760 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
29770 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
29780 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
29790 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
297a0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
297b0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
297c0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
297d0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
297e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
297f0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
29800 30 7d 20 66 6f 75 6e 64 20 76 69 61 20 64 69 72  0} found via dir
29810 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20  ectory {1}.",.. 
29820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29830 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
29840 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
29850 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
29860 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20  ctory)),..      
29870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
29880 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
29890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
298a0 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72   installDirector
298b0 79 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a  y = directory;..
298c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298d0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
298e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
298f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29900 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29940 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29950 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
29960 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61  tic bool HaveFra
29970 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d  meworkRegistry(.
29980 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
29990 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
299a0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
299b0 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
299c0 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
299d0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
299e0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
299f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
29a00 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
29a10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
29a20 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
29a30 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
29a40 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
29a50 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
29a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
29a70 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
29a80 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
29a90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29aa0 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
29ab0 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65  = GetFrameworkKe
29ac0 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
29ad0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
29ae0 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
29af0 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
29b00 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d  mName, perUser,.
29b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
29b30 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
29b40 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
29b50 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
29b60 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
29b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b80 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
29b90 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
29ba0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
29bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bd0 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
29be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29bf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
29c00 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
29c10 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66         if (platf
29c20 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  ormName != null)
29c30 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e   // NOTE: Skip n
29c40 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20  on-desktop...   
29c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c60 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d   return true;...
29c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29c80 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
29c90 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
29ca0 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cc0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
29cd0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
29ce0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
29d10 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69  ork {0} found vi
29d20 61 20 72 65 67 69 73 74 72 79 20 7b 31 7d 2e 22  a registry {1}."
29d30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29d40 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
29d50 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
29d60 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on), ForDisplay(
29d70 6b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  keyName)),..    
29d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d90 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
29da0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29db0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
29dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29dd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29de0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29e30 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
29e40 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
29e50 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
29e60 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
29e70 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
29e80 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b  ForEachFramework
29e90 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20  Config(..       
29ea0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
29eb0 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y registry,..   
29ec0 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
29ed0 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  rkList framework
29ee0 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
29ef0 20 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66     FrameworkConf
29f00 69 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62  igCallback callb
29f10 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
29f20 20 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e    string version
29f30 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f  , /* NOTE: Optio
29f40 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  nal. */..       
29f50 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61       string inva
29f60 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20  riantName,..    
29f70 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
29f80 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
29f90 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70    string descrip
29fa0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
29fb0 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
29fc0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
29fd0 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
29fe0 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20  semblyName,..   
29ff0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
2a000 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
2a010 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
2a020 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2a030 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2a040 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2a050 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
2a060 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2a070 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2a080 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2a090 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2a0a0 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
2a0b0 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
2a0c0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2a0d0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2a0e0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2a0f0 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67           if (reg
2a100 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  istry == null)..
2a110 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2a130 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2a140 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20  registry";..    
2a150 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2a160 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2a170 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a180 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2a190 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c  eworkList == nul
2a1a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2a1b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a1c0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2a1d0 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69  lid framework li
2a1e0 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  st";..          
2a1f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2a200 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2a210 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a220 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2a230 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d  y rootKey = fram
2a240 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
2a250 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
2a260 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
2a270 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2a280 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a290 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2a2a0 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79  invalid root key
2a2b0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2a2c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2a2d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2a2e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a2f0 69 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64  if (!IsSupported
2a300 52 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79  RootKey(registry
2a310 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20  , rootKey))..   
2a320 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a330 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2a340 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75  r = "root key mu
2a350 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f  st be per-user o
2a360 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d  r per-machine";.
2a370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a380 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2a390 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2a3b0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
2a3c0 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
2a3d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2a3f0 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77  ror = "no framew
2a400 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  ork names found"
2a410 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2a420 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2a430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a440 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2a450 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
2a460 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c  .Versions == nul
2a470 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2a480 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a490 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66     error = "no f
2a4a0 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e  ramework version
2a4b0 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
2a4c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a4d0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2a4e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a4f0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
2a500 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
2a510 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  mNames == null).
2a520 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a540 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74  error = "no plat
2a550 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64  form names found
2a560 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2a570 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2a580 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2a590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a5a0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
2a5b0 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d  t.Names.Count !=
2a5c0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
2a5d0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75  latformNames.Cou
2a5e0 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt)..           
2a5f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a600 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2a610 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65  ng.Format("frame
2a620 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20  work name count 
2a630 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b  {0} does not " +
2a640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a650 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61        "match pla
2a660 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74  tform name count
2a670 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b   {1}", framework
2a680 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
2a690 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a6a0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2a6b0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
2a6c0 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  es.Count);....  
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a6e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2a6f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2a700 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
2a710 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e  nt index = 0; in
2a720 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c  dex < frameworkL
2a730 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b  ist.Names.Count;
2a740 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20   index++)..     
2a750 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a760 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a780 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
2a790 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d  name of the fram
2a7a0 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45  ework (e.g. ".NE
2a7b0 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20  TFramework")..  
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a7d0 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e         and the n
2a7e0 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66  ame of the platf
2a7f0 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f  orm (e.g. "Windo
2a800 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20  wsCE")...       
2a810 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2a820 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
2a830 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
2a840 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
2a850 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d  t.Names[index];.
2a860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a870 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
2a880 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b  Name = framework
2a890 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
2a8a0 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  es[index];....  
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a8d0 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20    // NOTE: Skip 
2a8e0 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20  all non-desktop 
2a8f0 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e  frameworks (i.e.
2a900 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   if the platform
2a910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a920 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20    //       name 
2a930 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20  is not null)... 
2a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a950 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2a960 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e     if (platformN
2a970 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
2a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a990 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
2a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a9b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2a9c0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
2a9d0 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76   the supported v
2a9e0 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20  ersions of this 
2a9f0 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20  particular..    
2aa00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2aa10 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d       framework..
2aa20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aa30 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2aa40 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74       VersionList
2aa50 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2aa60 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  nList;....      
2aa70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
2aa80 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a  rsion != null)..
2aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aaa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2aab0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2aad0 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f  / NOTE: Manual o
2aae0 76 65 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a  verride of the *
2aaf0 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76  ONE* framework v
2ab00 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ersion..        
2ab10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2ab20 20 20 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e       to process.
2ab30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ab40 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2ab60 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
2ab70 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e  st = new Version
2ab80 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20  List();..       
2ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2aba0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
2abb0 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
2abc0 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20  n(version));..  
2abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2abe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2abf0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
2ac00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2ac20 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   (!frameworkList
2ac30 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74  .Versions.TryGet
2ac40 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac60 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
2ac70 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b  e, out framework
2ac80 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d  VersionList) ||.
2ac90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aca0 20 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77           (framew
2acb0 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  orkVersionList =
2acc0 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
2acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2ace0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2acf0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
2ad00 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2ad10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2ad20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad40 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
2ad50 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2ad60 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  n in frameworkVe
2ad70 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20  rsionList)..    
2ad80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ada0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2adb0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2adc0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
2add0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ade0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2adf0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2ae00 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2ae10 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
2ae30 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b  rameworkName = {
2ae40 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  0}, frameworkVer
2ae50 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d  sion = {1}, " +.
2ae60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae70 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f           "platfo
2ae80 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46  rmName = {2}", F
2ae90 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
2aea0 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  orkName),..     
2aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aec0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
2aed0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
2aee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aef0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
2af00 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  play(platformNam
2af10 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
2af20 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2af30 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2af40 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74  ng installDirect
2af50 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ory = null;.... 
2af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af70 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d     if (!HaveFram
2af80 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
2af90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2afb0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
2afc0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2afd0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aff0 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
2b000 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2b010 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2b020 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b040 72 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  ref installDirec
2b050 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
2b060 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b080 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2b090 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
2b0a0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
2b0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2b0d0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
2b0e0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
2b0f0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b110 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
2b120 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65  amework {0} dire
2b130 63 74 6f 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c  ctory not found,
2b140 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
2b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b160 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
2b170 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
2b180 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d  eworkVersion)),.
2b190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2b1b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1d0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
2b1e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b1f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b210 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20  if (callback == 
2b220 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2b240 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
2b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b260 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
2b270 20 3d 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74   = installDirect
2b280 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ory;....        
2b290 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b2a0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
2b2b0 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
2b2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b2d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2b300 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2b310 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
2b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b330 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2b340 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2b350 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2b360 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b380 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
2b390 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20  k {0} directory 
2b3a0 69 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d  is invalid, " +.
2b3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b               "sk
2b3d0 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44  ipping...", ForD
2b3e0 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
2b3f0 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
2b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b410 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2b420 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b440 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
2b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b460 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b470 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63             direc
2b480 74 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62  tory = Path.Comb
2b490 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
2b4a0 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20  Config");....   
2b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4c0 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
2b4d0 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79  Exists(directory
2b4e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2b4f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b510 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2b520 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2b530 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
2b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b550 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2b560 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2b570 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2b580 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5a0 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
2b5b0 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72  ork {0} director
2b5c0 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 22  y {1} does not "
2b5d0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
2b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5f0 22 65 78 69 73 74 2c 20 73 6b 69 70 70 69 6e 67  "exist, skipping
2b600 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
2b610 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
2b620 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
2b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b640 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
2b650 63 74 6f 72 79 29 29 2c 20 74 72 61 63 65 43 61  ctory)), traceCa
2b660 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b680 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
2b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2b6b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2b6c0 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61  ng fileName = Pa
2b6d0 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
2b6e0 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e 63  tory, "machine.c
2b6f0 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20  onfig");....    
2b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b710 69 66 20 28 21 46 69 6c 65 2e 45 78 69 73 74 73  if (!File.Exists
2b720 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  (fileName))..   
2b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b740 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b750 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2b760 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2b770 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2b780 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
2b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7a0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2b7b0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2b7c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2b7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
2b7f0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
2b800 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20 6e   file {1} does n
2b810 6f 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a 20  ot exist, " +.. 
2b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b830 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70             "skip
2b840 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73  ping...", ForDis
2b850 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
2b860 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
2b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b880 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2b890 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63  fileName)), trac
2b8a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8c0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2b8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b8e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2b900 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20 3d  ool localSaved =
2b910 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2b930 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20  f (!callback(.. 
2b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b950 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
2b960 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61  ame, invariantNa
2b970 6d 65 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69  me, name, descri
2b980 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
2b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9a0 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73      typeName, as
2b9b0 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 69 6e 73 74  semblyName, inst
2b9c0 61 6c 6c 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20  allDirectory,.. 
2b9d0 20 20 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 20 63 6c 69 65 6e             clien
2b9f0 74 44 61 74 61 2c 20 70 65 72 55 73 65 72 2c 20  tData, perUser, 
2ba00 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69  wow64, throwOnMi
2ba10 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
2ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba30 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2ba40 6f 73 65 2c 20 72 65 66 20 6c 6f 63 61 6c 53 61  ose, ref localSa
2ba50 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29  ved, ref error))
2ba60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ba70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bab0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2bac0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
2bad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bae0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb00 69 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 26  if (localSaved &
2bb10 26 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20 20  & !saved)..     
2bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb30 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74         saved = t
2bb40 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
2bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb60 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
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 54 72 61 63 65 4f            TraceO
2bb90 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2bba0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
2bbb0 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
2bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbd0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2bbe0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2bbf0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2bc00 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc20 20 20 20 20 20 20 22 6c 6f 63 61 6c 53 61 76 65        "localSave
2bc30 64 20 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d  d = {0}, saved =
2bc40 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
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 46 6f 72 44 69 73 70 6c          ForDispl
2bc70 61 79 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20  ay(localSaved), 
2bc80 46 6f 72 44 69 73 70 6c 61 79 28 73 61 76 65 64  ForDisplay(saved
2bc90 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcb0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2bcc0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
2bcd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2bce0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2bcf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2bd00 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2bd10 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
2bd20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2bd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd70 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2bd80 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2bd90 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2bda0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2bdb0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2bdc0 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61  tatic bool ForEa
2bdd0 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  chFrameworkRegis
2bde0 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
2bdf0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72    MockRegistry r
2be00 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
2be10 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c        FrameworkL
2be20 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  ist frameworkLis
2be30 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2be40 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
2be50 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  yCallback callba
2be60 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
2be70 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c   string version,
2be80 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e   /* NOTE: Option
2be90 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  al. */..        
2bea0 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
2beb0 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
2bec0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
2bed0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2bee0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2bef0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
2bf00 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
2bf10 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2bf20 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2bf30 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2bf40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2bf50 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
2bf60 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2bf70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2bf80 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73         if (regis
2bf90 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  try == null)..  
2bfa0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2bfc0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65  or = "invalid re
2bfd0 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20  gistry";..      
2bfe0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2bff0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2c000 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c010 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
2c020 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  orkList == null)
2c030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c050 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2c060 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74  d framework list
2c070 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2c080 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2c090 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2c0a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c0b0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2c0c0 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77  rootKey = framew
2c0d0 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b  orkList.RootKey;
2c0e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c0f0 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
2c100 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2c110 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c120 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2c130 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b  valid root key";
2c140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c150 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2c160 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2c170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2c180 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f   (!IsSupportedRo
2c190 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20  otKey(registry, 
2c1a0 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20  rootKey))..     
2c1b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c1c0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2c1d0 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74  = "root key must
2c1e0 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20   be per-user or 
2c1f0 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20  per-machine";.. 
2c200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c210 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2c220 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c230 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
2c240 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2c250 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
2c260 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c270 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2c280 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72  r = "no framewor
2c290 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  k names found";.
2c2a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c2b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2c2c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2c2e0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  (frameworkList.V
2c2f0 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
2c300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c320 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61   error = "no fra
2c330 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20  mework versions 
2c340 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
2c350 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c360 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2c370 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c380 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
2c390 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
2c3a0 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
2c3b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2c3d0 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f  ror = "no platfo
2c3e0 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rm names found";
2c3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c400 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2c410 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2c420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2c430 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
2c440 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66  Names.Count != f
2c450 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
2c460 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74  tformNames.Count
2c470 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c490 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2c4a0 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f  .Format("framewo
2c4b0 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30  rk name count {0
2c4c0 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a  } does not " +..
2c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4e0 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66      "match platf
2c4f0 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  orm name count {
2c500 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  1}", frameworkLi
2c510 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d  st.Names.Count,.
2c520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c530 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
2c540 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
2c550 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  .Count);....    
2c560 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2c570 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2c580 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2c590 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
2c5a0 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
2c5b0 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  x < frameworkLis
2c5c0 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69  t.Names.Count; i
2c5d0 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20  ndex++)..       
2c5e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c5f0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2c600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2c610 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61  OTE: Grab the na
2c620 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77  me of the framew
2c630 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46  ork (e.g. ".NETF
2c640 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20  ramework")..    
2c650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2c660 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d       and the nam
2c670 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72  e of the platfor
2c680 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73  m (e.g. "Windows
2c690 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  CE")...         
2c6a0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2c6b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2c6c0 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20  g frameworkName 
2c6d0 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
2c6e0 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20  Names[index];.. 
2c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2c700 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
2c710 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  me = frameworkLi
2c720 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
2c730 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20  [index];....    
2c740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c760 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
2c770 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73  e supported vers
2c780 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72  ions of this par
2c790 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20  ticular..       
2c7a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2c7b0 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20    framework...  
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2c7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c7e0 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72    VersionList fr
2c7f0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
2c800 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  st;....         
2c810 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69         if (versi
2c820 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on != null)..   
2c830 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c850 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2c860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2c870 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72  OTE: Manual over
2c880 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45  ride of the *ONE
2c890 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  * framework vers
2c8a0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
2c8b0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2c8c0 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20    to process... 
2c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2c8f0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2c900 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20  workVersionList 
2c910 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73  = new VersionLis
2c920 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t();..          
2c930 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2c940 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  orkVersionList.A
2c950 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76  dd(new Version(v
2c960 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20  ersion));..     
2c970 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2c990 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2c9a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c9b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2c9c0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
2c9d0 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c  rsions.TryGetVal
2c9e0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
2c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca00 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
2ca10 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  out frameworkVer
2ca20 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20  sionList) ||..  
2ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca40 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b        (framework
2ca50 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e  VersionList == n
2ca60 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
2ca70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca90 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
2caa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cab0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2cac0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
2cae0 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72  each (Version fr
2caf0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69  ameworkVersion i
2cb00 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
2cb10 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20  onList)..       
2cb20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb40 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2cb50 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2cb60 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
2cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb80 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2cb90 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2cba0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2cbb0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2cbc0 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d             "fram
2cbd0 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c  eworkName = {0},
2cbe0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2cbf0 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20  n = {1}, " +..  
2cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc10 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e        "platformN
2cc20 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44  ame = {2}", ForD
2cc30 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
2cc40 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
2cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc60 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
2cc70 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  workVersion),.. 
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc90 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2cca0 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29  y(platformName))
2ccb0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
2ccc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ccd0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61           if (!Ha
2cce0 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  veFrameworkRegis
2ccf0 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd10 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
2cd20 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
2cd30 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
2cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd50 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72           platfor
2cd60 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20  mName, perUser, 
2cd70 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76  wow64, whatIf, v
2cd80 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2cda0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cdb0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2cdc0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2cdd0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
2cde0 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
2cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce00 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2ce10 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2ce20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce40 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
2ce50 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 72 65  Framework {0} re
2ce60 67 69 73 74 72 79 20 6e 6f 74 20 66 6f 75 6e 64  gistry not found
2ce70 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
2ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce90 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
2cea0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
2ceb0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c  meworkVersion)),
2cec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2cee0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2cef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cf00 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
2cf10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2cf20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf40 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d   if (callback ==
2cf50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf70 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
2cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf90 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d   if (!callback(.
2cfa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2cfc0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
2cfd0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2cfe0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d000 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
2d010 2c 20 6e 75 6c 6c 2c 20 63 6c 69 65 6e 74 44 61  , null, clientDa
2d020 74 61 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ta, perUser,..  
2d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d040 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c            wow64,
2d050 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2d060 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2d070 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d090 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
2d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d0c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2d0d0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2d0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d100 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2d110 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2d120 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2d130 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2d140 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2d150 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2d160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2d1a0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2d1b0 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20 53 74  on Per-Visual St
2d1c0 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61 6e  udio Version Han
2d1d0 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
2d1e0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
2d1f0 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c  id InitializeVsL
2d200 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ist(..          
2d210 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2d220 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
2d230 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
2d240 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
2d250 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2d260 20 20 72 65 66 20 56 73 4c 69 73 74 20 76 73 4c    ref VsList vsL
2d270 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ist..           
2d280 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2d290 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
2d2a0 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sList == null)..
2d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2c0 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56 73 4c  vsList = new VsL
2d2d0 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
2d2e0 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74        if (vsList
2d2f0 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  .RootKey == null
2d300 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2d310 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65     vsList.RootKe
2d320 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a  y = rootKey;....
2d330 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d340 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  vsList.Versions 
2d350 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d360 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d370 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
2d380 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56  Versions = new V
2d390 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d  ersionList();...
2d3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d3b0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
2d3c0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
2d3d0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
2d3e0 6f 56 73 32 30 30 35 29 0d 0a 20 20 20 20 20 20  oVs2005)..      
2d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
2d400 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
2d410 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38 2c  d(new Version(8,
2d420 20 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d 0a 0d   0)); // 2005...
2d430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d440 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
2d450 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
2d460 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
2d470 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20 20  oVs2008)..      
2d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
2d490 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
2d4a0 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39 2c  d(new Version(9,
2d4b0 20 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d 0a 0d   0)); // 2008...
2d4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d4d0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
2d4e0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
2d4f0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
2d500 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20 20  oVs2010)..      
2d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
2d520 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
2d530 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 30  d(new Version(10
2d540 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d 0a 0d  , 0));// 2010...
2d550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d560 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
2d570 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
2d580 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
2d590 6f 56 73 32 30 31 32 29 0d 0a 20 20 20 20 20 20  oVs2012)..      
2d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
2d5b0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
2d5c0 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 31  d(new Version(11
2d5d0 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d 0a 0d  , 0));// 2012...
2d5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d5f0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
2d600 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
2d610 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
2d620 6f 56 73 32 30 31 33 29 0d 0a 20 20 20 20 20 20  oVs2013)..      
2d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
2d640 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
2d650 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 32  d(new Version(12
2d660 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33 0d 0a 20  , 0));// 2013.. 
2d670 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2d680 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d690 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2d6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2d6e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2d6f0 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56 73  atic bool HaveVs
2d700 56 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79  VersionDirectory
2d710 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
2d720 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2d730 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
2d740 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
2d750 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2d760 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
2d770 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
2d780 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2d790 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2d7a0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2d7b0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2d7c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2d7d0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2d7e0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2d7f0 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65  ring installDire
2d800 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  ctory..         
2d810 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2d820 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d830 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
2d840 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2d850 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2d860 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2d870 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
2d880 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
2d890 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
2d8a0 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  x, perUser, wow6
2d8b0 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
2d8c0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2d8d0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
2d8e0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2d8f0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d910 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2d920 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
2d930 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2d940 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d950 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
2d960 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d980 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2d990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d9a0 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
2d9b0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2d9c0 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
2d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2d9e0 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22  ey, "InstallDir"
2d9f0 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
2da00 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2da10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2da20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69  (!(value is stri
2da30 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ng))..          
2da40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2da50 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2da60 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2da70 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73  g directory = (s
2da80 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a  tring)value;....
2da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2daa0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
2dab0 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f  lOrEmpty(directo
2dac0 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
2dad0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2dae0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2daf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2db00 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
2db10 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
2db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db30 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2db40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2db50 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2db60 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2db70 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
2db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db90 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2dba0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2dbb0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2dbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dbd0 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74        "Visual St
2dbe0 75 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69  udio {0} found i
2dbf0 6e 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e  n directory {1}.
2dc00 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2dc10 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2dc20 61 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20 46  ay(vsVersion), F
2dc30 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74  orDisplay(direct
2dc40 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ory)),..        
2dc50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2dc60 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2dc80 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 20  nstallDirectory 
2dc90 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20  = directory;..  
2dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2dcb0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2dcc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2dcd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2dce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2dd30 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2dd40 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2dd50 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2dd60 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2dd70 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61  tatic bool ForEa
2dd80 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73  chVsVersionRegis
2dd90 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
2dda0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72    MockRegistry r
2ddb0 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
2ddc0 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c        VsList vsL
2ddd0 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ist,..          
2dde0 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65    VisualStudioRe
2ddf0 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63  gistryCallback c
2de00 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
2de10 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
2de20 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
2de30 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
2de40 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2de50 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
2de60 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
2de70 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
2de80 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2de90 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2dea0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
2deb0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
2dec0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2ded0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2dee0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2def0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2df00 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
2df10 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2df20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2df30 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20     if (registry 
2df40 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2df50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2df60 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2df70 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74   "invalid regist
2df80 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry";..          
2df90 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2dfa0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2dfb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2dfc0 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20    if (vsList == 
2dfd0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2dfe0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2dff0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2e000 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b  nvalid VS list";
2e010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e020 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2e030 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2e050 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2e060 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52  otKey = vsList.R
2e070 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
2e080 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
2e090 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2e0a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e0b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2e0c0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f  r = "invalid roo
2e0d0 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20  t key";..       
2e0e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e0f0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2e100 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e110 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70       if (!IsSupp
2e120 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67  ortedRootKey(reg
2e130 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29  istry, rootKey))
2e140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e160 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b   error = "root k
2e170 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75  ey must be per-u
2e180 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69  ser or per-machi
2e190 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne";..          
2e1a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2e1b0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2e1c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2e1d0 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72    if (vsList.Ver
2e1e0 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
2e1f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2e210 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 65  rror = "no VS ve
2e220 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a  rsions found";..
2e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e240 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2e250 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2e260 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
2e270 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73 56  ach (Version vsV
2e280 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74  ersion in vsList
2e290 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20  .Versions)..    
2e2a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e2b0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2e2c0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2e2d0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2e2e0 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2e300 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2e310 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2e320 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76                "v
2e340 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c  sVersion = {0}",
2e350 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
2e360 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
2e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2e380 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2e390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e3a0 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44   string installD
2e3b0 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b  irectory = null;
2e3c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e3d0 20 20 20 20 69 66 20 28 21 48 61 76 65 56 73 56      if (!HaveVsV
2e3e0 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79 28  ersionDirectory(
2e3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e400 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2e410 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  y, vsVersion, su
2e420 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77  ffix, perUser, w
2e430 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ow64, whatIf,.. 
2e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e450 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20         verbose, 
2e460 72 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  ref installDirec
2e470 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
2e480 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2e4a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2e4b0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2e4c0 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
2e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4e0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2e4f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2e500 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e520 20 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20          "Visual 
2e530 53 74 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20 66  Studio {0} not f
2e540 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e  ound, skipping..
2e550 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
2e560 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
2e570 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f  Display(vsVersio
2e580 6e 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  n)), traceCatego
2e590 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2e5a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
2e5b0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
2e5c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e5d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e5e0 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c  callback == null
2e5f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2e600 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2e610 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e620 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63      if (!callbac
2e630 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
2e640 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2e650 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
2e660 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
2e670 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72   installDirector
2e680 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2e690 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 69 65              clie
2e6a0 6e 74 44 61 74 61 2c 20 70 65 72 55 73 65 72 2c  ntData, perUser,
2e6b0 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d   wow64, throwOnM
2e6c0 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 0d  issing, whatIf,.
2e6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e6e0 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2e6f0 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
2e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e720 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2e730 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2e740 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2e750 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e760 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2e770 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2e780 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2e790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2e7f0 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61  region Configura
2e800 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69  tion File Handli
2e810 6e 67 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ng..        [Met
2e820 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
2e830 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
2e840 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
2e850 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2e860 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76 69 64 65  ool AddDbProvide
2e870 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
2e880 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
2e890 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
2e8a0 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61       string inva
2e8b0 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20  riantName,..    
2e8c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
2e8d0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2e8e0 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70    string descrip
2e8f0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
2e900 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
2e910 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2e920 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
2e930 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20  semblyName,..   
2e940 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2e950 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2e960 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2e970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2e980 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
2e990 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2e9a0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
2e9b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2e9c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e9d0 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20     bool dirty = 
2e9e0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2e9f0 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20      XmlDocument 
2ea00 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58  document = new X
2ea10 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d  mlDocument();...
2ea20 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
2ea30 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68  ument.PreserveWh
2ea40 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b  itespace = true;
2ea50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ..            do
2ea60 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65  cument.Load(file
2ea70 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2ea80 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
2ea90 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
2eaa0 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  cument.SelectSin
2eab0 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
2eac0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
2ead0 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72  .Format(XPathFor
2eae0 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61  AddElement, inva
2eaf0 72 69 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58  riantName)) as X
2eb00 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
2eb10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64            if (ad
2eb20 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  dElement == null
2eb30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2eb40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eb50 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65 6d 65    string[] eleme
2eb60 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20  ntNames = {..   
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb80 20 22 73 79 73 74 65 6d 2e 64 61 74 61 22 2c 20   "system.data", 
2eb90 22 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  "DbProviderFacto
2eba0 72 69 65 73 22 0d 0a 20 20 20 20 20 20 20 20 20  ries"..         
2ebb0 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20         };....   
2ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c               Xml
2ebd0 45 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73  Element previous
2ebe0 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20  Element =..     
2ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2ec00 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e 74  ocument.Document
2ec10 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e 66  Element; /* conf
2ec20 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a  iguration */....
2ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec40 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67 20  foreach (string 
2ec50 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e 20 65  elementName in e
2ec60 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a 20 20  lementNames)..  
2ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2ec80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ec90 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20       addElement 
2eca0 3d 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e  = previousElemen
2ecb0 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
2ecc0 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de(..           
2ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
2ece0 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20 58 6d 6c  mentName) as Xml
2ecf0 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
2ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed10 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d  if (addElement =
2ed20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed50 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
2ed60 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72  nt = document.Cr
2ed70 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20  eateElement(..  
2ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed90 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
2eda0 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e 45 6d  tName, String.Em
2edb0 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  pty);....       
2edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edd0 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
2ede0 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64  .AppendChild(add
2edf0 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20  Element);..     
2ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ee10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ee20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73          previous
2ee30 45 6c 65 6d 65 6e 74 20 3d 20 61 64 64 45 6c 65  Element = addEle
2ee40 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ment;..         
2ee50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2ee60 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
2ee70 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
2ee80 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28  t.CreateElement(
2ee90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eea0 20 20 20 20 20 20 22 61 64 64 22 2c 20 53 74 72        "add", Str
2eeb0 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20  ing.Empty);.... 
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2eed0 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41  reviousElement.A
2eee0 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64 45 6c  ppendChild(addEl
2eef0 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ement);....     
2ef00 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
2ef10 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2ef20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ef30 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
2ef40 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65  ng.Equals(addEle
2ef50 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74  ment.GetAttribut
2ef60 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20 20 20 20  e("name"),..    
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef80 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70  name, StringComp
2ef90 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
2efa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2efb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2efc0 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41   addElement.SetA
2efd0 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22 2c  ttribute("name",
2efe0 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20   name);..       
2eff0 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
2f000 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2f010 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2f020 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
2f030 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65  .Equals(addEleme
2f040 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28  nt.GetAttribute(
2f050 22 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a 20  "invariant"),.. 
2f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f070 20 20 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65     invariantName
2f080 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
2f090 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
2f0a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2f0c0 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  Element.SetAttri
2f0d0 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22  bute("invariant"
2f0e0 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29  , invariantName)
2f0f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2f100 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
2f110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2f120 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2f130 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
2f140 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74  s(addElement.Get
2f150 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72  Attribute("descr
2f160 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 20  iption"),..     
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2f180 65 73 63 72 69 70 74 69 6f 6e 2c 20 53 74 72 69  escription, Stri
2f190 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
2f1a0 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  inal))..        
2f1b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f1c0 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
2f1d0 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22  t.SetAttribute("
2f1e0 64 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64 65  description", de
2f1f0 73 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20  scription);..   
2f200 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2f210 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2f220 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f230 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f240 66 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53  fullTypeName = S
2f250 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
2f260 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }, {1}",..      
2f270 20 20 20 20 20 20 20 20 20 20 74 79 70 65 4e 61            typeNa
2f280 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  me, assemblyName
2f290 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f2a0 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71    if (!String.Eq
2f2b0 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e  uals(addElement.
2f2c0 47 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79  GetAttribute("ty
2f2d0 70 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  pe"),..         
2f2e0 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c 54             fullT
2f2f0 79 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43  ypeName, StringC
2f300 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
2f310 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
2f320 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f330 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53      addElement.S
2f340 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70  etAttribute("typ
2f350 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65  e", fullTypeName
2f360 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2f370 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
2f380 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2f390 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f3a0 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61  if (dirty || wha
2f3b0 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
2f3c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f3d0 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
2f3e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f3f0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2f400 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
2f410 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
2f420 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
2f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2f440 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
2f450 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
2f460 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f480 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74 20      "addElement 
2f490 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {0}", ForDispl
2f4a0 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 29 2c  ay(addElement)),
2f4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f4c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2f4d0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
2f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2f4f0 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
2f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2f510 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c  ocument.Save(fil
2f520 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
2f530 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 73             files
2f540 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20  Modified++;.... 
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2f560 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  aved = true;..  
2f570 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f580 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2f590 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2f5a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2f5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2f600 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
2f610 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
2f620 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
2f630 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2f640 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44  tic bool RemoveD
2f650 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2f660 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2f670 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d  tring fileName,.
2f680 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2f690 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  ing invariantNam
2f6a0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2f6b0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2f6c0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2f6d0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2f6e0 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
2f6f0 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
2f700 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
2f710 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
2f720 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2f730 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
2f740 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  irty = false;.. 
2f750 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f             XmlDo
2f760 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20  cument document 
2f770 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e  = new XmlDocumen
2f780 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
2f790 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65      document.Pre
2f7a0 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20  serveWhitespace 
2f7b0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2f7c0 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f       document.Lo
2f7d0 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ad(fileName);...
2f7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
2f7f0 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65  Element addEleme
2f800 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65  nt = document.Se
2f810 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d  lectSingleNode(.
2f820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f830 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58   String.Format(X
2f840 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e  PathForAddElemen
2f850 74 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  t, invariantName
2f860 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74  )) as XmlElement
2f870 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f880 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20   if (addElement 
2f890 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
2f8a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f8b0 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d           addElem
2f8c0 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52  ent.ParentNode.R
2f8d0 65 6d 6f 76 65 43 68 69 6c 64 28 61 64 64 45 6c  emoveChild(addEl
2f8e0 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  ement);..       
2f8f0 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
2f900 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2f910 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2f920 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
2f930 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 20  removeElement = 
2f940 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53  document.SelectS
2f950 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20  ingleNode(..    
2f960 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
2f970 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46  ng.Format(XPathF
2f980 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2c  orRemoveElement,
2f990 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29 29   invariantName))
2f9a0 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
2f9b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2f9c0 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  f (removeElement
2f9d0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
2f9e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f9f0 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
2fa00 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  Element.ParentNo
2fa10 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72  de.RemoveChild(r
2fa20 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a  emoveElement);..
2fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa40 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2fa50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2fa60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2fa70 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
2fa80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2fa90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2faa0 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fac0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2fad0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2fae0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2faf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fb00 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2fb10 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2fb20 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2fb30 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb50 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30  "addElement = {0
2fb60 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  }, removeElement
2fb70 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
2fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb90 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64    ForDisplay(add
2fba0 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73  Element), ForDis
2fbb0 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65  play(removeEleme
2fbc0 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nt)),..         
2fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2fbe0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2fbf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fc00 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76      document.Sav
2fc30 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  e(fileName);....
2fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc50 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b  filesModified++;
2fc60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fc70 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
2fc80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2fc90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fca0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2fcb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2fcc0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2fcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2fd10 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2fd20 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
2fd30 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
2fd40 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2fd50 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
2fd60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2fd70 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e  tring invariantN
2fd80 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2fd90 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
2fda0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2fdb0 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
2fdc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2fdd0 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  ing typeName,.. 
2fde0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
2fdf0 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79  blyName assembly
2fe00 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2fe10 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
2fe20 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
2fe30 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
2fe40 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
2fe50 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2fe60 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2fe70 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2fe80 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
2fe90 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
2fea0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2feb0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2fec0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2fed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2fee0 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
2fef0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2ff00 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2ff10 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2ff20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ff30 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
2ff40 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
2ff50 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
2ff60 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
2ff70 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
2ff80 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
2ff90 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2ffa0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ffb0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2ffc0 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20  valid framework 
2ffd0 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b 20  config callback 
2ffe0 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
2fff0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
30000 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
30010 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30020 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
30030 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
30040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30050 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50  return RemoveDbP
30060 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
30070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30080 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
30090 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 77 68  nvariantName, wh
300a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
300b0 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ef saved,..     
300c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
300d0 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20  ef error) &&..  
300e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64                Ad
300f0 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  dDbProviderFacto
30100 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
30110 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
30120 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  e, invariantName
30130 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74  , name, descript
30140 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a  ion, typeName,..
30150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30160 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65      assemblyName
30170 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
30180 65 2c 20 72 65 66 20 73 61 76 65 64 2c 20 72 65  e, ref saved, re
30190 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
301a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
301b0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
301c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
301d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
301e0 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64  n RemoveDbProvid
301f0 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
30200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30210 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
30220 61 6e 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  antName, whatIf,
30230 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61   verbose, ref sa
30240 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
30250 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
30260 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
30270 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
30280 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
30290 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
302a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
302f0 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62    #region Assemb
30300 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64 6c  ly Folders Handl
30310 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
30320 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
30330 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f  ng GetAssemblyFo
30340 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  ldersKeyName(.. 
30350 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
30360 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
30370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
30380 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
30390 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
303a0 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
303b0 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
303c0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
303d0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
303e0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
303f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
30400 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30410 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
30420 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
30430 73 20 72 65 67 69 73 74 72 79 20 6b 65 79 20 61  s registry key a
30440 70 70 65 61 72 73 20 74 6f 20 61 6c 77 61 79 73  ppears to always
30450 20 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79 0d   be 32-bit only.
30460 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
30470 20 20 20 20 20 20 28 69 2e 65 2e 20 70 72 6f 62        (i.e. prob
30480 61 62 6c 79 20 62 65 63 61 75 73 65 20 69 74 20  ably because it 
30490 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20  is only used by 
304a0 56 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20 20  Visual..        
304b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74 75      //       Stu
304c0 64 69 6f 2c 20 77 68 69 63 68 20 69 73 20 63 75  dio, which is cu
304d0 72 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 20 33  rrently always 3
304e0 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20 20  2-bit only)...  
304f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
30500 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
30510 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e   format = !Strin
30520 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
30530 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d  platformName) ?.
30540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30550 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74   "{0}\\Microsoft
30560 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d  \\{1}\\v{2}\\{3}
30570 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  \\AssemblyFolder
30580 73 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20 20  sEx" :..        
30590 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69          "{0}\\Mi
305a0 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b  crosoft\\{1}\\v{
305b0 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64  2}\\AssemblyFold
305c0 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20 20  ersEx";....     
305d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
305e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d  ring.Format(form
305f0 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61  at, GetRootKeyNa
30600 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
30610 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4),..           
30620 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
30630 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
30640 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
30650 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  me);..        }.
30660 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
30670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
306c0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
306d0 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46  l AddToAssemblyF
306e0 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
306f0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
30700 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
30710 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
30720 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
30730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
30740 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
30750 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
30760 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
30770 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
30780 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
30790 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
307a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
307b0 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
307c0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
307d0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
307e0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
307f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
30800 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
30810 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
30820 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
30830 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
30840 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
30850 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30860 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
30870 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d  yName = GetAssem
30880 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
30890 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
308a0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
308b0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
308c0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
308d0 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  e, perUser,..   
308e0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77               wow
308f0 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
30900 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
30910 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
30920 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
30930 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
30940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30950 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
30960 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  e, true, whatIf,
30970 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
30980 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30990 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
309a0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
309b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
309c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309d0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
309e0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
309f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a00 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
30a10 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
30a20 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
30a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a40 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
30a50 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
30a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a70 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
30a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
30a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30aa0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
30ab0 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
30ac0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
30ad0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
30ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30af0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
30b00 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
30b10 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
30b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
30b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30b40 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
30b50 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
30b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
30b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30b80 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
30b90 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
30ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
30bc0 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72  uld not create r
30bd0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
30be0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
30bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c00 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79       key, subKey
30c10 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
30c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c30 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
30c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
30c70 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
30c80 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
30c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ca0 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69  subKey, null, di
30cb0 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66 2c  rectory, whatIf,
30cc0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
30cd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
30ce0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30cf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30d00 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
30d10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
30d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
30d70 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
30d80 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d   bool RemoveFrom
30d90 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
30da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
30db0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
30dc0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
30dd0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
30de0 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
30df0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
30e00 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
30e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
30e20 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
30e30 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
30e40 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
30e50 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
30e60 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
30e70 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
30e80 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
30e90 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
30ea0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
30eb0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
30ec0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
30ed0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
30ee0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
30ef0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
30f00 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
30f10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30f20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
30f30 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46  e = GetAssemblyF
30f40 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a  oldersKeyName(..
30f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f60 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
30f70 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
30f80 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70   platformName, p
30f90 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
30fa0 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b           wow64);
30fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30fc0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
30fd0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
30fe0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
30ff0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
31000 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
31010 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74  tKey, keyName, t
31020 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
31030 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
31040 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31050 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
31060 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
31070 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31090 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
310a0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
310b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310c0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
310d0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
310e0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
310f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31100 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
31110 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
31120 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
31130 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
31140 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31160 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
31170 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  eleteSubKey(..  
31180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31190 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
311a0 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
311b0 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  g, whatIf, verbo
311c0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
311d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
311e0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
311f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
31200 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
31250 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
31260 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
31270 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64  cessAssemblyFold
31280 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
31290 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
312a0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
312b0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
312c0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
312d0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
312e0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
312f0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
31300 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
31310 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
31320 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
31330 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
31340 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
31350 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
31360 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
31370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31380 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
31390 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
313a0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
313b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
313c0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
313d0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
313e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
313f0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
31400 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
31410 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31420 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
31430 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
31440 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
31450 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
31460 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
31470 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
31480 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
31490 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
314a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
314b0 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77   "invalid framew
314c0 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74  ork callback dat
314d0 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
314e0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
314f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
31500 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
31510 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
31520 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31530 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
31540 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73  urn RemoveFromAs
31550 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
31560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31570 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
31580 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
31590 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
315a0 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
315b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315c0 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61   LegacyProjectNa
315d0 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  me, perUser, wow
315e0 36 34 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  64, false, whatI
315f0 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  f, verbose,..   
31600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31610 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a   ref error) &&..
31620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31630 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c  AddToAssemblyFol
31640 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
31650 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
31660 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
31670 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
31680 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
31690 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
316a0 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e          ProjectN
316b0 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72  ame, pair.X, per
316c0 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61  User, wow64, wha
316d0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  tIf, verbose,.. 
316e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316f0 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a     ref error);..
31700 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
31710 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
31720 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
31730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31740 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f  return RemoveFro
31750 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
31760 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31770 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
31780 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
31790 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
317a0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
317b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317c0 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c      ProjectName,
317d0 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
317e0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
317f0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
31800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
31810 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
31820 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
31830 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
31840 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
31850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
31860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
318a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
318b0 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
318c0 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  udio Handling.. 
318d0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
318e0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
318f0 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a  VsRootKeyName(..
31900 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31910 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
31920 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
31930 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
31940 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
31950 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
31960 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
31970 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56  0}\\Microsoft\\V
31980 69 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d 0a 20  isualStudio",.. 
31990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
319a0 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65  etRootKeyName(pe
319b0 72 55 73 65 72 2c 20 77 6f 77 36 34 29 29 3b 0d  rUser, wow64));.
319c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
319d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
319e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
319f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
31a20 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
31a30 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
31a40 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  etVsKeyName(..  
31a50 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
31a60 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
31a70 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
31a80 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
31a90 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
31aa0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
31ab0 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
31ac0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
31ad0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31ae0 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
31af0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
31b00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31b10 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
31b20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
31b30 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
31b50 30 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 47 65 74  0}\\{1}{2}", Get
31b60 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65  VsRootKeyName(pe
31b70 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 20 76  rUser, wow64), v
31b80 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
31b90 20 20 20 20 20 20 20 20 20 20 20 73 75 66 66 69             suffi
31ba0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  x);..        }..
31bb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
31bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
31c10 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
31c20 69 6f 20 44 61 74 61 20 53 6f 75 72 63 65 20 48  io Data Source H
31c30 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
31c40 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
31c50 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f  bool AddVsDataSo
31c60 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
31c70 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
31c80 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
31c90 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
31ca0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
31cb0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
31cc0 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
31cd0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
31ce0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
31cf0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
31d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31d10 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
31d20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
31d30 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
31d40 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
31d50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
31d60 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
31d70 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
31d80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31d90 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
31da0 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
31db0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31dc0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
31dd0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
31de0 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
31df0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31e00 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
31e10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31e20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
31e30 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
31e40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31e50 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
31e60 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
31e70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
31e80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31e90 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
31ea0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31eb0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
31ec0 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
31ed0 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73  ame(vsVersion, s
31ee0 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20  uffix, perUser, 
31ef0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
31f00 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
31f10 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
31f20 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
31f30 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
31f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f50 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
31f60 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
31f70 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
31f80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31fa0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
31fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31fc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31fd0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
31fe0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
31ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32000 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
32010 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
32020 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
32030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32040 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
32050 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
32060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32070 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
32080 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
32090 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
320a0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
320b0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
320c0 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
320d0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
320e0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
320f0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
32100 20 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20   "DataSources", 
32110 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
32120 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
32130 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32150 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
32160 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
32170 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32190 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
321a0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
321b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321c0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
321d0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
321e0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53   key: {0}\\DataS
321f0 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20  ources",..      
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32210 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
32220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32230 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
32240 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
32250 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32270 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
32280 67 69 73 74 72 79 4b 65 79 20 64 61 74 61 53 6f  gistryKey dataSo
32290 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20  urceKey =..     
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322b0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
322c0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
322d0 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20  ey(subKey,..    
322e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322f0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
32300 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53  DataSourceId.ToS
32310 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
32320 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
32330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32340 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
32350 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
32360 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32380 20 20 69 66 20 28 64 61 74 61 53 6f 75 72 63 65    if (dataSource
32390 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
323a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
323c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323d0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
323e0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
323f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32400 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
32410 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72  uld not create r
32420 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
32430 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20  \\{1}", key,..  
32440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
32460 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
32470 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
32480 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20  Format));....   
32490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
324b0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
324c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
324e0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
324f0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
32500 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
32510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32520 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79     dataSourceKey
32530 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e 46  , null, String.F
32540 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
32550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32560 20 20 20 20 22 7b 30 7d 20 44 61 74 61 62 61 73      "{0} Databas
32570 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63 74  e File", Project
32580 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d 0a  Name), whatIf,..
32590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325a0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
325b0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
325c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
325e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
325f0 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65  NOTE: This value
32600 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e   is new as of 1.
32610 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20 20  0.83.0...       
32620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32630 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
32640 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
32650 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
32660 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
32670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32680 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79     dataSourceKey
32690 2c 20 22 44 65 66 61 75 6c 74 50 72 6f 76 69 64  , "DefaultProvid
326a0 65 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  er",..          
326b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326c0 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72    package.DataPr
326d0 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
326e0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
326f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32700 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
32710 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
32720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32730 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
32740 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
32750 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63 65 4b  bKey(dataSourceK
32760 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
32770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32780 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
32790 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76 69 64  SupportingProvid
327a0 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20  ers\\{0}",..    
327b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327c0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
327d0 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
327e0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
327f0 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  at)),..         
32800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32810 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
32820 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
32830 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
32840 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32850 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32860 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
32870 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
32880 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
32890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
328e0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
328f0 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44  c bool RemoveVsD
32900 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
32910 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
32920 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
32930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
32940 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
32950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
32960 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
32970 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
32980 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
32990 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
329a0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
329b0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
329c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
329d0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
329e0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
329f0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
32a00 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
32a10 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
32a20 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
32a30 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
32a40 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
32a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a70 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
32a80 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
32a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32aa0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
32ab0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32ac0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
32ad0 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
32ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b00 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
32b10 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
32b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32b30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
32b40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32b50 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
32b60 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
32b70 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
32b80 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55  on, suffix, perU
32b90 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ser, wow64);....
32ba0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
32bb0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
32bc0 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
32bd0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
32be0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
32bf0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
32c00 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
32c10 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
32c20 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
32c30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32c40 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
32c50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
32c60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32c70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
32c80 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
32c90 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
32ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
32cb0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
32cc0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
32cd0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
32ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32cf0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
32d00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32d10 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
32d20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
32d30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32d40 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
32d50 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
32d60 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
32d70 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
32d80 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
32d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32da0 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63   key, "DataSourc
32db0 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
32dc0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
32dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
32de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32df0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
32e00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
32e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
32e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e30 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
32e40 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
32e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
32e70 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
32e80 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
32e90 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20  DataSources",.. 
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 20 20 6b 65 79 29 3b             key);
32ec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32ed0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32ee0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
32ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32f10 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
32f20 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
32f30 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
32f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f50 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
32f60 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54  e.DataSourceId.T
32f70 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
32f80 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
32f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
32fa0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
32fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32fc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
32fd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32fe0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
32ff0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33000 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
33050 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
33060 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
33070 73 73 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  ssVsDataSource(.
33080 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
33090 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
330a0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
330b0 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
330c0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
330d0 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
330e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
330f0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
33100 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
33110 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
33120 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
33130 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
33140 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
33150 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
33160 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
33170 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
33180 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
33190 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
331a0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
331b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
331c0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
331d0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
331e0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
331f0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
33200 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
33210 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
33220 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
33230 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33240 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
33250 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
33260 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33270 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
33280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33290 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ...            A
332a0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
332b0 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
332c0 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
332d0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
332e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
332f0 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
33300 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
33310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33320 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
33330 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64  id VS callback d
33340 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
33350 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
33360 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
33370 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33380 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
33390 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
333a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
333b0 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 53  eturn AddVsDataS
333c0 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
333d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
333e0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
333f0 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
33400 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
33410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33420 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
33430 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
33440 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
33450 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
33460 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
33470 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33480 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
33490 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  eVsDataSource(..
334a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334b0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
334c0 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
334d0 70 61 63 6b 61 67 65 2c 20 70 65 72 55 73 65 72  package, perUser
334e0 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  , wow64,..      
334f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
33500 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
33510 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
33520 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
33530 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
33540 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
33550 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
335a0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
335b0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74  isual Studio Dat
335c0 61 20 50 72 6f 76 69 64 65 72 20 48 61 6e 64 6c  a Provider Handl
335d0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
335e0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
335f0 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69 64   AddVsDataProvid
33600 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
33610 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
33620 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
33630 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
33640 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
33650 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
33660 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
33670 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
33680 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
33690 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
336a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
336b0 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
336c0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
336d0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
336e0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
336f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
33700 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
33710 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
33720 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
33730 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
33740 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33750 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
33760 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
33770 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33780 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
33790 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69  invalid VS versi
337a0 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
337b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
337c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
337d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
337e0 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
337f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
33800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33810 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
33820 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
33830 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
33840 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
33850 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
33860 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33870 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
33880 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
33890 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
338a0 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  x, perUser, wow6
338b0 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
338c0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
338d0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
338e0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
338f0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
33900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33910 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
33920 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
33930 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
33940 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33950 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
33960 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
33970 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
33980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33990 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
339a0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
339b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339c0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
339d0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
339e0 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
339f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a00 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
33a10 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
33a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a30 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
33a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
33a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33a60 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
33a70 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
33a80 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
33a90 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
33aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ab0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61          key, "Da
33ac0 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72  taProviders", tr
33ad0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
33ae0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
33af0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
33b10 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
33b20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33b30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b50 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
33b60 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
33b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b80 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
33b90 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
33ba0 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f  ey: {0}\\DataPro
33bb0 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20  viders",..      
33bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bd0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bf0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
33c00 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
33c10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
33c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c30 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
33c40 67 69 73 74 72 79 4b 65 79 20 64 61 74 61 50 72  gistryKey dataPr
33c50 6f 76 69 64 65 72 4b 65 79 20 3d 0d 0a 20 20 20  oviderKey =..   
33c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c70 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
33c80 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
33c90 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20  bKey(subKey,..  
33ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cb0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
33cc0 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
33cd0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
33ce0 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
33cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d00 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
33d10 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
33d20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d40 20 20 20 20 20 20 69 66 20 28 64 61 74 61 50 72        if (dataPr
33d50 6f 76 69 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c  oviderKey == nul
33d60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
33d70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
33d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d90 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
33da0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
33db0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33dd0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
33de0 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
33df0 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65  y: {0}\\{1}", ke
33e00 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
33e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
33e30 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72  ProviderId.ToStr
33e40 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
33e50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e70 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
33e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33eb0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
33ec0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
33ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ee0 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
33ef0 72 6f 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c  roviderKey, null
33f00 2c 20 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 77  , Description, w
33f10 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
33f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f30 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
33f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33f50 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
33f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f70 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
33f80 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20  is value is new 
33f90 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 20  as of 1.0.83.0. 
33fa0 20 48 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20   However,..     
33fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fc0 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 20 73     //       it s
33fd0 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 73 65  hould only be se
33fe0 74 20 69 66 20 74 68 65 20 70 61 63 6b 61 67 65  t if the package
33ff0 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
34000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34010 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20     //       and 
34020 61 6c 6c 20 74 68 65 20 61 73 73 65 6d 62 6c 69  all the assembli
34030 65 73 20 69 74 20 72 65 66 65 72 73 20 74 6f 20  es it refers to 
34040 61 72 65 20 62 65 69 6e 67 0d 0a 20 20 20 20 20  are being..     
34050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34060 20 20 20 2f 2f 20 20 20 20 20 20 20 70 6c 61 63     //       plac
34070 65 64 20 69 6e 74 6f 20 74 68 65 20 67 6c 6f 62  ed into the glob
34080 61 6c 20 61 73 73 65 6d 62 6c 79 20 63 61 63 68  al assembly cach
34090 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
340a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
340b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340c0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
340d0 61 67 65 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62  age.GlobalAssemb
340e0 6c 79 43 61 63 68 65 29 0d 0a 20 20 20 20 20 20  lyCache)..      
340f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34100 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34120 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
34130 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
34140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34150 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
34160 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73  roviderKey, "Ass
34170 65 6d 62 6c 79 22 2c 0d 0a 20 20 20 20 20 20 20  embly",..       
34180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34190 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
341a0 2e 44 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c  .DesignerAssembl
341b0 79 4e 61 6d 65 2e 54 6f 53 74 72 69 6e 67 28 29  yName.ToString()
341c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
341d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341e0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
341f0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
34200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
34210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34220 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
34230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34240 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
34250 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65  This value is ne
34260 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30  w as of 1.0.83.0
34270 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34280 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
34290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342a0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
342b0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
342c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
342d0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
342e0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 41  aProviderKey, "A
342f0 73 73 6f 63 69 61 74 65 64 53 6f 75 72 63 65 22  ssociatedSource"
34300 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
34320 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
34330 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
34340 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
34350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34360 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
34370 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
34380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34390 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
343a0 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
343b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343c0 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
343d0 6f 76 69 64 65 72 4b 65 79 2c 20 22 49 6e 76 61  oviderKey, "Inva
343e0 72 69 61 6e 74 4e 61 6d 65 22 2c 0d 0a 20 20 20  riantName",..   
343f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34400 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
34410 2e 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20  .InvariantName, 
34420 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
34430 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34440 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
34450 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
34460 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
34470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34480 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
34490 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f 67 79 22  ey, "Technology"
344a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
344b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
344c0 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63  ackage.AdoNetTec
344d0 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53 74 72 69  hnologyId.ToStri
344e0 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
344f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34500 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
34510 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
34520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34530 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
34540 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
34550 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
34560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34570 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
34580 20 22 43 6f 64 65 42 61 73 65 22 2c 20 66 69 6c   "CodeBase", fil
34590 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 0d 0a  eName, whatIf,..
345a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345b0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
345c0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
345d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345e0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
345f0 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34610 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
34620 64 65 72 4b 65 79 2c 20 22 46 61 63 74 6f 72 79  derKey, "Factory
34630 53 65 72 76 69 63 65 22 2c 0d 0a 20 20 20 20 20  Service",..     
34640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34650 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53         package.S
34660 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e  erviceId.ToStrin
34670 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
34680 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
34690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346a0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
346b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
346c0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
346d0 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
346e0 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65  bKey(dataProvide
346f0 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rKey,..         
34700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34710 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a     "SupportedObj
34720 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63  ects\\DataConnec
34730 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22 2c 0d  tionUIControl",.
34740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34750 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
34760 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
34770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34780 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
34790 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
347a0 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
347b0 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
347c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347d0 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
347e0 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65  jects\\DataConne
347f0 63 74 69 6f 6e 50 72 6f 70 65 72 74 69 65 73 22  ctionProperties"
34800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
34820 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
34830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34840 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
34850 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
34860 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
34870 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
34880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34890 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
348a0 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e  Objects\\DataCon
348b0 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72 74 22 2c  nectionSupport",
348c0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
348d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348e0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
348f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34900 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
34910 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
34920 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
34930 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
34940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34950 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
34960 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f 62 6a 65  bjects\\DataObje
34970 63 74 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74  ctSupport", what
34980 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
34990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349a0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
349b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349c0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
349d0 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
349e0 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y(dataProviderKe
349f0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
34a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a10 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74  "SupportedObject
34a20 73 5c 5c 44 61 74 61 56 69 65 77 53 75 70 70 6f  s\\DataViewSuppo
34a30 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  rt", whatIf,..  
34a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a50 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
34a60 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
34a70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
34a80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
34a90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
34aa0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
34ab0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
34ac0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
34ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b10 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
34b20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
34b30 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61   bool RemoveVsDa
34b40 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
34b50 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
34b60 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
34b70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
34b80 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
34b90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
34ba0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
34bb0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
34bc0 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
34bd0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
34be0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
34bf0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
34c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
34c10 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
34c20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
34c30 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
34c40 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
34c50 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
34c60 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
34c70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
34c80 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
34c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
34ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34cb0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
34cc0 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
34cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ce0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
34cf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
34d00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
34d10 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
34d20 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
34d30 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72  ion, suffix, per
34d40 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  User, wow64);...
34d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
34d60 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
34d70 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
34d80 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
34d90 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
34da0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
34db0 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
34dc0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
34dd0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
34de0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34df0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
34e00 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
34e10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
34e30 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
34e40 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
34e60 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
34e70 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
34e80 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
34e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ea0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
34eb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34ec0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34ed0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
34ee0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
34f00 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
34f10 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
34f20 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
34f30 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
34f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f50 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76    key, "DataProv
34f60 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68  iders", true, wh
34f70 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
34f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34f90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34fa0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
34fb0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
34fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34fe0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
34ff0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
35000 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35020 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
35030 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
35040 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73  }\\DataProviders
35050 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
35060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35070 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
35080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35090 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
350a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
350c0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
350d0 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
350e0 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
350f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35100 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
35110 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
35120 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
35130 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
35140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35150 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
35160 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
35170 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35180 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
35190 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
351a0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
351b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
351c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35200 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
35210 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
35220 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 50  l ProcessVsDataP
35230 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
35240 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
35250 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
35260 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
35270 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
35280 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
35290 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
352a0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
352b0 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
352c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
352d0 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
352e0 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
352f0 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
35300 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
35310 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
35320 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
35330 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
35340 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
35350 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
35360 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
35370 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
35380 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
35390 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
353a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
353b0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
353c0 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
353d0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
353e0 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
353f0 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
35400 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
35410 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
35420 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
35430 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35440 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
35450 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63   = "invalid VS c
35460 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
35470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35480 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
35490 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
354a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
354b0 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
354c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
354d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41          return A
354e0 64 64 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  ddVsDataProvider
354f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35500 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
35510 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
35520 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72  x, package, pair
35530 2e 58 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  .X, perUser,..  
35540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35550 20 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c    wow64, whatIf,
35560 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
35570 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
35580 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
35590 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
355a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
355b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
355c0 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69 64  moveVsDataProvid
355d0 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
355e0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
355f0 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  , vsVersion, suf
35600 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65  fix, package, pe
35610 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20  rUser, wow64,.. 
35620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35630 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
35640 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
35650 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
35660 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35670 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
35680 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
35690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
356e0 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
356f0 6f 20 50 61 63 6b 61 67 65 20 48 61 6e 64 6c 69  o Package Handli
35700 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
35710 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
35720 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61 63 6b  InitializeVsPack
35730 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
35740 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61    string invaria
35750 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ntName,..       
35760 20 20 20 20 20 73 74 72 69 6e 67 20 66 61 63 74       string fact
35770 6f 72 79 54 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  oryTypeName,..  
35780 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
35790 6c 79 4e 61 6d 65 20 70 72 6f 76 69 64 65 72 41  lyName providerA
357a0 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
357b0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
357c0 6c 79 4e 61 6d 65 20 64 65 73 69 67 6e 65 72 41  lyName designerA
357d0 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
357e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 67            bool g
357f0 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
35800 68 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  he,..           
35810 20 72 65 66 20 50 61 63 6b 61 67 65 20 70 61 63   ref Package pac
35820 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20  kage..          
35830 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
35840 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35850 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29  package == null)
35860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
35870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35880 20 70 61 63 6b 61 67 65 20 3d 20 6e 65 77 20 50   package = new P
35890 61 63 6b 61 67 65 28 29 3b 0d 0a 0d 0a 20 20 20  ackage();....   
358a0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
358b0 6b 61 67 65 2e 49 6e 76 61 72 69 61 6e 74 4e 61  kage.InvariantNa
358c0 6d 65 20 3d 20 69 6e 76 61 72 69 61 6e 74 4e 61  me = invariantNa
358d0 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
358e0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 46 61 63       package.Fac
358f0 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d 20 66  toryTypeName = f
35900 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d  actoryTypeName;.
35910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35920 20 70 61 63 6b 61 67 65 2e 50 72 6f 76 69 64 65   package.Provide
35930 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20  rAssemblyName = 
35940 70 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79  providerAssembly
35950 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
35960 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
35970 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
35980 61 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 41 73  ame = designerAs
35990 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
359a0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
359b0 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73 73 65 6d  kage.GlobalAssem
359c0 62 6c 79 43 61 63 68 65 20 3d 20 67 6c 6f 62 61  blyCache = globa
359d0 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d  lAssemblyCache;.
359e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
359f0 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65     package.AdoNe
35a00 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20  tTechnologyId = 
35a10 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20  new Guid(..     
35a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
35a30 37 37 41 42 39 41 39 44 2d 37 38 42 39 2d 34 42  77AB9A9D-78B9-4B
35a40 41 37 2d 39 31 41 43 2d 38 37 33 46 35 33 33 38  A7-91AC-873F5338
35a50 46 31 44 32 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  F1D2");....     
35a60 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
35a70 67 65 2e 50 61 63 6b 61 67 65 49 64 20 3d 20 6e  ge.PackageId = n
35a80 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20  ew Guid(..      
35a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
35aa0 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39  CBE6C8D-0E57-409
35ab0 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36 34  9-A183-98FF74C64
35ac0 44 39 43 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  D9C");....      
35ad0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
35ae0 65 2e 53 65 72 76 69 63 65 49 64 20 3d 20 6e 65  e.ServiceId = ne
35af0 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
35b00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 43               "DC
35b10 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39  BE6C8D-0E57-4099
35b20 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36 34 44  -A183-98FF74C64D
35b30 39 44 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  9D");....       
35b40 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
35b50 2e 44 61 74 61 53 6f 75 72 63 65 49 64 20 3d 20  .DataSourceId = 
35b60 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20  new Guid(..     
35b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
35b80 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42  0EBAAB6E-CA80-4B
35b90 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35  4A-8DDF-CBE6BF05
35ba0 38 43 37 31 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  8C71");....     
35bb0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
35bc0 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
35bd0 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
35be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bf0 20 20 20 22 30 45 42 41 41 42 36 45 2d 43 41 38     "0EBAAB6E-CA8
35c00 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36  0-4B4A-8DDF-CBE6
35c10 42 46 30 35 38 43 37 30 22 29 3b 0d 0a 20 20 20  BF058C70");..   
35c20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
35c30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35c40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
35c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c80 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
35c90 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
35ca0 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 50 61 63  ic bool AddVsPac
35cb0 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
35cc0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
35cd0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
35ce0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
35cf0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
35d00 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
35d10 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
35d20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
35d30 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
35d40 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
35d50 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
35d60 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
35d70 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
35d80 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
35d90 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
35da0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
35db0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
35dc0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
35dd0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
35de0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
35df0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35e00 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
35e10 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
35e20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35e30 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
35e40 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72   "invalid VS ver
35e50 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
35e60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
35e70 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
35e80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35e90 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
35ea0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
35eb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35ec0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
35ed0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
35ee0 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
35ef0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
35f00 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
35f10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35f20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
35f30 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d  me = GetVsKeyNam
35f40 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  e(vsVersion, suf
35f50 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  fix, perUser, wo
35f60 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
35f70 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
35f80 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
35f90 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
35fa0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
35fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fc0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
35fd0 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
35fe0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
35ff0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
36000 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
36010 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
36020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
36030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36040 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
36050 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
36060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36070 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
36080 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
36090 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
360a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360b0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
360c0 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
360d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
360f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36100 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36110 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
36120 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
36130 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
36140 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
36150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36160 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
36170 50 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65 2c  Packages", true,
36180 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
36190 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
361a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
361b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
361c0 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
361d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
361f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
36200 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
36210 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
36220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36230 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
36240 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
36250 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c   {0}\\Packages",
36260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
36280 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
36290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
362a0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
362b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
362d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
362e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362f0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 57 41 52     // NOTE: *WAR
36300 4e 49 4e 47 2a 20 43 68 61 6e 67 69 6e 67 20 61  NING* Changing a
36310 6e 79 20 6f 66 20 74 68 65 73 65 20 76 61 6c 75  ny of these valu
36320 65 73 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 0d 0a  es will likely..
36330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36340 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 71      //       req
36350 75 69 72 65 20 61 20 6e 65 77 20 22 70 61 63 6b  uire a new "pack
36360 61 67 65 20 6c 6f 61 64 20 6b 65 79 22 20 28 50  age load key" (P
36370 4c 4b 29 20 74 6f 20 62 65 0d 0a 20 20 20 20 20  LK) to be..     
36380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
36390 2f 20 20 20 20 20 20 20 67 65 6e 65 72 61 74 65  /       generate
363a0 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72  d in order to pr
363b0 6f 70 65 72 6c 79 20 73 75 70 70 6f 72 74 20 6c  operly support l
363c0 6f 61 64 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  oading the..    
363d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363e0 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65  //       package
363f0 20 69 6e 74 6f 20 56 69 73 75 61 6c 20 53 74 75   into Visual Stu
36400 64 69 6f 20 32 30 30 38 20 61 6e 64 20 65 61 72  dio 2008 and ear
36410 6c 69 65 72 20 77 69 74 68 6f 75 74 0d 0a 20 20  lier without..  
36420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36430 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 6d    //       the m
36440 61 74 63 68 69 6e 67 20 56 69 73 75 61 6c 20 53  atching Visual S
36450 74 75 64 69 6f 20 53 44 4b 20 62 65 69 6e 67 20  tudio SDK being 
36460 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20  installed...    
36470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36480 2f 2f 20 20 20 20 20 20 20 50 6c 65 61 73 65 20  //       Please 
36490 72 65 66 65 72 20 74 6f 20 74 68 65 20 22 53 51  refer to the "SQ
364a0 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 5c 70 6c  Lite.Designer\pl
364b0 6b 2e 74 78 74 22 20 66 69 6c 65 0d 0a 20 20 20  k.txt" file..   
364c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364d0 20 2f 2f 20 20 20 20 20 20 20 66 6f 72 20 74 68   //       for th
364e0 65 20 65 78 69 73 74 69 6e 67 20 6f 66 66 69 63  e existing offic
364f0 69 61 6c 20 76 61 6c 75 65 73 20 61 6e 64 20 75  ial values and u
36500 70 64 61 74 65 20 74 68 65 6d 20 69 66 0d 0a 20  pdate them if.. 
36510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36520 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 65 63 65     //       nece
36530 73 73 61 72 79 2e 20 20 41 6c 73 6f 2c 20 74 68  ssary.  Also, th
36540 65 20 6e 65 77 6c 79 20 67 65 6e 65 72 61 74 65  e newly generate
36550 64 20 70 61 63 6b 61 67 65 20 6c 6f 61 64 0d 0a  d package load..
36560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36570 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6b 65 79      //       key
36580 20 69 74 73 65 6c 66 2c 20 77 68 69 63 68 20 69   itself, which i
36590 73 20 61 20 31 32 38 20 63 68 61 72 61 63 74 65  s a 128 characte
365a0 72 20 61 6c 70 68 61 6e 75 6d 65 72 69 63 0d 0a  r alphanumeric..
365b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365c0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72      //       str
365d0 69 6e 67 2c 20 6d 75 73 74 20 62 65 20 70 6c 61  ing, must be pla
365e0 63 65 64 20 69 6e 20 74 68 65 20 72 65 73 6f 75  ced in the resou
365f0 72 63 65 20 73 74 72 69 6e 67 20 6e 61 6d 65 64  rce string named
36600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36610 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22        //       "
36620 34 30 30 22 20 69 6e 20 74 68 65 20 22 53 51 4c  400" in the "SQL
36630 69 74 65 2e 44 65 73 69 67 6e 65 72 5c 56 53 50  ite.Designer\VSP
36640 61 63 6b 61 67 65 2e 72 65 73 78 22 20 66 69 6c  ackage.resx" fil
36650 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
36660 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
36670 61 6e 64 20 74 68 65 6e 20 74 68 65 20 64 65 73  and then the des
36680 69 67 6e 65 72 20 61 73 73 65 6d 62 6c 79 20 69  igner assembly i
36690 74 73 65 6c 66 20 6d 75 73 74 20 62 65 0d 0a 20  tself must be.. 
366a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366b0 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 63 6f     //       reco
366c0 6d 70 69 6c 65 64 2e 20 20 41 73 20 6f 66 20 74  mpiled.  As of t
366d0 68 69 73 20 77 72 69 74 69 6e 67 20 28 69 6e 20  his writing (in 
366e0 46 65 62 72 75 61 72 79 20 32 30 31 32 29 2c 0d  February 2012),.
366f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36700 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
36710 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 55 52 4c 20  e following URL 
36720 69 73 20 74 68 65 20 70 72 6f 70 65 72 20 70 6c  is the proper pl
36730 61 63 65 20 74 6f 20 67 65 6e 65 72 61 74 65 0d  ace to generate.
36740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36750 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 61       //       pa
36760 63 6b 61 67 65 20 6c 6f 61 64 20 6b 65 79 73 3a  ckage load keys:
36770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36780 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
36790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
367a0 20 20 20 20 20 20 20 68 74 74 70 3a 2f 2f 6d 73         http://ms
367b0 64 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d  dn.microsoft.com
367c0 2f 65 6e 2d 75 73 2f 76 73 74 75 64 69 6f 2f 63  /en-us/vstudio/c
367d0 63 36 35 35 37 39 35 0d 0a 20 20 20 20 20 20 20  c655795..       
367e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
367f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36800 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
36810 52 65 67 69 73 74 72 79 4b 65 79 20 70 61 63 6b  RegistryKey pack
36820 61 67 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  ageKey =..      
36830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36840 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
36850 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
36860 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20  y(subKey,..     
36870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36880 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50         package.P
36890 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
368a0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
368b0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
368c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368d0 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20      verbose)).. 
368e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
36910 20 28 70 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20   (packageKey == 
36920 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
36930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
36940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
36960 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
36970 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
36980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36990 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
369a0 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
369b0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
369c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
369d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369e0 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50    key, package.P
369f0 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
36a00 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
36a10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36a30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
36a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a70 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
36a80 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
36a90 67 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  geKey, null,..  
36aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ab0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
36ac0 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73  .Format("{0} Des
36ad0 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20  igner Package", 
36ae0 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20  ProjectName),.. 
36af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b00 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
36b10 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
36b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b30 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
36b40 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
36b50 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6c 61  packageKey, "Cla
36b60 73 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ss",..          
36b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b80 20 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e    "SQLite.Design
36b90 65 72 2e 53 51 4c 69 74 65 50 61 63 6b 61 67 65  er.SQLitePackage
36ba0 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
36bb0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
36bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bd0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
36be0 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
36bf0 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 0d  ey, "CodeBase",.
36c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36c10 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
36c20 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  eName, whatIf, v
36c30 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
36c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c50 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
36c60 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
36c70 61 67 65 4b 65 79 2c 20 22 49 44 22 2c 20 34 30  ageKey, "ID", 40
36c80 30 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  0, whatIf,..    
36c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ca0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
36cb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
36cd0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
36ce0 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f  GetSystemDirecto
36cf0 72 79 28 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  ry(wow64);....  
36d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d10 20 20 20 20 20 20 69 66 20 28 64 69 72 65 63 74        if (direct
36d20 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ory == null)..  
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d40 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74            direct
36d50 6f 72 79 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70  ory = String.Emp
36d60 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ty;....         
36d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
36d80 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
36d90 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
36da0 79 2c 20 22 49 6e 70 72 6f 63 53 65 72 76 65 72  y, "InprocServer
36db0 33 32 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  32",..          
36dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36dd0 20 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64    Path.Combine(d
36de0 69 72 65 63 74 6f 72 79 2c 20 22 6d 73 63 6f 72  irectory, "mscor
36df0 65 65 2e 64 6c 6c 22 29 2c 0d 0a 20 20 20 20 20  ee.dll"),..     
36e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e10 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
36e20 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
36e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e40 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
36e50 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
36e60 61 67 65 4b 65 79 2c 20 22 43 6f 6d 70 61 6e 79  ageKey, "Company
36e70 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  Name",..        
36e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e90 20 20 20 20 22 68 74 74 70 3a 2f 2f 73 79 73 74      "http://syst
36ea0 65 6d 2e 64 61 74 61 2e 73 71 6c 69 74 65 2e 6f  em.data.sqlite.o
36eb0 72 67 2f 22 2c 20 77 68 61 74 49 66 2c 20 76 65  rg/", whatIf, ve
36ec0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
36ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ee0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
36ef0 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
36f00 67 65 4b 65 79 2c 20 22 4d 69 6e 45 64 69 74 69  geKey, "MinEditi
36f10 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on",..          
36f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f30 20 20 22 73 74 61 6e 64 61 72 64 22 2c 20 77 68    "standard", wh
36f40 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
36f50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36f60 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
36f70 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
36f80 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
36f90 50 72 6f 64 75 63 74 4e 61 6d 65 22 2c 0d 0a 20  ProductName",.. 
36fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fb0 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
36fc0 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65  g.Format("{0} De
36fd0 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c  signer Package",
36fe0 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a   ProjectName),..
36ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37000 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
37010 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
37020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37030 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
37040 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
37050 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 50 72  (packageKey, "Pr
37060 6f 64 75 63 74 56 65 72 73 69 6f 6e 22 2c 0d 0a  oductVersion",..
37070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37080 20 20 20 20 20 20 20 20 20 20 20 20 22 31 2e 30              "1.0
37090 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
370a0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
370b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370c0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
370d0 74 72 79 4b 65 79 20 74 6f 6f 6c 62 6f 78 4b 65  tryKey toolboxKe
370e0 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
370f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37100 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
37110 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
37120 28 70 61 63 6b 61 67 65 4b 65 79 2c 0d 0a 20 20  (packageKey,..  
37130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54                "T
37150 6f 6f 6c 62 6f 78 22 2c 20 77 68 61 74 49 66 2c  oolbox", whatIf,
37160 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
37170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37180 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371a0 20 20 20 69 66 20 28 74 6f 6f 6c 62 6f 78 4b 65     if (toolboxKe
371b0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
371c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
371e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
37200 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
37210 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37230 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
37240 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
37250 79 20 6b 65 79 3a 20 22 20 2b 0d 0a 20 20 20 20  y key: " +..    
37260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37280 22 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f 78 22 2c 20  "{0}\\Toolbox", 
37290 70 61 63 6b 61 67 65 4b 65 79 29 3b 0d 0a 0d 0a  packageKey);....
372a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
372d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
372f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37300 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
37310 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
37320 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
37330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37340 20 20 20 20 20 20 74 6f 6f 6c 62 6f 78 4b 65 79        toolboxKey
37350 2c 20 22 44 65 66 61 75 6c 74 20 49 74 65 6d 73  , "Default Items
37360 22 2c 20 33 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ", 3, whatIf,.. 
37370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
37390 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
373a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
373c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
373d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
373e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
373f0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
37400 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
37410 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
37420 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
37430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37440 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73       key, "Menus
37450 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
37460 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
37470 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37490 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
374a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
374b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
374c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374d0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
374e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
374f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37500 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
37510 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
37520 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65  try key: {0}\\Me
37530 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  nus",..         
37540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37550 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
37560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37570 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
37580 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
37590 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
375a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375b0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
375c0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
375d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375e0 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
375f0 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74  e.PackageId.ToSt
37600 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
37610 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37620 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 31 30             ", 10
37630 30 30 2c 20 33 22 2c 20 77 68 61 74 49 66 2c 20  00, 3", whatIf, 
37640 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
37650 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
37660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37670 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
37680 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
37690 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
376a0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
376b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376c0 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63      key, "Servic
376d0 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
376e0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
376f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37710 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
37720 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
37730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37750 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
37760 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
37770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37780 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
37790 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
377a0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
377b0 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20  Services",..    
377c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377d0 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
377e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
377f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37800 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
37810 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
37820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37830 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
37840 52 65 67 69 73 74 72 79 4b 65 79 20 73 65 72 76  RegistryKey serv
37850 69 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  iceKey =..      
37860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37870 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
37880 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
37890 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20  y(subKey,..     
378a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378b0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53         package.S
378c0 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e  erviceId.ToStrin
378d0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
378e0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
378f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37900 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20      verbose)).. 
37910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37920 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
37940 20 28 73 65 72 76 69 63 65 4b 65 79 20 3d 3d 20   (serviceKey == 
37950 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
37960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
37970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
37990 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
379a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
379b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379c0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
379d0 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
379e0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
379f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a10 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53    key, package.S
37a20 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e  erviceId.ToStrin
37a30 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
37a40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
37a60 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
37a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
37a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37aa0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
37ab0 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76 69  r.SetValue(servi
37ac0 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  ceKey, null,..  
37ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ae0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
37af0 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74  e.PackageId.ToSt
37b00 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
37b10 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
37b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b30 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
37b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37b50 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
37b60 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
37b70 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20  lue(serviceKey, 
37b80 22 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20  "Name",..       
37b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ba0 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
37bb0 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72  at("{0} Designer
37bc0 20 53 65 72 76 69 63 65 22 2c 20 50 72 6f 6a 65   Service", Proje
37bd0 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  ctName),..      
37be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bf0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
37c00 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
37c10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
37c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
37c40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37c50 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
37c60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
37c70 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
37c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
37cc0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
37cd0 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
37ce0 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20  VsPackage(..    
37cf0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
37d00 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
37d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
37d20 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
37d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
37d40 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
37d50 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
37d60 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
37d70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
37d80 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
37d90 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
37da0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
37db0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
37dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
37dd0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
37de0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
37df0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
37e00 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
37e10 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
37e20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
37e30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
37e40 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
37e50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
37e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37e70 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
37e80 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
37e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37ea0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
37eb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
37ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
37ed0 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
37ee0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
37ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37f00 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
37f10 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
37f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37f30 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
37f40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
37f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
37f60 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
37f70 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
37f80 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65  sion, suffix, pe
37f90 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a  rUser, wow64);..
37fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
37fb0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
37fc0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
37fd0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
37fe0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
37ff0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
38000 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
38010 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
38020 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
38030 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
38040 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
38050 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
38060 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
38070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
38080 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
38090 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
380a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
380b0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
380c0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
380d0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
380e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380f0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
38100 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
38110 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
38120 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
38130 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
38140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
38150 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
38160 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
38170 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
38180 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
38190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381a0 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67 65     key, "Package
381b0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
381c0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
381d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
381e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381f0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
38200 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
38210 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
38220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38230 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
38240 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
38250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38260 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
38270 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
38280 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50  stry key: {0}\\P
38290 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20 20  ackages",..     
382a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382b0 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
382c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
382e0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
382f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
38300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38310 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
38320 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  er.DeleteSubKeyT
38330 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
38340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
38350 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61  bKey, package.Pa
38360 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
38370 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
38380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38390 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
383a0 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
383b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
383c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
383d0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
383e0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
383f0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
38400 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
38410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38420 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c     key, "Menus",
38430 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
38440 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
38450 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
38460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38470 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
38480 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
38490 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
384a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384b0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
384c0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
384d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384e0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
384f0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
38500 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75  y key: {0}\\Menu
38510 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
38520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38530 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
38540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38550 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
38560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38570 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
38580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
38590 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
385a0 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  eteValue(..     
385b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385c0 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61     subKey, packa
385d0 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
385e0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
385f0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
38600 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
38610 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74  wOnMissing, what
38620 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
38630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
38640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38650 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
38660 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
38670 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
38680 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
38690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386a0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65          key, "Se
386b0 72 76 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77  rvices", true, w
386c0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
386d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
386e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
386f0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
38700 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
38710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38720 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
38730 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
38740 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
38750 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
38760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38770 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
38780 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
38790 30 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a  0}\\Services",..
387a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387b0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
387c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
387d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
387e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
387f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38800 7d 0d 0a 0d 0a 20 20 20 20