System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 203662697e72e835fc5158304fcf2820c2dbef13:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73  m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67  ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73   System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69  ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63  n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65  Lite..{..    #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65  gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72  gates..    inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69  nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20   message, /* in 
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69  ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  n */..    );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 20 20  ing invariant,  
03d0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20  scription,      
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69  semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62  n */..        ob
04a0: 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
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 62 6f 6f 6c 20  /..        bool 
04d0: 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20  wow64,          
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 74 68 72          bool thr
0500: 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20  owOnMissing,    
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 68 61 74 49 66       bool whatIf
0530: 2c 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 76 65 72 62 6f 73 65 2c 20    bool verbose, 
0560: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72  in */..        r
0580: 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 20 20  ef bool saved,  
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
05a0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66   */..        ref
05b0: 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20   string error   
05c0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a          /* out *
05d0: 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20  /..    );....   
05e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
05f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0630: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c      internal del
0640: 65 67 61 74 65 20 62 6f 6f 6c 20 46 72 61 6d 65  egate bool Frame
0650: 77 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c  workRegistryCall
0660: 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49  back(..        I
0670: 6e 73 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67  nstaller.MockReg
0680: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
0690: 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
06a0: 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
06b0: 77 6f 72 6b 4e 61 6d 65 2c 20 20 20 20 20 20 20  workName,       
06c0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
06d0: 0a 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e  .        Version
06e0: 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
06f0: 6e 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  n,          /* i
0700: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0710: 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
0720: 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e,              
0730: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0740: 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
0750: 44 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20  Data,           
0760: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0770: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
0780: 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  64,             
0790: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
07a0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
07b0: 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
07c0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
07d0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
07e0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20    bool whatIf,  
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0800: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0810: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
0820: 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  ose,            
0830: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0840: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  */..        ref 
0850: 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20  string error    
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0870: 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 29 3b  * out */..    );
0880: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
0890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ///....    inter
08e0: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62 6f 6f  nal delegate boo
08f0: 6c 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65  l VisualStudioRe
0900: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
0910: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
0920: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
0930: 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69  ey rootKey, /* i
0940: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 56 65  n */..        Ve
0950: 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
0960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0970: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0980: 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
0990: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
09a0: 20 20 20 20 20 20 2f 2a 20 69 6e 2c 20 6f 70 74        /* in, opt
09b0: 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20 20 20 20 20  ional */..      
09c0: 20 20 49 6e 73 74 61 6c 6c 65 72 2e 50 61 63 6b    Installer.Pack
09d0: 61 67 65 20 70 61 63 6b 61 67 65 2c 20 20 20 20  age package,    
09e0: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
09f0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
0a00: 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20  ientData,       
0a10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0a20: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0a30: 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20   wow64,         
0a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0a50: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0a60: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
0a70: 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20  sing,           
0a80: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
0a90: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
0aa0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f,              
0ab0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0ac0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
0ad0: 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20  verbose,        
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0af0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0b00: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
0b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b20: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
0b30: 20 20 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65    );..    #endre
0b40: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
0b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
0ba0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e  region Public En
0bb0: 75 6d 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20  umerations..    
0bc0: 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70  [Flags()]..    p
0bd0: 75 62 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61  ublic enum Insta
0be0: 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a  llFlags..    {..
0bf0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
0c00: 4e 6f 72 6d 61 6c 20 46 6c 61 67 73 0d 0a 20 20  Normal Flags..  
0c10: 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30        None = 0x0
0c20: 2c 0d 0a 20 20 20 20 20 20 20 20 47 6c 6f 62 61  ,..        Globa
0c30: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d  lAssemblyCache =
0c40: 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41   0x1,..        A
0c50: 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d  ssemblyFolders =
0c60: 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44   0x2,..        D
0c70: 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
0c80: 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20   = 0x4,..       
0c90: 20 56 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38   VsPackage = 0x8
0ca0: 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 50 61 63  ,..        VsPac
0cb0: 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62  kageGlobalAssemb
0cc0: 6c 79 43 61 63 68 65 20 3d 20 30 78 31 30 2c 0d  lyCache = 0x10,.
0cd0: 0a 20 20 20 20 20 20 20 20 56 73 44 61 74 61 53  .        VsDataS
0ce0: 6f 75 72 63 65 20 3d 20 30 78 32 30 2c 0d 0a 20  ource = 0x20,.. 
0cf0: 20 20 20 20 20 20 20 56 73 44 61 74 61 50 72 6f         VsDataPro
0d00: 76 69 64 65 72 20 3d 20 30 78 34 30 2c 0d 0a 20  vider = 0x40,.. 
0d10: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
0d20: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d70: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
0d80: 23 72 65 67 69 6f 6e 20 43 6f 6d 70 6f 73 69 74  #region Composit
0d90: 65 20 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  e Flags..       
0da0: 20 46 72 61 6d 65 77 6f 72 6b 20 3d 20 47 6c 6f   Framework = Glo
0db0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
0dc0: 20 7c 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65   | AssemblyFolde
0dd0: 72 73 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  rs |..          
0de0: 20 20 20 20 20 20 20 20 20 20 44 62 50 72 6f 76            DbProv
0df0: 69 64 65 72 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a  iderFactory,....
0e00: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0e50: 0a 0d 0a 20 20 20 20 20 20 20 20 56 73 20 3d 20  ...        Vs = 
0e60: 56 73 50 61 63 6b 61 67 65 20 7c 20 56 73 50 61  VsPackage | VsPa
0e70: 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d  ckageGlobalAssem
0e80: 62 6c 79 43 61 63 68 65 20 7c 20 56 73 44 61 74  blyCache | VsDat
0e90: 61 53 6f 75 72 63 65 20 7c 0d 0a 20 20 20 20 20  aSource |..     
0ea0: 20 20 20 20 20 20 20 20 56 73 44 61 74 61 50 72          VsDataPr
0eb0: 6f 76 69 64 65 72 2c 0d 0a 0d 0a 20 20 20 20 20  ovider,....     
0ec0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0f10: 20 20 20 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d        All = Fram
0f20: 65 77 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20  ework | Vs,.... 
0f30: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
0f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f50: 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
0f80: 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c 45 78 63  ..        AllExc
0f90: 65 70 74 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  eptGlobalAssembl
0fa0: 79 43 61 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e  yCache = All & ~
0fb0: 28 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  (GlobalAssemblyC
0fc0: 61 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20  ache |..        
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
0ff0: 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73  sPackageGlobalAs
1000: 73 65 6d 62 6c 79 43 61 63 68 65 29 2c 0d 0a 20  semblyCache),.. 
1010: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1020: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1070: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1080: 44 65 66 61 75 6c 74 20 3d 20 41 6c 6c 0d 0a 20  Default = All.. 
1090: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b  ///////....    [
10f0: 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75  Flags()]..    pu
1100: 62 6c 69 63 20 65 6e 75 6d 20 54 72 61 63 65 50  blic enum TraceP
1110: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a  riority..    {..
1120: 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30          None = 0
1130: 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77  x0,..        Low
1140: 65 73 74 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20  est = 0x1,..    
1150: 20 20 20 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c      Lower = 0x2,
1160: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 20 3d 20  ..        Low = 
1170: 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65  0x4,..        Me
1180: 64 69 75 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a  diumLow = 0x8,..
1190: 20 20 20 20 20 20 20 20 4d 65 64 69 75 6d 20 3d          Medium =
11a0: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
11b0: 4d 65 64 69 75 6d 48 69 67 68 20 3d 20 30 78 32  MediumHigh = 0x2
11c0: 30 2c 0d 0a 20 20 20 20 20 20 20 20 48 69 67 68  0,..        High
11d0: 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20 20 20   = 0x40,..      
11e0: 20 20 48 69 67 68 65 72 20 3d 20 30 78 38 30 2c    Higher = 0x80,
11f0: 0d 0a 20 20 20 20 20 20 20 20 48 69 67 68 65 73  ..        Highes
1200: 74 20 3d 20 30 78 31 30 30 2c 0d 0a 20 20 20 20  t = 0x100,..    
1210: 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20 4d 65      Default = Me
1220: 64 69 75 6d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  dium..    }..   
1230: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1240: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1290: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e  ..    #region In
12a0: 73 74 61 6c 6c 65 72 20 43 6c 61 73 73 0d 0a 23  staller Class..#
12b0: 69 66 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54  if NET_40 || NET
12c0: 5f 34 35 0d 0a 20 20 20 20 5b 53 65 63 75 72 69  _45..    [Securi
12d0: 74 79 43 72 69 74 69 63 61 6c 28 29 5d 0d 0a 23  tyCritical()]..#
12e0: 65 6c 73 65 0d 0a 20 20 20 20 5b 53 65 63 75 72  else..    [Secur
12f0: 69 74 79 50 65 72 6d 69 73 73 69 6f 6e 28 53 65  ityPermission(Se
1300: 63 75 72 69 74 79 41 63 74 69 6f 6e 2e 4c 69 6e  curityAction.Lin
1310: 6b 44 65 6d 61 6e 64 2c 20 55 6e 6d 61 6e 61 67  kDemand, Unmanag
1320: 65 64 43 6f 64 65 20 3d 20 74 72 75 65 29 5d 0d  edCode = true)].
1330: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 69 6e 74  .#endif..    int
1340: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61  ernal static cla
1350: 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d 0a 20 20  ss Installer..  
1360: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
1370: 67 69 6f 6e 20 55 6e 73 61 66 65 20 4e 61 74 69  gion Unsafe Nati
1380: 76 65 20 4d 65 74 68 6f 64 73 20 43 6c 61 73 73  ve Methods Class
1390: 0d 0a 20 20 20 20 20 20 20 20 5b 53 75 70 70 72  ..        [Suppr
13a0: 65 73 73 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65  essUnmanagedCode
13b0: 53 65 63 75 72 69 74 79 28 29 5d 0d 0a 20 20 20  Security()]..   
13c0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
13d0: 6c 65 64 20 63 6c 61 73 73 20 55 6e 73 61 66 65  led class Unsafe
13e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 0d 0a 20  NativeMethods.. 
13f0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49         {..#if WI
1400: 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20  NDOWS..         
1410: 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76     #region Nativ
1420: 65 20 57 69 6e 33 32 20 43 6f 6e 73 74 61 6e 74  e Win32 Constant
1430: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
1440: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
1450: 20 4d 41 58 5f 50 41 54 48 20 3d 20 32 36 30 3b   MAX_PATH = 260;
1460: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
14c0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
14d0: 20 69 6e 74 20 43 53 49 44 4c 5f 53 59 53 54 45   int CSIDL_SYSTE
14e0: 4d 58 38 36 20 3d 20 30 78 30 30 32 39 3b 0d 0a  MX86 = 0x0029;..
14f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1550: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
1560: 6e 74 20 53 48 47 46 50 5f 54 59 50 45 5f 43 55  nt SHGFP_TYPE_CU
1570: 52 52 45 4e 54 20 3d 20 30 3b 0d 0a 0d 0a 20 20  RRENT = 0;....  
1580: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
15d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
15e0: 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 53  vate const int S
15f0: 5f 4f 4b 20 3d 20 30 3b 20 2f 2a 20 48 52 45 53  _OK = 0; /* HRES
1600: 55 4c 54 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  ULT */..        
1610: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1680: 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20   #region Native 
1690: 57 69 6e 64 6f 77 73 20 4d 65 74 68 6f 64 73 0d  Windows Methods.
16a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 44 6c  .            [Dl
16b0: 6c 49 6d 70 6f 72 74 28 22 73 68 66 6f 6c 64 65  lImport("shfolde
16c0: 72 2e 64 6c 6c 22 2c 0d 0a 20 20 20 20 20 20 20  r.dll",..       
16d0: 20 20 20 20 20 20 20 20 20 43 61 6c 6c 69 6e 67           Calling
16e0: 43 6f 6e 76 65 6e 74 69 6f 6e 20 3d 20 43 61 6c  Convention = Cal
16f0: 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e 57  lingConvention.W
1700: 69 6e 61 70 69 2c 0d 0a 20 20 20 20 20 20 20 20  inapi,..        
1710: 20 20 20 20 20 20 20 20 43 68 61 72 53 65 74 20          CharSet 
1720: 3d 20 43 68 61 72 53 65 74 2e 41 75 74 6f 2c 20  = CharSet.Auto, 
1730: 42 65 73 74 46 69 74 4d 61 70 70 69 6e 67 20 3d  BestFitMapping =
1740: 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20   false,..       
1750: 20 20 20 20 20 20 20 20 20 54 68 72 6f 77 4f 6e           ThrowOn
1760: 55 6e 6d 61 70 70 61 62 6c 65 43 68 61 72 20 3d  UnmappableChar =
1770: 20 74 72 75 65 2c 20 53 65 74 4c 61 73 74 45 72   true, SetLastEr
1780: 72 6f 72 20 3d 20 74 72 75 65 29 5d 0d 0a 20 20  ror = true)]..  
1790: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
17a0: 65 20 73 74 61 74 69 63 20 65 78 74 65 72 6e 20  e static extern 
17b0: 69 6e 74 20 53 48 47 65 74 46 6f 6c 64 65 72 50  int SHGetFolderP
17c0: 61 74 68 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ath(..          
17d0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 57 6e        IntPtr hWn
17e0: 64 4f 77 6e 65 72 2c 20 69 6e 74 20 6e 46 6f 6c  dOwner, int nFol
17f0: 64 65 72 2c 20 49 6e 74 50 74 72 20 68 54 6f 6b  der, IntPtr hTok
1800: 65 6e 2c 20 75 69 6e 74 20 66 6c 61 67 73 2c 0d  en, uint flags,.
1810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1820: 20 49 6e 74 50 74 72 20 62 75 66 66 65 72 20 2f   IntPtr buffer /
1830: 2a 20 3e 3d 20 4d 41 58 5f 50 41 54 48 20 2a 2f  * >= MAX_PATH */
1840: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1850: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1860: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
18b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
18c0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 57 72 61 70  gion Public Wrap
18d0: 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
18e0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
18f0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
1900: 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  tSystemDirectory
1910: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
1920: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1930: 20 20 20 49 6e 74 50 74 72 20 62 75 66 66 65 72     IntPtr buffer
1940: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
1950: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1960: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1970: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1990: 75 66 66 65 72 20 3d 20 4d 61 72 73 68 61 6c 2e  uffer = Marshal.
19a0: 41 6c 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d 28 0d  AllocCoTaskMem(.
19b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19c0: 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
19d0: 63 68 61 72 29 20 2a 20 28 4d 41 58 5f 50 41 54  char) * (MAX_PAT
19e0: 48 20 2b 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20  H + 1));....    
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a00: 69 66 20 28 62 75 66 66 65 72 20 21 3d 20 49 6e  if (buffer != In
1a10: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1a40: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
1a50: 48 47 65 74 46 6f 6c 64 65 72 50 61 74 68 28 49  HGetFolderPath(I
1a60: 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20  ntPtr.Zero,..   
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 53 49               CSI
1a90: 44 4c 5f 53 59 53 54 45 4d 58 38 36 2c 20 49 6e  DL_SYSTEMX86, In
1aa0: 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20  tPtr.Zero,..    
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 53 48 47 46              SHGF
1ad0: 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 2c 20  P_TYPE_CURRENT, 
1ae0: 62 75 66 66 65 72 29 20 3d 3d 20 53 5f 4f 4b 29  buffer) == S_OK)
1af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b20: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b30: 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72  Marshal.PtrToStr
1b40: 69 6e 67 41 75 74 6f 28 62 75 66 66 65 72 29 3b  ingAuto(buffer);
1b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1b90: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1ba0: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
1bb0: 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f             // TO
1c00: 44 4f 3a 20 49 73 20 74 68 69 73 20 74 68 65 20  DO: Is this the 
1c10: 72 69 67 68 74 20 65 72 72 6f 72 20 68 61 6e 64  right error hand
1c20: 6c 69 6e 67 20 73 6f 6c 75 74 69 6f 6e 0d 0a 20  ling solution.. 
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c40: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 75     //       to u
1c50: 73 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  se at this point
1c60: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
1c70: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1c90: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1ca0: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1cb0: 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
1cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1ce0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1cf0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1d00: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d20: 43 6f 75 6c 64 20 6e 6f 74 20 67 65 74 20 73 79  Could not get sy
1d30: 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79 3a 20  stem directory: 
1d40: 7b 30 7d 22 2c 20 65 29 2c 0d 0a 20 20 20 20 20  {0}", e),..     
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d60: 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d80: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 3b            throw;
1d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1da0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1db0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1de0: 20 20 20 20 20 69 66 20 28 62 75 66 66 65 72 20       if (buffer 
1df0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
1e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e30: 4d 61 72 73 68 61 6c 2e 46 72 65 65 43 6f 54 61  Marshal.FreeCoTa
1e40: 73 6b 4d 65 6d 28 62 75 66 66 65 72 29 3b 0d 0a  skMem(buffer);..
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e60: 20 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d          buffer =
1e70: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1ea0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1eb0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1ec0: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
1ed0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1ee0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1ef0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
1f00: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
1f10: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1f20: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1f70: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
1f80: 61 74 65 20 48 65 6c 70 65 72 20 43 6c 61 73 73  ate Helper Class
1f90: 65 73 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  es..        #reg
1fa0: 69 6f 6e 20 41 6e 79 50 61 69 72 20 43 6c 61 73  ion AnyPair Clas
1fb0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
1fc0: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
1fd0: 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32 3e 0d  AnyPair<T1, T2>.
1fe0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1ff0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2000: 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
2010: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
2020: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2030: 20 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68 69   // WARNING: Thi
2040: 73 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 70 72  s constructor pr
2050: 6f 64 75 63 65 73 20 61 6e 20 69 6d 6d 75 74 61  oduces an immuta
2060: 62 6c 65 20 22 65 6d 70 74 79 22 20 70 61 69 72  ble "empty" pair
2070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2080: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2090: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20a0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  /..            p
20b0: 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28 29 0d  ublic AnyPair().
20c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20d0: 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20   : base()..     
20e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
2100: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
2110: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2120: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2170: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2180: 20 41 6e 79 50 61 69 72 28 54 31 20 78 29 0d 0a   AnyPair(T1 x)..
2190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a0: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20  : this()..      
21b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21c0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 78 20           this.x 
21d0: 3d 20 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = x;..          
21e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21f0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2230: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2240: 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79        public Any
2250: 50 61 69 72 28 54 31 20 78 2c 20 54 32 20 79 29  Pair(T1 x, T2 y)
2260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2270: 20 20 3a 20 74 68 69 73 28 78 29 0d 0a 20 20 20    : this(x)..   
2280: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2290: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
22a0: 2e 79 20 3d 20 79 3b 0d 0a 20 20 20 20 20 20 20  .y = y;..       
22b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
22c0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
22d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
22e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2320: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2330: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
2340: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
2350: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2360: 54 31 20 78 3b 0d 0a 20 20 20 20 20 20 20 20 20  T1 x;..         
2370: 20 20 20 70 75 62 6c 69 63 20 54 31 20 58 0d 0a     public T1 X..
2380: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
23a0: 65 74 20 7b 20 72 65 74 75 72 6e 20 78 3b 20 7d  et { return x; }
23b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
23d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2410: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2420: 20 20 70 72 69 76 61 74 65 20 54 32 20 79 3b 0d    private T2 y;.
2430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2440: 6c 69 63 20 54 32 20 59 0d 0a 20 20 20 20 20 20  lic T2 Y..      
2450: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2460: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
2470: 65 74 75 72 6e 20 79 3b 20 7d 0d 0a 20 20 20 20  eturn y; }..    
2480: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2490: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
24a0: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
24b0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
24c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
24d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2510: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2520: 72 65 67 69 6f 6e 20 54 72 61 63 65 4f 70 73 20  region TraceOps 
2530: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
2540: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 63 6c  rivate static cl
2550: 61 73 73 20 54 72 61 63 65 4f 70 73 0d 0a 20 20  ass TraceOps..  
2560: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2570: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
2580: 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
2590: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
25a0: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
25b0: 20 44 65 66 61 75 6c 74 44 65 62 75 67 46 6f 72   DefaultDebugFor
25c0: 6d 61 74 20 3d 20 22 23 7b 30 7d 20 40 20 7b 31  mat = "#{0} @ {1
25d0: 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20 20 20 20 20  }: {2}";..      
25e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
25f0: 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66 61 75  nst string Defau
2600: 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  ltTraceFormat = 
2610: 22 23 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d  "#{0} @ {1}: {2}
2620: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
2630: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2640: 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31 44 61  string Iso8601Da
2650: 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d  teTimeOutputForm
2660: 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  at =..          
2670: 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d 2e 64        "yyyy.MM.d
2680: 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 66 66  dTHH:mm:ss.fffff
2690: 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ff";..          
26a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
26c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2700: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2710: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
2720: 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
2730: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2740: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
2750: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
2760: 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ect();..        
2770: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2780: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65 62 75  ic long nextDebu
2790: 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gId;..          
27a0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
27b0: 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63 65 49   long nextTraceI
27c0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
27d0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 49  private static I
27e0: 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e  List<TraceListen
27f0: 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65 6e 65  er> debugListene
2800: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
2810: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2820: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
2830: 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 54 72  bugPriority = Tr
2840: 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61  acePriority.Defa
2850: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
2860: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2870: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
2880: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 54  racePriority = T
2890: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
28a0: 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ault;..         
28b0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28c0: 63 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  c string debugFo
28d0: 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 44 65  rmat = DefaultDe
28e0: 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
28f0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2900: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
2910: 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66 61  aceFormat = Defa
2920: 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ultTraceFormat;.
2930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2940: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2950: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29a0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
29b0: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
29c0: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
29d0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
29e0: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
29f0: 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74  ity DebugPriorit
2a00: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
2a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a20: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
2a30: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
2a40: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20   debugPriority; 
2a50: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
2a60: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
2a70: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62  (syncRoot) { deb
2a80: 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  ugPriority = val
2a90: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
2aa0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ab0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2b00: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2b10: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
2b20: 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69  rity TracePriori
2b30: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
2b40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b50: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
2b60: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
2b70: 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n tracePriority;
2b80: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
2b90: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
2ba0: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
2bb0: 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61  acePriority = va
2bc0: 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  lue; } }..      
2bd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2be0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c30: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2c40: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
2c50: 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20  ebugFormat..    
2c60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c70: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2c80: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
2c90: 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
2ca0: 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20  ormat; } }..    
2cb0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2cc0: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
2cd0: 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20  ) { debugFormat 
2ce0: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
2cf0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2d00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2d60: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
2d70: 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a  ng TraceFormat..
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2da0: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
2db0: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74 72  oot) { return tr
2dc0: 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a  aceFormat; } }..
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de0: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
2df0: 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46 6f 72  Root) { traceFor
2e00: 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  mat = value; } }
2e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2e30: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2e40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2e90: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2ea0: 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20 53 75  n Interactive Su
2eb0: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20  pport Methods.. 
2ec0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
2ed0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2ee0: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2ef0: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
2f00: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2f10: 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 53 68   DialogResult Sh
2f20: 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  owMessage(..    
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2f40: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
2f50: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
2f60: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
2f70: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
2f80: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
2f90: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
2fa0: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
2fb0: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
2fc0: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
2fd0: 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
2fe0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2ff0: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
3000: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
3010: 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20  g category,..   
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
3030: 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20 62  sageBoxButtons b
3040: 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  uttons,..       
3050: 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
3060: 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20  BoxIcon icon..  
3070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
3080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a0: 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65 73  DialogResult res
30b0: 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73 75  ult = DialogResu
30c0: 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20  lt.OK;....      
30d0: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
30e0: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
30f0: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
3100: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3110: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3120: 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73 61 67  Callback, messag
3130: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  e, category);...
3140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3150: 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66 6f 72   if (SystemInfor
3160: 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74 65 72  mation.UserInter
3170: 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20 20 20  active)..       
3180: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a0: 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d 20 47  string title = G
31b0: 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
31c0: 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20  assembly);....  
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e0: 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d 20 6e    if (title == n
31f0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69                ti
3210: 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74 69 6f  tle = Applicatio
3220: 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a  n.ProductName;..
3230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3240: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 4d        result = M
3250: 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 28 6d  essageBox.Show(m
3260: 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c 20 62  essage, title, b
3270: 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a  uttons, icon);..
3280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3290: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72        DebugAndTr
32a0: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
32b0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
32c0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
32d0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
32e0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
32f0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
3300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3310: 20 20 22 55 73 65 72 20 63 68 6f 69 63 65 20 6f    "User choice o
3320: 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70  f {0}.", ForDisp
3330: 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20  lay(result)),.. 
3340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3350: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29         category)
3360: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3370: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3380: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
3390: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
33b0: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
33c0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
33d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
33f0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
3400: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
3410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3420: 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f 69 63    "Default choic
3430: 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  e of {0}.", ForD
3440: 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c  isplay(result)),
3450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3460: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b        category);
3470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3480: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
3490: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
34a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
34b0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
34c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
34d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3510: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
3520: 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70 70  ion Tracing Supp
3530: 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ort Methods..   
3540: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3550: 73 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 75  static void Setu
3560: 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28  pDebugListeners(
3570: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3590: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65    if (debugListe
35a0: 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ners == null).. 
35b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c0: 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72     debugListener
35d0: 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 72 61  s = new List<Tra
35e0: 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b 0d 0a  ceListener>();..
35f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3600: 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73    debugListeners
3610: 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65  .Add(new Console
3620: 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29  TraceListener())
3630: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f  ////////////////
3680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3690: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
36a0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
36b0: 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49   long NextDebugI
36c0: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
36d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36e0: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
36f0: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
3700: 28 72 65 66 20 6e 65 78 74 44 65 62 75 67 49 64  (ref nextDebugId
3710: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3720: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3730: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3770: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3780: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3790: 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65  c long NextTrace
37a0: 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  Id()..          
37b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37c0: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65       return Inte
37d0: 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e  rlocked.Incremen
37e0: 74 28 72 65 66 20 6e 65 78 74 54 72 61 63 65 49  t(ref nextTraceI
37f0: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
3800: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3810: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3850: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3860: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3870: 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74  ic string TimeSt
3880: 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61 74  amp(DateTime dat
3890: 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  eTime)..        
38a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
38b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61         return da
38c0: 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28  teTime.ToString(
38d0: 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f  Iso8601DateTimeO
38e0: 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20  utputFormat);.. 
38f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3950: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
3960: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
3970: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
3980: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
3990: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
39a0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
39b0: 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20  MethodName(..   
39c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61               Sta
39d0: 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61  ckTrace stackTra
39e0: 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
39f0: 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a       int level..
3a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3a30: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
3a40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3a70: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
3a80: 66 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20  f a valid stack 
3a90: 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75  trace was not su
3aa0: 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20  pplied by the.. 
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ac0: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
3ad0: 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e  er, create one n
3ae0: 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ow based on the 
3af0: 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20  current..       
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3b10: 20 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20        execution 
3b20: 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20  stack...        
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b50: 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61      if (stackTra
3b60: 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ce == null)..   
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3b90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bb0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3bc0: 20 47 72 61 62 20 74 68 65 20 63 75 72 72 65 6e   Grab the curren
3bd0: 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63  t execution stac
3be0: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c10: 20 20 20 20 20 20 20 20 73 74 61 63 6b 54 72 61          stackTra
3c20: 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72  ce = new StackTr
3c30: 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ace();....      
3c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c50: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3c70: 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b   NOTE: Always sk
3c80: 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61  ip this call fra
3c90: 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70 74 75  me when we captu
3ca0: 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
3cc0: 20 20 20 20 20 74 68 65 20 73 74 61 63 6b 20 74       the stack t
3cd0: 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  race...         
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3cf0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3d00: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c             level
3d10: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
3d20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d40: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3d50: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3d60: 45 3a 20 47 65 74 20 74 68 65 20 73 70 65 63 69  E: Get the speci
3d70: 66 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65  fied stack frame
3d80: 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65   (always add one
3d90: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
3da0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3db0: 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68    skip this meth
3dc0: 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  od)...          
3dd0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3df0: 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61    StackFrame sta
3e00: 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54  ckFrame = stackT
3e10: 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65  race.GetFrame(le
3e20: 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  vel);....       
3e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3e50: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
3e60: 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72  t the method for
3e70: 20 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65   the stack frame
3e80: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3e90: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
3eb0: 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64  ethodBase method
3ec0: 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d  Base = stackFram
3ed0: 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a  e.GetMethod();..
3ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ef0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3f10: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74   NOTE: Get the t
3f20: 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68  ype for the meth
3f30: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
3f40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f60: 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74   Type type = met
3f70: 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e  hodBase.Declarin
3f80: 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  gType;....      
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3fb0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
3fc0: 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  et the name of t
3fd0: 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  he method...    
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ff0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4000: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
4010: 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65  ame = methodBase
4020: 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Name;....      
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4050: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
4060: 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72  eturn the proper
4070: 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73  ly formatted res
4080: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ult...          
4090: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
40c0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40e0: 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79   "{0}{1}{2}", ty
40f0: 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65  pe.Name, Type.De
4100: 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d  limiter, name);.
4110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4120: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
4130: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
4140: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4160: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
4170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4180: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4190: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
41a0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
41b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
41c0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
41d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4200: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4210: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4220: 69 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72  ic void DebugCor
4230: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
4240: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
4250: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
4260: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
4270: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
4280: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4290: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
42a0: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
42b0: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
42c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42e0: 69 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65  if (debugListene
42f0: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4310: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4320: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
4330: 61 63 68 20 28 54 72 61 63 65 4c 69 73 74 65 6e  ach (TraceListen
4340: 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e 20 64  er listener in d
4350: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a  ebugListeners)..
4360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4370: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4390: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e         listener.
43a0: 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61 67  WriteLine(messag
43b0: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  e, category);.. 
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43d0: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65             liste
43e0: 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20  ner.Flush();..  
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4430: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
4440: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4490: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
44a0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
44b0: 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72 65 28   void TraceCore(
44c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
44d0: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
44e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
44f0: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
4500: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
4510: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
4520: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4530: 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
4540: 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Root)..         
4550: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4580: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
4590: 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 67 65  rite the message
45a0: 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69   to all the acti
45b0: 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ve trace..      
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
45d0: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 73         listeners
45e0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
45f0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
4610: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d  race.WriteLine(m
4620: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
4630: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4640: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 46 6c          Trace.Fl
4650: 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ush();..        
4660: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4670: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4680: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
46d0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
46e0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
46f0: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
4700: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
4710: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4720: 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64   string DebugAnd
4730: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
4740: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
4750: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
4760: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
4770: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
4780: 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ack debugCallbac
4790: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
47a0: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
47b0: 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  k traceCallback,
47c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
47d0: 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63 65    Exception exce
47e0: 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
47f0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
4800: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
4810: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4820: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4830: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
4840: 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  xception != null
4850: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4860: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65         return De
4870: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
4880: 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67  ePriority, debug
4890: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48b0: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
48c0: 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65  , new StackTrace
48d0: 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75 65  (exception, true
48e0: 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  ), 0,..         
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
4900: 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e  xception.ToStrin
4910: 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  g(), category);.
4920: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4930: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
49b0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
49c0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
49d0: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
49e0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
49f0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
4a00: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4a20: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
4a30: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4a50: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
4a60: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4a70: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
4a80: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
4a90: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
4aa0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
4ab0: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
4ac0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4ad0: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
4ae0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4af0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4b00: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4b10: 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65  rn DebugAndTrace
4b20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4b30: 20 20 20 20 20 20 20 74 72 61 63 65 50 72 69 6f         tracePrio
4b40: 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62  rity, debugCallb
4b50: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
4b60: 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20  ck, null, 1,..  
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b80: 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67    message, categ
4b90: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
4ba0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4bb0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bf0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4c00: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
4c10: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
4c20: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
4c30: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
4c40: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
4c50: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
4c60: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4c70: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
4c80: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
4c90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4ca0: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4cb0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4cd0: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
4ce0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
4d00: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
4d10: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
4d20: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
4d30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4d40: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
4d50: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4d60: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
4d70: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
4d80: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4d90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4da0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4db0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4dc0: 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20  TE: Always skip 
4dd0: 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20  this call frame 
4de0: 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72 61  if the stack tra
4df0: 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  ce is..         
4e00: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
4e10: 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74  going to be capt
4e20: 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f  ured by GetMetho
4e30: 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20  dName...        
4e40: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4e60: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75  stackTrace == nu
4e70: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4e80: 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b           level++
4e90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4ea0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4eb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
4ec0: 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65 73  : Format the mes
4ed0: 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61 79  sage for display
4ee0: 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20   (once)...      
4ef0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4f10: 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20 3d  ring formatted =
4f20: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
4f30: 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}: {1}",..    
4f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f50: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74  GetMethodName(st
4f60: 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29  ackTrace, level)
4f70: 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  , message);.... 
4f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4f90: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4fa0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
4fb0: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
4fc0: 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20  k is invalid or 
4fd0: 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72 69  the trace priori
4fe0: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
4ff0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20      //       of 
5000: 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20  this message is 
5010: 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20 77  less than what w
5020: 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74  e currently want
5030: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
5040: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 65       //       de
5050: 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20  bug, skip it... 
5060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5070: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
5080: 20 20 20 69 66 20 28 28 64 65 62 75 67 43 61 6c     if ((debugCal
5090: 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26  lback != null) &
50a0: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
50b0: 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72 69         (tracePri
50c0: 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72  ority >= DebugPr
50d0: 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20  iority))..      
50e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5100: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5110: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5120: 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 62  : Invoke the deb
5130: 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ug callback with
5140: 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a   the formatted..
5150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5160: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73      //       mes
5170: 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61 74  sage and the cat
5180: 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64 20  egory specified 
5190: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
51b0: 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20       caller...  
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51d0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
51e0: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
51f0: 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65  allback(formatte
5200: 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  d, category);.. 
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5220: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5230: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5240: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
5250: 20 49 66 20 74 68 65 20 74 72 61 63 65 20 63 61   If the trace ca
5260: 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69  llback is invali
5270: 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70  d or the trace p
5280: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
5290: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
52a0: 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67    of this messag
52b0: 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77  e is less than w
52c0: 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79  hat we currently
52d0: 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20   want to..      
52e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
52f0: 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20 69     trace, skip i
5300: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
5310: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5320: 20 20 20 20 20 20 20 20 69 66 20 28 28 74 72 61          if ((tra
5330: 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
5340: 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
5350: 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61              (tra
5360: 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54 72  cePriority >= Tr
5370: 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a 20  acePriority)).. 
5380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
53a0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
53b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
53c0: 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68   NOTE: Invoke th
53d0: 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
53e0: 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74   with the format
53f0: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
5400: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5410: 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68    message and th
5420: 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69  e category speci
5430: 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
5440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5450: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
5460: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5470: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5490: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72  raceCallback(for
54a0: 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79  matted, category
54b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
54c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
54d0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
54e0: 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20  message;..      
54f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5500: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5510: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5520: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
5530: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
5540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5580: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
5590: 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72  gion MockRegistr
55a0: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
55b0: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
55c0: 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74  class MockRegist
55d0: 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  ry : IDisposable
55e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
55f0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
5600: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
5610: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
5620: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
5630: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
5640: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5650: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
5660: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
5670: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
5680: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5690: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
56a0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
56b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
56c0: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5700: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5710: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5720: 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ockRegistry(..  
5730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
5740: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
5750: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
5760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
5770: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
5780: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5790: 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74         this.what
57a0: 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20  If = whatIf;..  
57b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
57c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
57d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5820: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5830: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5840: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
5850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5860: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
5870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5880: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5890: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
58a0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
58b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
58c0: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
58d0: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
58e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
58f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5950: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5960: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5970: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
5980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5990: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
59a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
59b0: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
59d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59e0: 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c 20 72  : this(whatIf, r
59f0: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
5a00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5a10: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
5a20: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
5a30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5a40: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5a50: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
5a60: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5aa0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5ab0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
5ac0: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
5ad0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
5ae0: 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
5af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5b00: 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
5b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b30: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
5b40: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68  sed(); return wh
5b50: 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
5b60: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
5b70: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5b80: 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
5b90: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5ba0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bf0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5c00: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5c10: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
5c20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
5c30: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
5c40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
5c60: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
5c70: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
5c80: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
5c90: 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
5ca0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
5cb0: 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20  adOnly = value; 
5cc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5cd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d20: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5d30: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5d40: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
5d50: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
5d60: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
5d70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5d80: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
5d90: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
5da0: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
5db0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
5dc0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5dd0: 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b 20  ; safe = value; 
5de0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5df0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5e50: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
5e60: 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73 73  egistryKey class
5e70: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
5e80: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
5e90: 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73  RegistryKey Clas
5ea0: 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20  sesRoot..       
5eb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5ec0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
5ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ef0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
5f00: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
5f10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5f20: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e  classesRoot == n
5f30: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
5f50: 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65 77 20  assesRoot = new 
5f60: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
5f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
5f90: 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73 52 6f  gistry.ClassesRo
5fa0: 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ot, whatIf, read
5fb0: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fd0: 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61 73 73      return 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 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6000: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6010: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6060: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6070: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
6080: 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e 66 69  Key currentConfi
6090: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
60a0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
60b0: 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 43 6f  tryKey CurrentCo
60c0: 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20  nfig..          
60d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
60e0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
60f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6110: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6130: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72           if (cur
6140: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75  rentConfig == nu
6150: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
6160: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
6170: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 65 77  rentConfig = new
6180: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6190: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
61b0: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 43  egistry.CurrentC
61c0: 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c 20 72  onfig, whatIf, r
61d0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
61e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
61f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75         return cu
6200: 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20  rrentConfig;..  
6210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6280: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6290: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
62a0: 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74  istryKey current
62b0: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
62c0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
62d0: 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e  gistryKey Curren
62e0: 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20  tUser..         
62f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6300: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6310: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6330: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
6340: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6350: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
6360: 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e 75 6c  rrentUser == nul
6370: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6380: 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72              curr
6390: 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20 4d 6f  entUser = new Mo
63a0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
63d0: 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
63e0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
63f0: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
6400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6410: 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e 74    return current
6420: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
6430: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6440: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6450: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
64a0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
64b0: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
64c0: 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  y dynData;..    
64d0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
64e0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 44  ockRegistryKey D
64f0: 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ynData..        
6500: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6510: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6520: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6540: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6550: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6560: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
6570: 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d  ynData == null).
6580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6590: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
65a0: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
65b0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
65c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65d0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 44 79       Registry.Dy
65e0: 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72  nData, whatIf, r
65f0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6600: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6610: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 79         return dy
6620: 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  nData;..        
6630: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6640: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6650: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
66a0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
66b0: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
66c0: 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b  ey localMachine;
66d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
66e0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
66f0: 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68 69 6e  yKey LocalMachin
6700: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
6710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6720: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
6730: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
6750: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
6760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6770: 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d        if (localM
6780: 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c 29 0d  achine == null).
6790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
67a0: 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61           localMa
67b0: 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b  chine = new Mock
67c0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
67d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67e0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
67f0: 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c  ry.LocalMachine,
6800: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
6810: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d 61 63   return localMac
6840: 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  hine;..         
6850: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6860: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6870: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
68c0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
68d0: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
68e0: 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y performanceDat
68f0: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
6900: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6910: 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d 61 6e  tryKey Performan
6920: 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ceData..        
6930: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6940: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6950: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6970: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6980: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6990: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
69a0: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d  erformanceData =
69b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69d0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
69e0: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
69f0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a10: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 50 65       Registry.Pe
6a20: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c 20 77  rformanceData, w
6a30: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
6a40: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6a60: 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61 6e 63  eturn performanc
6a70: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
6a80: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6a90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6aa0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6af0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6b00: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6b10: 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20 20 20  ey users;..     
6b20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
6b30: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 55 73  ckRegistryKey Us
6b40: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
6b50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6b60: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
6b70: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b90: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6ba0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6bb0: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
6bc0: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6be0: 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65 77 20      users = new 
6bf0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6c00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6c20: 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20 77 68  gistry.Users, wh
6c30: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
6c40: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
6c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6c60: 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 20 20  turn users;..   
6c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6c80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6c90: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
6ca0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6cb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cf0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6d00: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6d10: 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 72 79  Public "Registry
6d20: 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  " Methods..     
6d30: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62         public ob
6d40: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a  ject GetValue(..
6d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d60: 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d  string keyName,.
6d70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6d80: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d   string valueNam
6d90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
6da0: 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75      object defau
6db0: 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  ltValue..       
6dc0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
6dd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6de0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
6df0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
6e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6e10: 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 47  eturn Registry.G
6e20: 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c  etValue(keyName,
6e30: 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65 66 61   valueName, defa
6e40: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
6e50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6e60: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6eb0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
6ec0: 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65  ic void SetValue
6ed0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6ee0: 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
6ef0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
6f00: 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
6f10: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
6f20: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
6f30: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
6f40: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
6f50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6f60: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6f70: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
6f80: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
6f90: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
6fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6fb0: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
6fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
6fd0: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
6fe0: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
6ff0: 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  ame, value);..  
7000: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7010: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
7070: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
7080: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
7090: 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
70a0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
70b0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
70c0: 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ueName,..       
70d0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
70e0: 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  value,..        
70f0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
7100: 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75 65 4b  ValueKind valueK
7110: 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ind..           
7120: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
7130: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7140: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
7150: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
7160: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
7170: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
7180: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7190: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
71a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
71b0: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
71c0: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
71d0: 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75  ame, value, valu
71e0: 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20  eKind);..       
71f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7200: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7260: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7270: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
7280: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
7290: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
72a0: 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79  id CheckReadOnly
72b0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
72c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
72d0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
72e0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
72f0: 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d  In "read-only" m
7300: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
7310: 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73   all write acces
7320: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
7330: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
7340: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
7350: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
7360: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7370: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
7380: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7390: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
73a0: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
73b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
73c0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
73d0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
73e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
73f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7420: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7430: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
7440: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
7450: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
7460: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
7470: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
7480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7490: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
74a0: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
74b0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
74c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
74d0: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
74e0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
74f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7500: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
7510: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7520: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
7530: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
7540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
7550: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
7560: 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  y).Name);..     
7570: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7580: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
75d0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
75e0: 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
75f0: 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
7600: 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20  Dispose(..      
7610: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
7620: 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20  isposing..      
7630: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
7640: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7650: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7660: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
7670: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7690: 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67     if (disposing
76a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
76b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
76e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76f0: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
7700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7710: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
7720: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
7730: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
7740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7770: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7790: 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 21 3d   (classesRoot !=
77a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
77e0: 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c 6f 73 65  lassesRoot.Close
77f0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7810: 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e   classesRoot = n
7820: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7840: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7850: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
7860: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 21 3d 20  urrentConfig != 
7870: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
78b0: 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43 6c 6f 73  rrentConfig.Clos
78c0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78e0: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20    currentConfig 
78f0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7910: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7930: 20 28 63 75 72 72 65 6e 74 55 73 65 72 20 21 3d   (currentUser !=
7940: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7960: 7b 0d 0a 20 20 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 63                 c
7980: 75 72 72 65 6e 74 55 73 65 72 2e 43 6c 6f 73 65  urrentUser.Close
7990: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79b0: 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e   currentUser = n
79c0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
79e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
79f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
7a00: 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d  ynData != null).
7a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7a20: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a40: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 2e          dynData.
7a50: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 20 20 20 20 20 64 79 6e 44 61 74 61 20 3d 20        dynData = 
7a80: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7aa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7ac0: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 21 3d 20  localMachine != 
7ad0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
7b10: 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c 6f 73 65  calMachine.Close
7b20: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b40: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20   localMachine = 
7b50: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7b70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7b90: 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20  performanceData 
7ba0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
7bf0: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c10: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
7c20: 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a  ceData = null;..
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c60: 20 20 20 20 20 69 66 20 28 75 73 65 72 73 20 21       if (users !
7c70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c90: 20 7b 0d 0a 20 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: 75 73 65 72 73 2e 43 6c 6f 73 65 28 29 3b 0d 0a  users.Close();..
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72              user
7ce0: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
7d10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d30: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7d70: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
7d80: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
7d90: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
7da0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dd0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7de0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f   // NOTE: This o
7e10: 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73  bject is now dis
7e20: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
7e60: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
7e70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7e80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7e90: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7ea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ef0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7f00: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
7f10: 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
7f20: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
7f30: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
7f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f60: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f80: 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c  GC.SuppressFinal
7f90: 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ize(this);..    
7fa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7fb0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7fc0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
7fd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8010: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8020: 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
8030: 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  ructor..        
8040: 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72      ~MockRegistr
8050: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y()..           
8060: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8070: 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73      Dispose(fals
8080: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8090: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
80a0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
80b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
80c0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
80d0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
80e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8120: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
8130: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
8140: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69  Class..        i
8150: 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63  nternal sealed c
8160: 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74 72  lass MockRegistr
8170: 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73 61 62  yKey : IDisposab
8180: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
8190: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
81a0: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
81b0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
81c0: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
81d0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a  kRegistryKey()..
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
81f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
8200: 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20  hatIf = true;.. 
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8220: 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d  eadOnly = true;.
8230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8240: 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20   safe = true;.. 
8250: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8260: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
8270: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
8280: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
82d0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
82e0: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
82f0: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
8300: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8310: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8320: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
8330: 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20  yKey key..      
8340: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8350: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
8360: 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  his()..         
8370: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8380: 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79 20 3d        this.key =
8390: 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20   key;..         
83a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
83b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
83c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8400: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8410: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
8440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8450: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
8460: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
8470: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
8480: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
8490: 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey)..           
84a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
84b0: 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65 79 4e      this.subKeyN
84c0: 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61 6d 65  ame = subKeyName
84d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
84e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
84f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8530: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8540: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8550: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8560: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8570: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8590: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
85a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85b0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
85d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85e0: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
85f0: 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20 20 20  bKeyName)..     
8600: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8610: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
8620: 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d  hatIf = whatIf;.
8630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
86a0: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
86b0: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
86c0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
86d0: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
86e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
86f0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8710: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
8720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8730: 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol readOnly..   
8740: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8760: 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b  : this(key, subK
8770: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 29 0d  eyName, whatIf).
8780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87a0: 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 3d 20  this.readOnly = 
87b0: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
87c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
87d0: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8820: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
8830: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
8840: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
8850: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
8860: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
8870: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
8880: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
8890: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
88a0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
88b0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
88c0: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  dOnly,..        
88d0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66          bool saf
88e0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
88f0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8900: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
8910: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
8920: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d  atIf, readOnly).
8930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8950: 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 65  this.safe = safe
8960: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8970: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
89d0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
89e0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
89f0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8a00: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
8a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8a20: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
8a30: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8a50: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8a60: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
8a70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8a80: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8a90: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8aa0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8ab0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8af0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8b00: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
8b10: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
8b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8b30: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
8b40: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8b50: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8b70: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8ba0: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e     : this(key, n
8bb0: 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ull, whatIf, rea
8bc0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
8bd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8be0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
8bf0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
8c00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8c10: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8c60: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8c70: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c90: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
8ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8cb0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cd0: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a  bool readOnly,..
8ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cf0: 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20  bool safe..     
8d00: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8d20: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8d30: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
8d40: 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  , safe)..       
8d50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8d60: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8d70: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8d80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8d90: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
8da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8df0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8e00: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
8e10: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
8e20: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
8e30: 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  Close()..       
8e40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8e50: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
8e60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
8e70: 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73 65 64  OTE: No disposed
8e80: 20 63 68 65 63 6b 20 68 65 72 65 20 62 65 63 61   check here beca
8e90: 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68 69 73  use calling this
8ea0: 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20   method..       
8eb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
8ec0: 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75 73 74    should be just
8ed0: 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20 44 69   like calling Di
8ee0: 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  spose...        
8ef0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
8f10: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
8f20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8f30: 20 20 20 20 20 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
8f90: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
8fa0: 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey CreateSubKey(
8fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8fc0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
8fd0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
8fe0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
8ff0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9000: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9010: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
9020: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
9030: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9050: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9070: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
9080: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9090: 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a     if (whatIf)..
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
90c0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
90e0: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
90f0: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
9100: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
9110: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  If this..       
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
9130: 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77 65 20        fails, we 
9140: 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75  will simply retu
9150: 72 6e 20 74 68 65 20 77 72 61 70 70 65 64 20 72  rn the wrapped r
9160: 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  oot key..       
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
9180: 20 20 20 20 20 20 69 74 73 65 6c 66 20 73 69 6e        itself sin
9190: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
91a0: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 27 77 68 61   allowed in 'wha
91b0: 74 2d 69 66 27 0d 0a 20 20 20 20 20 20 20 20 20  t-if'..         
91c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
91d0: 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e      mode anyhow.
91e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
91f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
9210: 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
9220: 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65   = key.OpenSubKe
9230: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  y(subKeyName);..
9240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9250: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73 75        return (su
9260: 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d  bKey != null) ?.
9270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9280: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
9290: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
92c0: 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72  ubKey, whatIf, r
92d0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a  eadOnly, safe) :
92e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
92f0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f            new Mo
9300: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9330: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
9340: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
9350: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
9360: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
9380: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
9390: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
93a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
93b0: 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
93c0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93e0: 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79  key.CreateSubKey
93f0: 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68  (subKeyName), wh
9400: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
9410: 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  safe);..        
9420: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9430: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9440: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9490: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
94a0: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
94b0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
94c0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
94d0: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
94e0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
94f0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
9500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9530: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9540: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9550: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
9560: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9570: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
9580: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
95a0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
95b0: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
95c0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
95d0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
95e0: 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  leteSubKey(subKe
95f0: 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  yName, throwOnMi
9600: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9610: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9620: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9670: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9680: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
9690: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
96a0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
96b0: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
96c0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
96d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
96f0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9710: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
9720: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9730: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
9740: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9750: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
9760: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9770: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
9780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9790: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
97a0: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
97b0: 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  yName);..       
97c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
97d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
97e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9820: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9830: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
9840: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9850: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
9860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9870: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
9880: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
9890: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
98a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
98b0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
98c0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
98d0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
98e0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9900: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9920: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9940: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9960: 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65   key.DeleteValue
9970: 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  (name, throwOnMi
9980: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9990: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
99a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
99b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
99f0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9a00: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
9a10: 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20 20  eyNames()..     
9a20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9a30: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9a40: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9a60: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a80: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
9a90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9aa0: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
9ab0: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
9ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9ad0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b20: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9b30: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
9b40: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
9b50: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9b60: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
9b70: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
9b80: 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20  defaultValue..  
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bc0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9bd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9be0: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
9bf0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9c00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9c10: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
9c20: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9c30: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61   key.GetValue(na
9c40: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
9c50: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9c60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9c70: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cb0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9cc0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
9cd0: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
9ce0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
9cf0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9d00: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
9d10: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9d20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9d40: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9d60: 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 62 4b   return OpenSubK
9d70: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66  ey(subKeyName, f
9d80: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
9d90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9da0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9de0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9df0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
9e00: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
9e10: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
9e20: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9e30: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
9e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e50: 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d 0a 20  bool writable.. 
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9e80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e90: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9ea0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9eb0: 20 20 20 20 20 69 66 20 28 77 72 69 74 61 62 6c       if (writabl
9ec0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
9ed0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
9ee0: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9f00: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
9f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f20: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
9f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9f40: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
9f50: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
9f60: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
9f80: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f  eyName, whatIf ?
9f90: 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c   false : writabl
9fa0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
9fb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73         return (s
9fc0: 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f  ubKey != null) ?
9fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9fe0: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
9ff0: 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b 65 79  gistryKey(subKey
a000: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
a010: 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75 6c 6c  ly, safe) : null
a020: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a030: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a080: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
a090: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
a0a0: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
a0b0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
a0c0: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
a0d0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
a0e0: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
a0f0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
a100: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a110: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
a120: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
a130: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
a140: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
a150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a160: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
a170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a180: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a1a0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1c0: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
a1d0: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  me, value);..   
a1e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a1f0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a200: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
a210: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a250: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a260: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
a270: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
a280: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a290: 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a  ic string Name..
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a2c0: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
a2d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a2e0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a2f0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a310: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
a320: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a340: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a360: 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e 67 2e   return !String.
a370: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 75  IsNullOrEmpty(su
a380: 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  bKeyName) ?..   
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3a0: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
a3b0: 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  at("{0}\\{1}", k
a3c0: 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e  ey.Name, subKeyN
a3d0: 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20  ame) :..        
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3f0: 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  key.Name;..     
a400: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a410: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a420: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a480: 69 76 61 74 65 20 52 65 67 69 73 74 72 79 4b 65  ivate RegistryKe
a490: 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  y key;..        
a4a0: 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69 73      public Regis
a4b0: 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20  tryKey Key..    
a4c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a4d0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
a4e0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a4f0: 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b 20 72  ; CheckSafe(); r
a500: 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20  eturn key; }..  
a510: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a520: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a580: 69 76 61 74 65 20 73 74 72 69 6e 67 20 73 75 62  ivate string sub
a590: 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  KeyName;..      
a5a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
a5b0: 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a  ing SubKeyName..
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a5e0: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
a5f0: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 75 62  ed(); return sub
a600: 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  KeyName; }..    
a610: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a620: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a670: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a680: 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
a690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a6a0: 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
a6b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a6c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a6d0: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
a6e0: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77  osed(); return w
a6f0: 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
a700: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a710: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a760: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
a770: 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b  e bool readOnly;
a780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a790: 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e  blic bool ReadOn
a7a0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
a7b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a7c0: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
a7d0: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
a7e0: 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20   readOnly; }..  
a7f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a800: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a860: 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d  blic bool safe;.
a870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a880: 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20  lic bool Safe.. 
a890: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
a8b0: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
a8c0: 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65  d(); return safe
a8d0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
a8e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a8f0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a900: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
a910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
a960: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
a970: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
a980: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
a990: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a  heckReadOnly()..
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a9c0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
a9d0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22     // NOTE: In "
a9e0: 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c  read-only" mode,
a9f0: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
aa00: 20 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a   write access...
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa20: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
aa30: 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
aa40: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
aa50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
aa60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
aa70: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
aa80: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
aa90: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20  eption();..     
aaa0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
aab0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
aac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ab00: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ab10: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53 61 66  te void CheckSaf
ab20: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
ab30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ab40: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ab50: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
ab60: 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64 65 2c   In "safe" mode,
ab70: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
ab80: 20 64 69 72 65 63 74 20 61 63 63 65 73 73 20 74   direct access t
ab90: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
aba0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
abb0: 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69 73 74  contained regist
abc0: 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20  ry key...       
abd0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
abf0: 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  (!safe)..       
ac00: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ac10: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
ac20: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
ac30: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
ac40: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  onException();..
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ac60: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
ac70: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
ac80: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acc0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
acd0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
ace0: 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76  System.Object Ov
acf0: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20  errides..       
ad00: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
ad10: 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74  ride string ToSt
ad20: 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 20 20  ring()..        
ad30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ad40: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
ad50: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
ad60: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
ad70: 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20  n this.Name;..  
ad80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
ad90: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
ada0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
adb0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
adc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
add0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ade0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adf0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
ae00: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6d        #region Im
ae10: 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73 69 6f  plicit Conversio
ae20: 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20 20 20  n Operators..   
ae30: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
ae40: 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 42           // BUGB
ae50: 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f 20 20  UG: Remove me?  
ae60: 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 73  This should be s
ae70: 61 66 65 20 62 65 63 61 75 73 65 20 69 6e 20 27  afe because in '
ae80: 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20 20  what-if'..      
ae90: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
aea0: 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73 20 61   mode all keys a
aeb0: 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64 2d 6f  re opened read-o
aec0: 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  nly...          
aed0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
aee0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
aef0: 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 74 6f  implicit operato
af00: 72 20 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  r RegistryKey(..
af10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af20: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
af30: 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  key..           
af40: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
af50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
af60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b         return (k
af70: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6b 65  ey != null) ? ke
af80: 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  y.Key : null;.. 
af90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
afa0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
afb0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
afc0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b000: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b010: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b020: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
b030: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
b040: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b050: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
b060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b070: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
b080: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
b090: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
b0a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b0b0: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
b0c0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
b0d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b0e0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
b0f0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b100: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
b110: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
b120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
b130: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
b140: 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  yKey).Name);..  
b150: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b160: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b1b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b1c0: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
b1d0: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
b1e0: 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
b200: 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
b210: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
b220: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b240: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
b250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
b260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b270: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
b280: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
b290: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2b0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
b2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2f0: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
b300: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
b310: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b330: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b350: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b370: 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c   if (key != null
b380: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b390: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3b0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 6c            key.Cl
b3c0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3e0: 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d      key = null;.
b3f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b400: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b420: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b430: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b470: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
b480: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
b490: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
b4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b4f0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b500: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
b510: 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
b520: 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b540: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b550: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
b560: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
b570: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b580: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b590: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
b5a0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b5b0: 20 20 20 20 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 2f  ////////////////
b5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b600: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b610: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
b620: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
b630: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
b640: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
b650: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b660: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
b670: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
b680: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
b690: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
b6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
b6c0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b6d0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b720: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b730: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
b740: 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52            ~MockR
b750: 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20  egistryKey()..  
b760: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b770: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
b780: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
b790: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b7a0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b7b0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
b7c0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
b7d0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
b7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b820: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b830: 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74 72   #region Registr
b840: 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20  yHelper Class.. 
b850: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
b860: 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67 69  tatic class Regi
b870: 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20 20  stryHelper..    
b880: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b890: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
b8a0: 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74  c Static Propert
b8b0: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
b8c0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
b8d0: 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65 61 74  int subKeysCreat
b8e0: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
b8f0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
b900: 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61 74 65  nt SubKeysCreate
b910: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
b920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b930: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
b940: 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 20 7d  ubKeysCreated; }
b950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b960: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9b0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
b9c0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
b9d0: 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65 6c 65   int subKeysDele
b9e0: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
b9f0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
ba00: 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c 65 74  int SubKeysDelet
ba10: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
ba20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ba30: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
ba40: 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b 20  subKeysDeleted; 
ba50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
ba60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ba70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bab0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
bac0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
bad0: 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 53  c int keyValuesS
bae0: 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et;..           
baf0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
bb00: 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65 74 0d  nt KeyValuesSet.
bb10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb30: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79  get { return key
bb40: 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a 20 20  ValuesSet; }..  
bb50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bb60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
bbb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
bbc0: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
bbd0: 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
bbe0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
bbf0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
bc00: 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  t KeyValuesDelet
bc10: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
bc20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bc30: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
bc40: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
bc50: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
bc60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
bc70: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
bc80: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
bc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
bcd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
bce0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74  gion Public Stat
bcf0: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
bd00: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
bd10: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
bd20: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
bd30: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
bd40: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f  public static Mo
bd50: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70  ckRegistryKey Op
bd60: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
bd70: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
bd80: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
bd90: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
bda0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
bdb0: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
bdc0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72           bool wr
bdd0: 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20  itable,..       
bde0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
bdf0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
be00: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
be10: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
be20: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
be30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
be40: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
be50: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
be60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be70: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
be80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
be90: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
bea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
beb0: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
bec0: 67 41 6e 64 54 72 61 63 65 28 77 72 69 74 61 62  gAndTrace(writab
bed0: 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  le ?..          
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
bef0: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
bf00: 65 73 74 20 3a 20 54 72 61 63 65 50 72 69 6f 72  est : TracePrior
bf10: 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20  ity.Higher,..   
bf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf30: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
bf40: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
bf50: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
bf60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
bf70: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
bf80: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
bf90: 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69  yName = {1}, wri
bfa0: 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20  table = {2}",.. 
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfc0: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
bfd0: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
bfe0: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
bff0: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
c010: 44 69 73 70 6c 61 79 28 77 72 69 74 61 62 6c 65  Display(writable
c020: 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
c030: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
c040: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
c050: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
c060: 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f 72 62 69  CK: Always forbi
c070: 64 20 77 72 69 74 61 62 6c 65 20 61 63 63 65 73  d writable acces
c080: 73 20 77 68 65 6e 20 6f 70 65 72 61 74 69 6e 67  s when operating
c090: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   in..           
c0a0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77       //       'w
c0b0: 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20  hat-if' mode... 
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c0d0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c0e0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
c0f0: 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ey key = rootKey
c100: 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c120: 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68    subKeyName, wh
c130: 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77  atIf ? false : w
c140: 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  ritable);....   
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c160: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
c170: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
c180: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
c190: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b 65 79  kRegistryKey(key
c1a0: 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c  , whatIf, false,
c1b0: 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d   false) : null;.
c1c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
c1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c220: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
c230: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
c240: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
c250: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
c260: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
c270: 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73  static MockRegis
c280: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
c290: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
c2a0: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c2b0: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2d0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
c2e0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
c2f0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
c300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c310: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
c320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c330: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
c340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c350: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
c360: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
c370: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
c380: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
c390: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c3a0: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c3c0: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
c3d0: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
c3e0: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
c3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c400: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
c410: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
c420: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
c430: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c440: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
c450: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
c460: 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20  yName = {1}",.. 
c470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c480: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
c490: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
c4a0: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
c4b0: 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
c4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
c4d0: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
c4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c4f0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
c500: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
c520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c530: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c       // HACK: Al
c540: 77 61 79 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c  ways open a key,
c550: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65   rather than cre
c560: 61 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a  ating one when..
c570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c580: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65      //       ope
c590: 72 61 74 69 6e 67 20 69 6e 20 27 77 68 61 74 2d  rating in 'what-
c5a0: 69 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20  if' mode...     
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c5c0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c5d0: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
c5e0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
c5f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c610: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c630: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
c640: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
c650: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
c660: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
c670: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
c680: 20 20 20 20 20 74 68 69 73 20 66 61 69 6c 73 2c       this fails,
c690: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
c6a0: 72 65 74 75 72 6e 20 74 68 65 20 72 6f 6f 74 0d  return the root.
c6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c6c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
c6d0: 20 20 6b 65 79 20 69 74 73 65 6c 66 20 73 69 6e    key itself sin
c6e0: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
c6f0: 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20   allowed in..   
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c710: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77       //       'w
c720: 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 61 6e 79  hat-if' mode any
c730: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
c740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c760: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
c770: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
c780: 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b  rootKey.OpenSubK
c790: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  ey(subKeyName);.
c7a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c7b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c7c0: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
c7d0: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
c7f0: 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ey : new MockReg
c800: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
c810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c820: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
c830: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
c840: 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66  whatIf, false, f
c850: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
c860: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c880: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
c890: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
c8c0: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
c8d0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8f0: 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74 65 53   rootKey.CreateS
c900: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
c910: 29 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65  ), whatIf, false
c920: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
c940: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
c950: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
c970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c980: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
c990: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9b0: 20 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64    subKeysCreated
c9c0: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
c9d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c9e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c9f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ca00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca30: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ca40: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
ca50: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
ca60: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
ca70: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
ca80: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
ca90: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28  id DeleteSubKey(
caa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cab0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
cac0: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
cae0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb00: 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
cb10: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
cb20: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
cb30: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
cb40: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
cb50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cb60: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
cb70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
cb80: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
cb90: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cbb0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
cbc0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
cbd0: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
cbe0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
cbf0: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
cc00: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
cc10: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc30: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
cc40: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
cc50: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc70: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
cc80: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
cc90: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccb0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
ccc0: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
ccd0: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
cce0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ccf0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
cd00: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
cd20: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd40: 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75  rootKey.DeleteSu
cd50: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c  bKey(subKeyName,
cd60: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29   throwOnMissing)
cd70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cd80: 20 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65       subKeysDele
cd90: 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
cda0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cdb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdf0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ce00: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
ce10: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
ce20: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
ce30: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
ce40: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
ce50: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54  id DeleteSubKeyT
ce60: 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
ce70: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
ce80: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
ce90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cea0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
ceb0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
cec0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
ced0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cee0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
cf10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cf20: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
cf30: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
cf50: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
cf60: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
cf70: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
cf80: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
cf90: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
cfa0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
cfb0: 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfd0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
cfe0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
cff0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d010: 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d        "rootKey =
d020: 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65   {0}, subKeyName
d030: 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d050: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f    ForDisplay(roo
d060: 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  tKey), ForDispla
d070: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d  y(subKeyName)),.
d080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d090: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
d0a0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d0c0: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
d0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d0e0: 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b  otKey.DeleteSubK
d0f0: 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d  eyTree(subKeyNam
d100: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
d110: 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65         subKeysDe
d120: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
d130: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d140: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
d150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d190: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
d1a0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
d1b0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
d1c0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
d1d0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
d1e0: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
d1f0: 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
d200: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
d210: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d230: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
d250: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
d260: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
d270: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d290: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2b0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
d2c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d2d0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
d2e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d2f0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
d300: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
d310: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c  cePriority.High,
d320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d330: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
d340: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
d350: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
d360: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d380: 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  "key = {0}", For
d390: 44 69 73 70 6c 61 79 28 6b 65 79 29 29 2c 20 74  Display(key)), t
d3a0: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d3b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d3c0: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
d3d0: 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a  SubKeyNames();..
d3e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
d3f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
d400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d440: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d450: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
d460: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
d470: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
d480: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
d490: 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47 65 74  tatic object Get
d4a0: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
d4b0: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
d4c0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d4e0: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
d4f0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
d500: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 2c  ct defaultValue,
d510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d520: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
d530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d540: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
d550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d580: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
d590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d5a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
d5b0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
d5c0: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d5d0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d5e0: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
d5f0: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
d600: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
d610: 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
d620: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
d630: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
d640: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
d650: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
d660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d670: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61    "key = {0}, na
d680: 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66 61 75 6c  me = {1}, defaul
d690: 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a  tValue = {2}",..
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6b0: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
d6c0: 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70  ay(key), ForDisp
d6d0: 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20 20 20 20  lay(name),..    
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64      ForDisplay(d
d700: 65 66 61 75 6c 74 56 61 6c 75 65 29 29 2c 20 74  efaultValue)), t
d710: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d730: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
d740: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61  Value(name, defa
d750: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
d760: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d770: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d7c0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
d7d0: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
d7e0: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
d7f0: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
d800: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
d810: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
d820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d830: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
d840: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
d850: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
d860: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
d870: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
d880: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
d890: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
d8a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d8b0: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
d8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d8d0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
d8e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d8f0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
d900: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
d910: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
d920: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d930: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
d940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d950: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
d960: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
d970: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
d980: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
d990: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
d9a0: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
d9b0: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
d9c0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9e0: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e     "key = {0}, n
d9f0: 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c 75 65  ame = {1}, value
da00: 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20   = {2}",..      
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da20: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79    ForDisplay(key
da30: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61  ), ForDisplay(na
da40: 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me), ForDisplay(
da50: 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20 20 20  value)),..      
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da70: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
da80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
da90: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
daa0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dab0: 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61         key.SetVa
dac0: 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  lue(name, value)
dad0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dae0: 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 53 65       keyValuesSe
daf0: 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t++;..          
db00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
db10: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
db20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db50: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
db60: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
db70: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
db80: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
db90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
dba0: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
dbb0: 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20   DeleteValue(.. 
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
dbd0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
dbe0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
dbf0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
dc00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dc10: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
dc20: 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
dc30: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
dc40: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
dc50: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
dc60: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
dc70: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
dc80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
dc90: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
dca0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
dcc0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
dcd0: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
dce0: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
dcf0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
dd00: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
dd10: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
dd20: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd40: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
dd50: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
dd60: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30         "key = {0
dd90: 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20  }, name = {1}", 
dda0: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c  ForDisplay(key),
ddb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ddc0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
ddd0: 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74 72 61  play(name)), tra
dde0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de00: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75    key.DeleteValu
de30: 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d  e(name, throwOnM
de40: 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  issing);....    
de50: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56              keyV
de60: 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  aluesDeleted++;.
de70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
de80: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
de90: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
dea0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
deb0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
dec0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ded0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
def0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df00: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
df10: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69      #region Stri
df20: 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  ngList Class..  
df30: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
df40: 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e  aled class Strin
df50: 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72  gList : List<str
df60: 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ing>..        {.
df70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
df80: 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29  lic StringList()
df90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dfa0: 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20    : base()..    
dfb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
dfc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
dfd0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
dfe0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
dff0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e040: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e050: 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e  c StringList(IEn
e060: 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e  umerable<string>
e070: 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20   collection)..  
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
e090: 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29  base(collection)
e0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e0b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e0c0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
e0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e0e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e0f0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
e100: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
e110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
e160: 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f  ion StringDictio
e170: 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20  nary Class..    
e180: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e190: 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44  ed class StringD
e1a0: 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74  ictionary : Dict
e1b0: 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73  ionary<string, s
e1c0: 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20  tring>..        
e1d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
e1e0: 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74  ublic StringDict
e1f0: 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20  ionary()..      
e200: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e210: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e220: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e230: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e240: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e250: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e260: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2a0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e2b0: 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73      #region Vers
e2c0: 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  ionList Class.. 
e2d0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
e2e0: 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73  ealed class Vers
e2f0: 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56  ionList : List<V
e300: 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20  ersion>..       
e310: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e320: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69  public VersionLi
e330: 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
e340: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
e350: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e370: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e380: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
e3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e3e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
e3f0: 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
e400: 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65  t(IEnumerable<Ve
e410: 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f  rsion> collectio
e420: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
e430: 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65      : base(colle
e440: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
e450: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e460: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
e470: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
e480: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
e490: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
e4a0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
e4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e500: 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f    #region Versio
e510: 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20  nMap Class..    
e520: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e530: 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
e540: 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79  Map : Dictionary
e550: 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e  <string, Version
e560: 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b  List>..        {
e570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e580: 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28  blic VersionMap(
e590: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e5a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e5b0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
e5c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e5d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
e5e0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e5f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
e600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e640: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
e650: 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61  gion Package Cla
e660: 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  ss..        inte
e670: 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73  rnal sealed clas
e680: 73 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  s Package..     
e690: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e6a0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
e6b0: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
e6c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e6d0: 63 20 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20  c Package()..   
e6e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
e700: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
e710: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e720: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
e730: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
e740: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e790: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
e7a0: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
e7b0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
e7c0: 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  te AssemblyName 
e7d0: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  assemblyName;.. 
e7e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e7f0: 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 41  c AssemblyName A
e800: 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20 20  ssemblyName..   
e810: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e820: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
e830: 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c  { return assembl
e840: 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  yName; }..      
e850: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
e860: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 76  assemblyName = v
e870: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
e880: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e890: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
e8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e8e0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
e8f0: 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65   bool globalAsse
e900: 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20 20  mblyCache;..    
e910: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
e920: 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62  ool GlobalAssemb
e930: 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20 20 20  lyCache..       
e940: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e950: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
e960: 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73 65 6d  turn globalAssem
e970: 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20 20 20  blyCache; }..   
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
e990: 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c   { globalAssembl
e9a0: 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65 3b 20  yCache = value; 
e9b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
e9c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea10: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
ea20: 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20     private Guid 
ea30: 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20 20  packageId;..    
ea40: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47          public G
ea50: 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d 0a 20  uid PackageId.. 
ea60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
ea80: 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 6b 61  t { return packa
ea90: 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  geId; }..       
eaa0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
eab0: 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c 75 65  ackageId = value
eac0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ead0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
eae0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
eaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eb30: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
eb40: 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a 20 20  d serviceId;..  
eb50: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
eb60: 20 47 75 69 64 20 53 65 72 76 69 63 65 49 64 0d   Guid ServiceId.
eb70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb90: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 65 72  get { return ser
eba0: 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  viceId; }..     
ebb0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
ebc0: 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 61 6c   serviceId = val
ebd0: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
ebe0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ebf0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ec00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec30: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ec40: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
ec50: 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49 64  uid dataSourceId
ec60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
ec70: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 53  ublic Guid DataS
ec80: 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20  ourceId..       
ec90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
eca0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
ecb0: 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 65 49  turn dataSourceI
ecc0: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
ecd0: 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74 61        set { data
ece0: 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c 75 65  SourceId = value
ecf0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ed00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ed10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ed20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ed60: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
ed70: 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  d dataProviderId
ed80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
ed90: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 50  ublic Guid DataP
eda0: 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 20 20  roviderId..     
edb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
edc0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
edd0: 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f 76 69  return dataProvi
ede0: 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  derId; }..      
edf0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
ee00: 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d  dataProviderId =
ee10: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
ee20: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ee30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ee40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ee80: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ee90: 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 54 65  te Guid adoNetTe
eea0: 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20 20  chnologyId;..   
eeb0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
eec0: 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 68 6e  Guid AdoNetTechn
eed0: 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 20 20  ologyId..       
eee0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
eef0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
ef00: 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 68 6e  turn adoNetTechn
ef10: 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 20 20  ologyId; }..    
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
ef30: 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  { adoNetTechnolo
ef40: 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  gyId = value; }.
ef50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ef60: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
ef70: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
ef80: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
ef90: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
efa0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
efb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efe0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
eff0: 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66      #region Conf
f000: 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73 0d  iguration Class.
f010: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
f020: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f   sealed class Co
f030: 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20  nfiguration..   
f040: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f050: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
f060: 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  ate Constants.. 
f070: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f080: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53 77  te const char Sw
f090: 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20 20  itch = '-';..   
f0a0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f0b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74 53   const char AltS
f0c0: 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a  witch = '/';....
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f120: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
f130: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
f140: 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53 77  adonly char[] Sw
f150: 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a 20  itchChars = {.. 
f160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
f170: 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63 68  witch, AltSwitch
f180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b  ..            };
f190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
f1a0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
f1b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
f200: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
f210: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
f220: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
f230: 20 20 20 20 20 70 72 69 76 61 74 65 20 43 6f 6e       private Con
f240: 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20  figuration(..   
f250: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
f260: 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d  embly assembly,.
f270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f280: 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e   string logFileN
f290: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
f2a0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
f2b0: 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
f2c0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
f2d0: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  coreFileName,.. 
f2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f2f0: 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
f300: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
f310: 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69       string desi
f320: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  gnerFileName,.. 
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f340: 74 72 69 6e 67 20 72 65 67 69 73 74 72 79 56 65  tring registryVe
f350: 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
f360: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
f370: 6f 6e 66 69 67 56 65 72 73 69 6f 6e 2c 0d 0a 20  onfigVersion,.. 
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f390: 74 72 69 6e 67 20 76 73 56 65 72 73 69 6f 6e 53  tring vsVersionS
f3a0: 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
f3b0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
f3c0: 65 62 75 67 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  ebugFormat,..   
f3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
f3e0: 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 2c  ing traceFormat,
f3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f400: 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69    InstallFlags i
f410: 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20  nstallFlags,..  
f420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
f430: 61 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75  acePriority debu
f440: 67 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  gPriority,..    
f450: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
f460: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
f470: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
f480: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
f490: 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
f4a0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e           bool in
f4b0: 73 74 61 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20  stall,..        
f4c0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
f4d0: 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
f4e0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74       bool noRunt
f4f0: 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
f500: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f510: 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20 20  l noDesktop,..  
f520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f530: 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20  ol noCompact,.. 
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f550: 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a  ool noNetFx20,..
f560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f570: 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35 2c 0d  bool noNetFx35,.
f580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f590: 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c   bool noNetFx40,
f5a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f5b0: 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35    bool noNetFx45
f5c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f5d0: 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35     bool noVs2005
f5e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f5f0: 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38     bool noVs2008
f600: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f610: 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30     bool noVs2010
f620: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f630: 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32     bool noVs2012
f640: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f650: 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c     bool noTrace,
f660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f670: 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65    bool noConsole
f680: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f690: 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a     bool noLog,..
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6b0: 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
f6c0: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
f6d0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
f6e0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
f6f0: 20 20 20 20 62 6f 6f 6c 20 64 65 62 75 67 2c 0d      bool debug,.
f700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f710: 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f730: 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20  bool confirm..  
f740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
f750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f770: 74 68 69 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20  this.assembly = 
f780: 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20  assembly;..     
f790: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f7a0: 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f  logFileName = lo
f7b0: 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  gFileName;..    
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f7d0: 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72  .directory = dir
f7e0: 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
f7f0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f           this.co
f800: 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72  reFileName = cor
f810: 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  eFileName;..    
f820: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f830: 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20  .linqFileName = 
f840: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  linqFileName;.. 
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f860: 68 69 73 2e 64 65 73 69 67 6e 65 72 46 69 6c 65  his.designerFile
f870: 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 46  Name = designerF
f880: 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
f890: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72            this.r
f8a0: 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d  egistryVersion =
f8b0: 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
f8c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f8d0: 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 67 56 65     this.configVe
f8e0: 72 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65  rsion = configVe
f8f0: 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
f900: 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 73 56          this.vsV
f910: 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76  ersionSuffix = v
f920: 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d  sVersionSuffix;.
f930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f940: 20 74 68 69 73 2e 64 65 62 75 67 46 6f 72 6d 61   this.debugForma
f950: 74 20 3d 20 64 65 62 75 67 46 6f 72 6d 61 74 3b  t = debugFormat;
f960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f970: 20 20 74 68 69 73 2e 74 72 61 63 65 46 6f 72 6d    this.traceForm
f980: 61 74 20 3d 20 74 72 61 63 65 46 6f 72 6d 61 74  at = traceFormat
f990: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f9a0: 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 46     this.installF
f9b0: 6c 61 67 73 20 3d 20 69 6e 73 74 61 6c 6c 46 6c  lags = installFl
f9c0: 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ags;..          
f9d0: 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67        this.debug
f9e0: 50 72 69 6f 72 69 74 79 20 3d 20 64 65 62 75 67  Priority = debug
f9f0: 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
fa00: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fa10: 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
fa20: 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a  tracePriority;..
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa40: 74 68 69 73 2e 70 65 72 55 73 65 72 20 3d 20 70  this.perUser = p
fa50: 65 72 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20  erUser;..       
fa60: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e           this.in
fa70: 73 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c 6c 3b  stall = install;
fa80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fa90: 20 20 74 68 69 73 2e 77 6f 77 36 34 20 3d 20 77    this.wow64 = w
faa0: 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20  ow64;..         
fab0: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 52 75         this.noRu
fac0: 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 6e  ntimeVersion = n
fad0: 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b  oRuntimeVersion;
fae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
faf0: 20 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74 6f 70    this.noDesktop
fb00: 20 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20   = noDesktop;.. 
fb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fb20: 68 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20  his.noCompact = 
fb30: 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20  noCompact;..    
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fb50: 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e 6f 4e  .noNetFx20 = noN
fb60: 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20  etFx20;..       
fb70: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
fb80: 4e 65 74 46 78 33 35 20 3d 20 6e 6f 4e 65 74 46  NetFx35 = noNetF
fb90: 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  x35;..          
fba0: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74        this.noNet
fbb0: 46 78 34 30 20 3d 20 6e 6f 4e 65 74 46 78 34 30  Fx40 = noNetFx40
fbc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fbd0: 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34     this.noNetFx4
fbe0: 35 20 3d 20 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a  5 = noNetFx45;..
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc00: 74 68 69 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20  this.noVs2005 = 
fc10: 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20  noVs2005;..     
fc20: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fc30: 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73 32  noVs2008 = noVs2
fc40: 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  008;..          
fc50: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32        this.noVs2
fc60: 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d  010 = noVs2010;.
fc70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fc80: 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d   this.noVs2012 =
fc90: 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20   noVs2012;..    
fca0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fcb0: 2e 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61  .noTrace = noTra
fcc0: 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce;..           
fcd0: 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73       this.noCons
fce0: 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b  ole = noConsole;
fcf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd00: 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e    this.noLog = n
fd10: 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  oLog;..         
fd20: 20 20 20 20 20 20 20 74 68 69 73 2e 74 68 72 6f         this.thro
fd30: 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74 68 72  wOnMissing = thr
fd40: 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20  owOnMissing;..  
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fd60: 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74  is.whatIf = what
fd70: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
fd80: 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 20       this.debug 
fd90: 3d 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20  = debug;..      
fda0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76            this.v
fdb0: 65 72 62 6f 73 65 20 3d 20 76 65 72 62 6f 73 65  erbose = verbose
fdc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fdd0: 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20     this.confirm 
fde0: 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20  = confirm;..    
fdf0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
fe00: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
fe10: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
fe20: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
fe30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe60: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
fe70: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
fe80: 61 74 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f  ate Static Metho
fe90: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
fea0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
feb0: 6f 69 64 20 47 65 74 44 65 66 61 75 6c 74 46 69  oid GetDefaultFi
fec0: 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  leNames(..      
fed0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
fee0: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d  ring directory,.
fef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff00: 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 72 65   ref string core
ff10: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
ff20: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
ff30: 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
ff40: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
ff50: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
ff60: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
ff70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ff80: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
ff90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ffa0: 20 20 20 20 69 66 20 28 74 68 69 73 41 73 73 65      if (thisAsse
ffb0: 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly == null).. 
ffc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffd0: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
fff0: 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47  rectory = Path.G
10000 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28  etDirectoryName(
10010 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63  thisAssembly.Loc
10020 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  ation);....     
10030 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
10040 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
10050 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d  pty(directory)).
10060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10070 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
10080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10090 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50  coreFileName = P
100a0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
100b0 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
100c0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
100d0 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61  aller.CoreFileNa
100e0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
100f0 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65          linqFile
10100 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
10110 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ine(directory,..
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10130 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69      Installer.Li
10140 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  nqFileName);....
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10160 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
10170 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
10180 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101a0 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e  Installer.Design
101b0 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20  erFileName);..  
101c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
101d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
101e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
10230 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
10240 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a  l CheckOption(..
10250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10260 72 65 66 20 73 74 72 69 6e 67 20 61 72 67 0d 0a  ref string arg..
10270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10280 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
10290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
102a0 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20    string result 
102b0 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20  = arg;....      
102c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
102d0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
102e0 70 74 79 28 72 65 73 75 6c 74 29 29 0d 0a 20 20  pty(result))..  
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10310 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
10320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10330 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c  NOTE: Remove all
10340 20 6c 65 61 64 69 6e 67 20 73 77 69 74 63 68 20   leading switch 
10350 63 68 61 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  chars...        
10360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
10370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10380 20 20 20 20 72 65 73 75 6c 74 20 3d 20 72 65 73      result = res
10390 75 6c 74 2e 54 72 69 6d 53 74 61 72 74 28 53 77  ult.TrimStart(Sw
103a0 69 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20  itchChars);.... 
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103c0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
103d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
103e0 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68 61  TE: How many cha
103f0 72 73 20 77 65 72 65 20 72 65 6d 6f 76 65 64 3f  rs were removed?
10400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10410 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
10420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
10430 74 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65  t count = arg.Le
10440 6e 67 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65  ngth - result.Le
10450 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ngth;....       
10460 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
10470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10480 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61       // NOTE: Wa
10490 73 20 74 68 65 72 65 20 61 74 20 6c 65 61 73 74  s there at least
104a0 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20 20   one?..         
104b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 30     if (count > 0
104e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
104f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10530 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61   NOTE: Ok, repla
10540 63 65 20 74 68 65 69 72 20 6f 72 69 67 69 6e 61  ce their origina
10550 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l..             
10560 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
10570 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20      argument... 
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10590 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
105a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105b0 20 20 20 61 72 67 20 3d 20 72 65 73 75 6c 74 3b     arg = result;
105c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
105d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105f0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
10600 20 59 65 73 2c 20 74 68 69 73 20 69 73 20 61 20   Yes, this is a 
10610 73 77 69 74 63 68 2e 0d 0a 20 20 20 20 20 20 20  switch...       
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
10650 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
10660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
10670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10680 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
10690 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
106a0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
106b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
106c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
106d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10700 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
10710 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
10720 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f  atic bool MatchO
10730 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
10740 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 61          string a
10750 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rg,..           
10760 20 20 20 20 20 73 74 72 69 6e 67 20 6f 70 74 69       string opti
10770 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
10780 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
10790 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
107a0 20 20 20 20 20 20 69 66 20 28 28 61 72 67 20 3d        if ((arg =
107b0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69  = null) || (opti
107c0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  on == null))..  
107d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
107f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10800 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
10810 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c 20 30 2c  .Compare(arg, 0,
10820 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20   option, 0,..   
10830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10840 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72   arg.Length, Str
10850 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
10860 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
10870 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20   == 0;..        
10880 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10890 20 20 20 20 20 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
108e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
108f0 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72  static bool? Par
10900 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20  seBoolean(..    
10910 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
10920 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20 20  ng text..       
10930 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
10940 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10950 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
10960 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
10970 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20  mpty(text))..   
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109a0 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d      bool value;.
109b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
109c0 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e         if (bool.
109d0 54 72 79 50 61 72 73 65 28 74 65 78 74 2c 20 6f  TryParse(text, o
109e0 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20  ut value))..    
109f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a00 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
10a10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10a20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10a30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
10a40 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
10a50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
10a60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
10a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10aa0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
10ab0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
10ac0 61 74 69 63 20 6f 62 6a 65 63 74 20 50 61 72 73  atic object Pars
10ad0 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20  eEnum(..        
10ae0 20 20 20 20 20 20 20 20 54 79 70 65 20 65 6e 75          Type enu
10af0 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20 20 20 20  mType,..        
10b00 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
10b10 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ext,..          
10b20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73        bool noCas
10b30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
10b40 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
10b50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10b60 20 20 20 20 20 69 66 20 28 28 65 6e 75 6d 54 79       if ((enumTy
10b70 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  pe == null) || !
10b80 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29  enumType.IsEnum)
10b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10ba0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
10bb0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
10bc0 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
10bd0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
10be0 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20  text))..        
10bf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10c10 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
10c20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c40 20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50     return Enum.P
10c50 61 72 73 65 28 65 6e 75 6d 54 79 70 65 2c 20 74  arse(enumType, t
10c60 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20  ext, noCase);.. 
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10c90 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
10ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10cb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cd0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cf0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10d00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
10d10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10d20 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
10d30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10d40 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
10d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
10d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10da0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
10db0 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
10dc0 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d   Static Methods.
10dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
10de0 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e 66 69  lic static Confi
10df0 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74 65 44  guration CreateD
10e00 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20 20 20  efault()..      
10e10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10e20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10e30 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c  directory = null
10e40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10e50 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69     string coreFi
10e60 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e80 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e  string linqFileN
10e90 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ame = null;..   
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
10eb0 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ing designerFile
10ec0 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  Name = null;....
10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ee0 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61  GetDefaultFileNa
10ef0 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mes(..          
10f00 20 20 20 20 20 20 20 20 20 20 72 65 66 20 64 69            ref di
10f10 72 65 63 74 6f 72 79 2c 20 72 65 66 20 63 6f 72  rectory, ref cor
10f20 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c  eFileName, ref l
10f30 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  inqFileName,..  
10f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f50 20 20 72 65 66 20 64 65 73 69 67 6e 65 72 46 69    ref designerFi
10f60 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
10f70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10f80 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67 75 72 61  rn new Configura
10f90 74 69 6f 6e 28 74 68 69 73 41 73 73 65 6d 62 6c  tion(thisAssembl
10fa0 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f  y, null, directo
10fb0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
10fc0 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c           coreFil
10fd0 65 4e 61 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e  eName, linqFileN
10fe0 61 6d 65 2c 20 64 65 73 69 67 6e 65 72 46 69 6c  ame, designerFil
10ff0 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  eName, null, nul
11000 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
11010 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 54 72          null, Tr
11020 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d  aceOps.DebugForm
11030 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 54 72 61  at, TraceOps.Tra
11040 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ceFormat,..     
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
11060 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61  nstallFlags.Defa
11070 75 6c 74 2c 20 54 72 61 63 65 50 72 69 6f 72 69  ult, TracePriori
11080 74 79 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20  ty.Default,..   
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44   TracePriority.D
110b0 65 66 61 75 6c 74 2c 20 66 61 6c 73 65 2c 20 74  efault, false, t
110c0 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  rue, false, fals
110d0 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20  e, false,..     
110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
110f0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
11100 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
11110 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
11120 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  false,..        
11130 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
11140 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
11150 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 74 72   false, true, tr
11160 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  ue, false, false
11170 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11180 20 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d 0a         false);..
11190 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
111a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
111b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11200 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
11210 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
11220 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
11230 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
11240 74 61 74 69 63 20 62 6f 6f 6c 20 46 72 6f 6d 41  tatic bool FromA
11250 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
11260 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
11270 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs,..          
11280 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63        bool stric
11290 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
112a0 20 20 20 20 72 65 66 20 43 6f 6e 66 69 67 75 72      ref Configur
112b0 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
112c0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
112d0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
112e0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
112f0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
11300 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11310 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11340 20 20 20 20 20 20 69 66 20 28 61 72 67 73 20 3d        if (args =
11350 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11370 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d   return true;...
11380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11390 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
113a0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ration == null).
113b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
113c0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
113d0 72 61 74 69 6f 6e 20 3d 20 43 6f 6e 66 69 67 75  ration = Configu
113e0 72 61 74 69 6f 6e 2e 43 72 65 61 74 65 44 65 66  ration.CreateDef
113f0 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ault();....     
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11410 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 67 73  nt length = args
11420 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
11450 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67   0; index < leng
11460 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  th; index++)..  
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11480 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
114a0 69 6e 67 20 61 72 67 20 3d 20 61 72 67 73 5b 69  ing arg = args[i
114b0 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex];....      
114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114d0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
114f0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6e 79 20   NOTE: Skip any 
11500 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 69 73  argument that is
11510 20 6e 75 6c 6c 20 28 3f 29 20 6f 72 20 61 6e 20   null (?) or an 
11520 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 20  empty..         
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11540 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d  /       string..
11550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11560 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11580 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
11590 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 61 72  IsNullOrEmpty(ar
115a0 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115c0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115e0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11600 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61 72    // NOTE: We ar
11610 65 20 67 6f 69 6e 67 20 74 6f 20 6d 6f 64 69 66  e going to modif
11620 79 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 61  y the original a
11630 72 67 75 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  rgument..       
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11650 20 2f 2f 20 20 20 20 20 20 20 62 79 20 72 65 6d   //       by rem
11660 6f 76 69 6e 67 20 61 6e 79 20 6c 65 61 64 69 6e  oving any leadin
11670 67 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74  g option charact
11680 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ers;..          
11690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
116a0 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65         therefore
116b0 2c 20 77 65 20 75 73 65 20 61 20 6e 65 77 20 73  , we use a new s
116c0 74 72 69 6e 67 20 74 6f 20 68 6f 6c 64 20 74 68  tring to hold th
116d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
116e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
116f0 20 20 20 20 6d 6f 64 69 66 69 65 64 20 61 72 67      modified arg
11700 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ument...        
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11720 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11730 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
11740 6e 67 20 6e 65 77 41 72 67 20 3d 20 61 72 67 3b  ng newArg = arg;
11750 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11780 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
11790 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74   All the support
117a0 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ed command line 
117b0 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20  options must..  
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
117e0 65 67 69 6e 20 77 69 74 68 20 61 6e 20 6f 70 74  egin with an opt
117f0 69 6f 6e 20 63 68 61 72 61 63 74 65 72 20 28 65  ion character (e
11800 2e 67 2e 20 61 20 6d 69 6e 75 73 0d 0a 20 20 20  .g. a minus..   
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11820 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 72       //       or
11830 20 66 6f 72 77 61 72 64 20 73 6c 61 73 68 29 3b   forward slash);
11840 20 61 74 74 65 6d 70 74 20 74 6f 20 76 61 6c 69   attempt to vali
11850 64 61 74 65 20 74 68 61 74 0d 0a 20 20 20 20 20  date that..     
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11870 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 6f 77 2e     //       now.
11880 20 20 49 66 20 77 65 20 66 61 69 6c 20 69 6e 20    If we fail in 
11890 73 74 72 69 63 74 20 6d 6f 64 65 2c 20 77 65 20  strict mode, we 
118a0 61 72 65 20 64 6f 6e 65 3b 0d 0a 20 20 20 20 20  are done;..     
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118c0 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68 65     //       othe
118d0 72 77 69 73 65 2c 20 6a 75 73 74 20 73 6b 69 70  rwise, just skip
118e0 20 74 68 69 73 20 61 72 67 75 6d 65 6e 74 20 61   this argument a
118f0 6e 64 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20  nd advance..    
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11910 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
11920 74 68 65 20 6e 65 78 74 20 6f 6e 65 2e 0d 0a 20  the next one... 
11930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11940 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 20 20 20 69 66 20 28 21 43 68 65 63 6b 4f 70 74     if (!CheckOpt
11970 69 6f 6e 28 72 65 66 20 6e 65 77 41 72 67 29 29  ion(ref newArg))
11980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11990 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119b0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
119c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
119d0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119f0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
11a00 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
11a10 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
11a50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
11a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
11a80 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d  Unsupported comm
11a90 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e  and line argumen
11aa0 74 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  t: {0}",..      
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ac0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
11ad0 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63  play(arg)), trac
11ae0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
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 69 66 20 28 73             if (s
11b10 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 20 72 65 74 75 72 6e 20 66          return f
11b40 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b60 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ba0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bc0 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68   // NOTE: All th
11bd0 65 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d  e supported comm
11be0 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73  and line options
11bf0 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20   must..         
11c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11c10 2f 20 20 20 20 20 20 20 68 61 76 65 20 61 20 76  /       have a v
11c20 61 6c 75 65 3b 20 74 68 65 72 65 66 6f 72 65 2c  alue; therefore,
11c30 20 61 74 74 65 6d 70 74 20 74 6f 20 61 64 76 61   attempt to adva
11c40 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nce..           
11c50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11c60 20 20 20 20 20 20 74 6f 20 69 74 20 6e 6f 77 2e        to it now.
11c70 20 20 49 66 20 77 65 20 66 61 69 6c 2c 20 77 65    If we fail, we
11c80 20 61 72 65 20 64 6f 6e 65 2e 0d 0a 20 20 20 20   are done...    
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ca0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cc0 69 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  index++;....    
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ce0 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d      if (index >=
11cf0 20 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20   length)..      
11d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d30 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
11d40 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
11d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d70 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
11d80 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
11d90 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11db0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
11dc0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
11dd0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
11de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11df0 20 20 20 20 20 20 20 22 4d 69 73 73 69 6e 67 20         "Missing 
11e00 76 61 6c 75 65 20 66 6f 72 20 6f 70 74 69 6f 6e  value for option
11e10 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
11e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e30 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
11e40 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
11e50 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
11e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
11e80 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
11e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ea0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
11eb0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ed0 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ef0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f10 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11f20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11f30 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 74  NOTE: Grab the t
11f40 65 78 74 75 61 6c 20 76 61 6c 75 65 20 6f 66 20  extual value of 
11f50 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  this command lin
11f60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
11f70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11f80 20 20 20 20 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20      option...   
11f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fa0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 73 74 72 69 6e 67 20 74 65 78 74 20 3d 20 61   string text = a
11fd0 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  rgs[index];.... 
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ff0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
12000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12010 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 67 75     // NOTE: Figu
12020 72 65 20 6f 75 74 20 77 68 69 63 68 20 63 6f 6d  re out which com
12030 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
12040 20 74 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20   this is..      
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12060 20 20 2f 2f 20 20 20 20 20 20 20 28 62 61 73 65    //       (base
12070 64 20 6f 6e 20 61 20 70 61 72 74 69 61 6c 20 6e  d on a partial n
12080 61 6d 65 20 6d 61 74 63 68 29 20 61 6e 64 20 74  ame match) and t
12090 68 65 6e 20 74 72 79 0d 0a 20 20 20 20 20 20 20  hen try..       
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120b0 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 6e 74   //       to int
120c0 65 72 70 72 65 74 20 74 68 65 20 74 65 78 74 75  erpret the textu
120d0 61 6c 20 76 61 6c 75 65 20 61 73 20 74 68 65 20  al value as the 
120e0 63 6f 72 72 65 63 74 0d 0a 20 20 20 20 20 20 20  correct..       
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12100 20 2f 2f 20 20 20 20 20 20 20 74 79 70 65 2e 0d   //       type..
12110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12120 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12140 20 20 20 20 20 69 66 20 28 4d 61 74 63 68 4f 70       if (MatchOp
12150 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f  tion(newArg, "co
12160 6e 66 69 67 56 65 72 73 69 6f 6e 22 29 29 0d 0a  nfigVersion"))..
12170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12180 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121a0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
121b0 74 69 6f 6e 2e 63 6f 6e 66 69 67 56 65 72 73 69  tion.configVersi
121c0 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  on = text;..    
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
121f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
12200 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
12210 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e  ion(newArg, "con
12220 66 69 72 6d 22 29 29 0d 0a 20 20 20 20 20 20 20  firm"))..       
12230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12240 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12260 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
12270 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
12280 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122a0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
122b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122f0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
12300 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
12310 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12330 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
12340 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
12350 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
12360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12380 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12390 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
123a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
123b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123c0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
123d0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
123e0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
123f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12410 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
12420 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
12430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
12460 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
12470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12480 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
12490 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
124c0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124e0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
124f0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12510 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
12520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12530 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12540 2e 63 6f 6e 66 69 72 6d 20 3d 20 28 62 6f 6f 6c  .confirm = (bool
12550 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12570 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
12580 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
12590 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
125a0 28 6e 65 77 41 72 67 2c 20 22 63 6f 72 65 46 69  (newArg, "coreFi
125b0 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20  leName"))..     
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
125e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125f0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
12600 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 74  coreFileName = t
12610 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
12630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12640 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
12650 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
12660 77 41 72 67 2c 20 22 64 65 62 75 67 22 29 29 0d  wArg, "debug")).
12670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12680 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
126b0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
126c0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126e0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
126f0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
12700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12710 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12730 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
12740 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
12750 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
12760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
12790 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
127a0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
127b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127c0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
127d0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
127e0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
127f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
12810 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
12820 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
12830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
12860 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
12870 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
128a0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
128b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12900 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
12910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 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 20 20 20 20 63 6f 6e 66 69             confi
12980 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 20 3d  guration.debug =
12990 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129d0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
129e0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
129f0 64 65 62 75 67 46 6f 72 6d 61 74 22 29 29 0d 0a  debugFormat"))..
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a30 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12a40 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74  tion.debugFormat
12a50 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a70 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
12a80 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 63 6f 6e  ebugFormat = con
12a90 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
12aa0 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ac0 20 7d 0d 0a 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 65 6c 73 65              else
12ae0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
12af0 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 50  (newArg, "debugP
12b00 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20 20 20  riority"))..    
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b40 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
12b50 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20  = ParseEnum(..  
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 20 20 20 20 20 74 79                ty
12b80 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69  peof(TracePriori
12b90 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29  ty), text, true)
12ba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bc0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
12bd0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c10 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
12c20 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
12c30 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
12c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c50 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
12c60 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
12c70 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ca0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12cb0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
12cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ce0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
12cf0 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  0} value: {1}",.
12d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
12d30 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
12d40 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
12d70 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
12d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12da0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
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 20 20 20 20                  
12dd0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
12de0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
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 63 6f 6e 66 69             confi
12e50 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72  guration.debugPr
12e60 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63 65 50  iority = (TraceP
12e70 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a  riority)value;..
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
12ea0 65 4f 70 73 2e 44 65 62 75 67 50 72 69 6f 72 69  eOps.DebugPriori
12eb0 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  ty = configurati
12ec0 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79  on.debugPriority
12ed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12ee0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f00 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
12f10 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
12f20 67 2c 20 22 64 65 73 69 67 6e 65 72 46 69 6c 65  g, "designerFile
12f30 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
12f80 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
12f90 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
12fc0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
12fd0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12fe0 6e 65 77 41 72 67 2c 20 22 64 69 72 65 63 74 6f  newArg, "directo
12ff0 72 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ry"))..         
13000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13030 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65  nfiguration.dire
13040 63 74 6f 72 79 20 3d 20 74 65 78 74 3b 0d 0a 0d  ctory = text;...
13050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
13070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13080 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
13090 4e 4f 54 45 3a 20 2a 53 50 45 43 49 41 4c 2a 20  NOTE: *SPECIAL* 
130a0 4d 75 73 74 20 72 65 66 72 65 73 68 20 74 68 65  Must refresh the
130b0 20 66 69 6c 65 20 6e 61 6d 65 73 0d 0a 20 20 20   file names..   
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130d0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
130e0 20 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74    here because t
130f0 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 69  he underlying di
13100 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20  rectory..       
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13120 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61       //       ha
13130 73 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20  s changed...    
13140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13150 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
13180 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f  oreFileName = co
13190 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65  nfiguration.core
131a0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
131d0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
131e0 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  ty(coreFileName)
131f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20     coreFileName 
13220 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
13230 6d 65 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  me(coreFileName)
13240 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13260 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
13270 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69  llOrEmpty(coreFi
13280 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
13290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132a0 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69            coreFi
132b0 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c  leName = Install
132c0 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  er.CoreFileName;
132d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
132e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
13300 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  reFileName = Pat
13310 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20  h.Combine(..    
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13330 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
13340 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74  iguration.direct
13350 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65 4e 61 6d  ory, coreFileNam
13360 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13380 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69     string linqFi
13390 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75  leName = configu
133a0 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e  ration.linqFileN
133b0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
133e0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69  IsNullOrEmpty(li
133f0 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  nqFileName))..  
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 6c 69                li
13420 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  nqFileName = Pat
13430 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 6c 69  h.GetFileName(li
13440 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  nqFileName);....
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 20 20 69 66 20 28              if (
13470 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
13480 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d  mpty(linqFileNam
13490 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134b0 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d       linqFileNam
134c0 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69  e = Installer.Li
134d0 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  nqFileName;.... 
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 63 6f 6e 66 69             confi
13500 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c  guration.linqFil
13510 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
13520 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  bine(..         
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 64 69 72 65 63 74 6f 72 79 2c 20  tion.directory, 
13560 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  linqFileName);..
13570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
13590 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c  ring designerFil
135a0 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72  eName = configur
135b0 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69  ation.designerFi
135c0 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
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 69 66 20 28 21 53 74 72 69         if (!Stri
135f0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
13600 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  (designerFileNam
13610 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c       designerFil
13640 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
13650 46 69 6c 65 4e 61 6d 65 28 64 65 73 69 67 6e 65  FileName(designe
13660 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  rFileName);.... 
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13680 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
13690 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
136a0 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65  pty(designerFile
136b0 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136d0 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72          designer
136e0 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61  FileName = Insta
136f0 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c  ller.DesignerFil
13700 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13720 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13730 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65  ion.designerFile
13740 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
13750 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ine(..          
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13780 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 64  ion.directory, d
13790 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
137a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
137b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137d0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
137e0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
137f0 67 2c 20 22 69 6e 73 74 61 6c 6c 22 29 29 0d 0a  g, "install"))..
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 7b 0d 0a 20 20 20 20 20          {..     
13820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13830 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
13840 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
13850 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13870 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
13880 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
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 7b 0d 0a 20 20 20 20 20          {..     
138b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
138d0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
138e0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
138f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13910 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
13920 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
13930 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
13960 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
13970 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
139a0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
139b0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
139f0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
13a00 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
13a30 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a60 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
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 20 20 20 20 20 20                  
13a90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
13aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
13b10 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20  uration.install 
13b20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b60 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
13b70 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
13b80 22 69 6e 73 74 61 6c 6c 46 6c 61 67 73 22 29 29  "installFlags"))
13b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ba0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bc0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
13bd0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75  value = ParseEnu
13be0 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m(..            
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 20 20 74 79 70 65 6f 66 28 49 6e 73 74 61      typeof(Insta
13c10 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78 74 2c 20  llFlags), text, 
13c20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
13c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c40 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
13c50 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
13ca0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
13cb0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
13ce0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
13cf0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
13d00 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
13d30 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
13d40 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d60 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
13d70 6c 69 64 20 69 6e 73 74 61 6c 6c 20 66 6c 61 67  lid install flag
13d80 73 20 76 61 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a  s value: {0}",..
13d90 20 20 20 20 20 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 46 6f 72 44 69 73 70 6c 61 79 28 74      ForDisplay(t
13dc0 65 78 74 29 29 2c 20 74 72 61 63 65 43 61 74 65  ext)), traceCate
13dd0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13df0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
13e00 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
13e30 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
13e60 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ea0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
13eb0 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d  n.installFlags =
13ec0 20 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 76   (InstallFlags)v
13ed0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f00 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
13f10 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
13f20 65 77 41 72 67 2c 20 22 6c 69 6e 71 46 69 6c 65  ewArg, "linqFile
13f30 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69  configuration.li
13f80 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  nqFileName = tex
13f90 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13fd0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
13fe0 72 67 2c 20 22 6c 6f 67 46 69 6c 65 4e 61 6d 65  rg, "logFileName
13ff0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14020 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14030 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
14040 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 20 20 20 20 20 20 20 7d 0d 0a 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 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
14090 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
140a0 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d 0a 20 20  noCompact"))..  
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140e0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
140f0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
14100 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
14130 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
14180 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
14190 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
141c0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
141d0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
141e0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
141f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14200 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
14210 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
14220 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14240 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
14250 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
14260 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14290 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
142a0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
142b0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
142e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
14310 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
14340 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
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 7d 0d 0a 0d 0a 20 20 20 20         }....    
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143b0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
143c0 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 74 20  ation.noCompact 
143d0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14410 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
14420 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
14430 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20  "noConsole")).. 
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14470 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
14480 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
14490 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144b0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
144c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14500 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
14510 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
14520 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
14550 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
14560 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
14570 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
14580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14590 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
145a0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
145b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
145c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145d0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
145e0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
145f0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14620 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
14630 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
14640 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14660 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14670 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
146a0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
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 20 20                  
146d0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
146e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14700 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14740 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14750 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65  ration.noConsole
14760 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
14770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14780 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
147b0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
147c0 20 22 6e 6f 44 65 73 6b 74 6f 70 22 29 29 0d 0a   "noDesktop"))..
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14800 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
14810 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
14820 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
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 69 66 20 28 76 61 6c 75          if (valu
14850 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14890 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
148a0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
148b0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148e0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
148f0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
14900 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14920 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14930 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
14940 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
14970 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
14980 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149b0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
149c0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
149d0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14a00 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a30 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a60 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
14a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a90 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ad0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
14ae0 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 73 6b 74 6f  uration.noDeskto
14af0 70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  p = (bool)value;
14b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14b10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
14b40 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
14b50 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d 0a 20 20 20  , "noLog"))..   
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b70 20 20 20 20 20 7b 0d 0a 20 20 20 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
14ba0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
14bb0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bd0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
14be0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
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 65 72 72 6f 72 20 3d 20          error = 
14c30 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
14c40 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
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 54 72 61               Tra
14c70 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
14c80 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
14c90 2c 0d 0a 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 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
14cc0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
14cd0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
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 22 49 6e 76 61 6c            "Inval
14d00 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
14d10 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d40 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
14d50 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
14d60 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14d90 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
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 20 20 20 20 69 66 20               if 
14dc0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
14df0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
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 20 20 20 20 20 20 20 63                 c
14e20 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
14e70 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f  tion.noLog = (bo
14e80 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
14e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ea0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
14eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
14ec0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
14ed0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
14ee0 74 46 78 32 30 22 29 29 0d 0a 20 20 20 20 20 20  tFx20"))..      
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
14f30 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
14f40 29 3b 0d 0a 0d 0a 20 20 20 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
14f70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f90 20 20 7b 0d 0a 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 20 20                  
14fb0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
14fc0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
14fd0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ff0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
15000 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
15010 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
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 20 20 20 20 20                  
15040 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
15050 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
15060 28 0d 0a 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 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
15090 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
150a0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
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 20 20 20 20 46 6f                Fo
150d0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
150e0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
150f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15110 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
15120 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15140 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
15150 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15180 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
151b0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
151e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151f0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15200 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 28 62  n.noNetFx20 = (b
15210 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15230 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15250 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
15260 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e  ion(newArg, "noN
15270 65 74 46 78 33 35 22 29 29 0d 0a 20 20 20 20 20  etFx35"))..     
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15290 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152b0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
152c0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
152d0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
15300 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15320 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
15350 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
15360 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15380 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
15390 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
153a0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
153b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
153e0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
153f0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
15400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15410 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
15420 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
15430 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
15440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
15460 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
15470 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
15480 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
154b0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 20 20 20 69 66 20 28 73             if (s
154e0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
15510 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
15520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15540 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15560 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15580 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15590 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 28  on.noNetFx35 = (
155a0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
155f0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
15600 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20 20 20  NetFx40"))..    
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 20 20 7b 0d 0a 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 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
15650 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
15660 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
15670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15680 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
15690 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156d0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
156e0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
156f0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15710 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
15720 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
15730 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
15740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15760 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
15770 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
15780 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
15790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157a0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
157b0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
157c0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
157d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157f0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
15800 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
15810 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15830 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15840 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15860 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15870 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
158a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
158d0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
15920 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  ion.noNetFx40 = 
15930 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15970 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
15980 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
15990 6f 4e 65 74 46 78 34 35 22 29 29 0d 0a 20 20 20  oNetFx45"))..   
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 20 20 7b 0d 0a 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 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
159e0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
159f0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a10 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
15a20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
15a70 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
15a80 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
15ab0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
15ac0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
15ad0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15af0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
15b00 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
15b10 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b30 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
15b40 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
15b50 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
15b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
15b90 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
15ba0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
15bd0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15c00 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
15c30 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15c60 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
15c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
15cb0 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d  tion.noNetFx45 =
15cc0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
15d10 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
15d20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
15d30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
15d70 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
15d80 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
15d90 0a 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 20 20 20 69 66 20               if 
15db0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
15dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
15e10 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
15e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
15e50 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
15e60 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
15e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15e90 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
15ea0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ed0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
15ee0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
15ef0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f10 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
15f20 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
15f30 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
15f70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f90 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
15fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fc0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
15fd0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
15fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ff0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
16000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16040 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52  onfiguration.noR
16050 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
16060 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160a0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
160b0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
160c0 6f 54 72 61 63 65 22 29 29 0d 0a 20 20 20 20 20  oTrace"))..     
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
16110 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
16120 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
16150 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
16160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16170 20 20 20 7b 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 20 20                  
16190 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
161a0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
161b0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161d0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
161e0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
161f0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
16200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
16230 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
16240 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
16250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16260 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
16270 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
16280 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
162b0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
162c0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
162d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
16300 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16320 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
16330 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 20 20 20 20 20 72 65 74 75              retu
16360 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
16390 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
163c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163d0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
163e0 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d 20 28 62 6f  on.noTrace = (bo
163f0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
16430 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
16440 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73  on(newArg, "noVs
16450 32 30 30 35 22 29 29 0d 0a 20 20 20 20 20 20 20  2005"))..       
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16490 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
164a0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
164b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164d0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
164e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16500 20 7b 0d 0a 20 20 20 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 20                  
16520 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
16530 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
16540 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16560 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
16570 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
16580 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165b0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
165c0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
165d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
165e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165f0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
16600 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
16610 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
16640 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
16650 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
16660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16680 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
16690 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
166a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166b0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
166c0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 20 20 72 65 74 75 72 6e            return
166f0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
16700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16710 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
16720 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16760 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
16770 2e 6e 6f 56 73 32 30 30 35 20 3d 20 28 62 6f 6f  .noVs2005 = (boo
16780 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
167b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
167c0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
167d0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
167e0 30 30 38 22 29 29 0d 0a 20 20 20 20 20 20 20 20  008"))..        
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
16820 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
16830 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
16840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16860 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
16870 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 7b 0d 0a 20 20 20 20 20 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 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
168c0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
168d0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168f0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
16900 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
16910 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16940 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
16950 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
16960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16980 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
16990 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
169a0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169c0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
169d0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
169e0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
169f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a10 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
16a20 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a40 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
16a50 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
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 72 65 74 75 72 6e 20           return 
16a80 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
16a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16aa0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
16ab0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ad0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
16b00 6e 6f 56 73 32 30 30 38 20 3d 20 28 62 6f 6f 6c  noVs2008 = (bool
16b10 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16b40 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
16b50 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
16b60 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30  (newArg, "noVs20
16b70 31 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  10"))..         
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
16bb0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
16bc0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
16bd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16bf0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
16c00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16c20 0d 0a 20 20 20 20 20 20 20 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 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
16c50 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
16c60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
16c90 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
16ca0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
16ce0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
16d20 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
16d30 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
16d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d50 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
16d60 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
16d70 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16da0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
16db0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dd0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
16de0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
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 72 65 74 75 72 6e 20 66          return f
16e10 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e30 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
16e40 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
16e90 6f 56 73 32 30 31 30 20 3d 20 28 62 6f 6f 6c 29  oVs2010 = (bool)
16ea0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
16ed0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
16ee0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
16ef0 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31  newArg, "noVs201
16f00 32 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  2"))..          
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
16f40 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
16f50 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
16f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16f80 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
16f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16fb0 0a 20 20 20 20 20 20 20 20 20 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 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
16fe0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
16ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
17020 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
17030 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17060 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
17070 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
170b0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
170c0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170e0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
170f0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
17100 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17140 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17160 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
17170 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
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 72 65 74 75 72 6e 20 66 61         return fa
171a0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171c0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
171d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
171f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17210 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
17220 56 73 32 30 31 32 20 3d 20 28 62 6f 6f 6c 29 76  Vs2012 = (bool)v
17230 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17260 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
17270 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
17280 65 77 41 72 67 2c 20 22 70 65 72 55 73 65 72 22  ewArg, "perUser"
17290 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
172a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
172b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
172d0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
172e0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
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 20 20 20 69 66 20 28              if (
17310 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17330 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17360 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
17370 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173a0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
173b0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
173c0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
173f0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
17400 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
17440 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
17450 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
17460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17470 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
17480 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
17490 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
174d0 0d 0a 0d 0a 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 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
17500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17520 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
17530 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17550 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
17560 0a 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 20 7d 0d 0a               }..
17580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
175a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 70 65 72 55  nfiguration.perU
175b0 73 65 72 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ser = (bool)valu
175c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
175d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
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 65 6c 73 65 20 69 66 20 28         else if (
17600 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
17610 72 67 2c 20 22 72 65 67 69 73 74 72 79 56 65 72  rg, "registryVer
17620 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20  sion"))..       
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17660 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 72 65  configuration.re
17670 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20  gistryVersion = 
17680 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
176a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
176b0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
176c0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
176d0 65 77 41 72 67 2c 20 22 73 74 72 69 63 74 22 29  ewArg, "strict")
176e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
176f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
17720 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
17730 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17750 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
17760 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
177b0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
177c0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
17800 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
17810 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
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 74 72 61               tra
17840 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
17850 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17880 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
17890 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
178a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
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 46 6f 72 44 69 73 70 6c 61         ForDispla
178d0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
178e0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
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 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
17920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17940 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
17980 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
179d0 0a 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 2f 2f 0d               //.
179f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
17a10 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20  NOTE: Allow the 
17a20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67  command line arg
17a30 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 20 20 20 20  uments to..     
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
17a60 6f 76 65 72 72 69 64 65 20 74 68 65 20 22 73 74  override the "st
17a70 72 69 63 74 6e 65 73 73 22 20 73 65 74 74 69 6e  rictness" settin
17a80 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17aa0 2f 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 64  /       provided
17ab0 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   by our caller..
17ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
17ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
17b00 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ict = (bool)valu
17b10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17b20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b40 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
17b50 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
17b60 72 67 2c 20 22 74 68 72 6f 77 4f 6e 4d 69 73 73  rg, "throwOnMiss
17b70 69 6e 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ing"))..        
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
17bb0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
17bc0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
17bd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bf0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
17c00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c40 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
17c50 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
17c60 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c80 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
17c90 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
17ca0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cd0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
17ce0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
17cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
17d20 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
17d30 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
17d60 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
17d70 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
17d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
17db0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dd0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
17de0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
17e10 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
17e40 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e60 20 7d 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
17e90 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d  throwOnMissing =
17ea0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ec0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ee0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
17ef0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
17f00 74 72 61 63 65 46 6f 72 6d 61 74 22 29 29 0d 0a  traceFormat"))..
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f40 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
17f50 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74  tion.traceFormat
17f60 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f80 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
17f90 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 63 6f 6e  raceFormat = con
17fa0 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65  figuration.trace
17fb0 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
17ff0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
18000 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65 50  (newArg, "traceP
18010 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20 20 20  riority"))..    
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18030 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18050 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
18060 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20  = ParseEnum(..  
18070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
18090 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69  peof(TracePriori
180a0 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29  ty), text, true)
180b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180d0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
180e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18120 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
18130 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
18140 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
18150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18160 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
18170 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
18180 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181b0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
181c0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
181d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
181e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181f0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
18200 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  0} value: {1}",.
18210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
18240 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
18250 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
18280 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
18290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
182f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18310 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18330 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18350 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
18360 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72  guration.tracePr
18370 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63 65 50  iority = (TraceP
18380 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a  riority)value;..
18390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
183b0 65 4f 70 73 2e 54 72 61 63 65 50 72 69 6f 72 69  eOps.TracePriori
183c0 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  ty = configurati
183d0 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79  on.tracePriority
183e0 3b 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 7d 0d 0a 20 20             }..  
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18410 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
18420 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
18430 67 2c 20 22 76 65 72 62 6f 73 65 22 29 29 0d 0a  g, "verbose"))..
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18450 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18470 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
18480 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
18490 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184b0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
184c0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
18510 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
18520 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
18530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
18560 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
18570 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18590 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
185a0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
185b0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
185c0 20 20 20 20 20 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 22 49 6e               "In
185e0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
185f0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
18630 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
18640 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
18670 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186a0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18720 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18740 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
18750 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f 73 65 20  uration.verbose 
18760 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18780 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
18790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187a0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
187b0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
187c0 22 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78  "vsVersionSuffix
187d0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18800 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
18810 69 67 75 72 61 74 69 6f 6e 2e 76 73 56 65 72 73  iguration.vsVers
18820 69 6f 6e 53 75 66 66 69 78 20 3d 20 74 65 78 74  ionSuffix = text
18830 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18840 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
18870 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
18880 67 2c 20 22 77 68 61 74 49 66 22 29 29 0d 0a 20  g, "whatIf")).. 
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188c0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
188d0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
188e0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18900 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
18910 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
18960 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
18970 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
189a0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
189b0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
189c0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
189f0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
18a00 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
18a30 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
18a40 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
18a80 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
18a90 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
18ac0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18af0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
18b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b90 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
18ba0 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 20 3d 20  ration.whatIf = 
18bb0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
18c00 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77  ption(newArg, "w
18c10 6f 77 36 34 22 29 29 0d 0a 20 20 20 20 20 20 20  ow64"))..       
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c50 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
18c60 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
18c70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c90 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
18ca0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
18cf0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
18d00 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
18d30 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
18d40 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
18d80 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
18d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
18dc0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
18dd0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
18e00 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
18e10 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
18e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
18e50 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e70 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
18e80 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 72 65 74 75 72 6e            return
18eb0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
18ee0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
18f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
18f30 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f 6c 29 76  .wow64 = (bool)v
18f40 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18f70 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
18fc0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
18fd0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
19000 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
19010 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19040 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
19050 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e               "Un
19080 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e  supported comman
19090 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 7b  d line option: {
190a0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
190d0 28 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74  (arg)), traceCat
190e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 69 66 20 28 73 74 72 69 63         if (stric
19110 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19130 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19140 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19150 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
19180 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
19190 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
191a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
191b0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
191c0 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
191d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
191e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
191f0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
19200 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
19210 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
19220 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
19240 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
19250 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20  aceCallback, e, 
19260 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
19270 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19280 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
19290 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64 69 66 79  Failed to modify
192a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
192b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
192c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
192d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
192e0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
192f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
19300 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
19310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19340 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19350 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
19360 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
19370 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
19380 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
19390 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
193a0 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20  l Process(..    
193b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
193c0 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20  ng[] args,..    
193d0 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
193e0 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
193f0 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
19400 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
19410 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  trict,..        
19420 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
19430 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
19440 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
19450 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19460 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
19470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19480 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19490 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
194a0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
194b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
194c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194e0 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61     error = "Inva
194f0 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lid configuratio
19500 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19520 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19550 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
19560 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 63 6f  ly assembly = co
19570 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61 73 73 65  nfiguration.asse
19580 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mbly;....       
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
195a0 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c  (assembly == nul
195b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
195c0 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61     error = "Inva
195f0 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e 22 3b 0d  lid assembly.";.
19600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19610 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19620 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
19630 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19650 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
19660 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 29  uration.noTrace)
19670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19680 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
196b0 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20  ion.noLog &&..  
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196d0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
196e0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
196f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
19700 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
19750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19760 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 20     // NOTE: Use 
19770 74 68 65 20 64 65 66 61 75 6c 74 20 6c 6f 67 20  the default log 
19780 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20  file name...    
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
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 63 6f 6e 66 69 67 75 72          configur
197d0 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
197e0 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61  e = GetLogFileNa
197f0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 20 20 20 20 20 22 74 72 61 63 65 22 29 3b 0d 0a       "trace");..
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19850 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
19860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198a0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
198b0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e  figuration.noCon
198c0 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20  sole)..         
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
198e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
198f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
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 20 20 20 20 2f 2f                //
19920 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72 62 6f 73   NOTE: In verbos
19930 65 20 6d 6f 64 65 2c 20 64 65 62 75 67 20 6f 75  e mode, debug ou
19940 74 70 75 74 20 28 74 68 61 74 20 6d 65 65 74 73  tput (that meets
19950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19970 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e 66 69         the confi
19980 67 75 72 65 64 20 70 72 69 6f 72 69 74 79 20 63  gured priority c
19990 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65  riteria) will be
199a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
199c0 20 20 20 20 20 20 20 64 69 73 70 6c 61 79 65 64         displayed
199d0 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 3b   to the console;
199e0 20 6f 74 68 65 72 77 69 73 65 2c 20 74 72 61 63   otherwise, trac
199f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19a10 2f 20 20 20 20 20 20 20 6f 75 74 70 75 74 20 28  /       output (
19a20 74 68 61 74 20 6d 65 65 74 73 20 74 68 65 20 63  that meets the c
19a30 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69  onfigured priori
19a40 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 2f 2f 20 20 20 20 20 20 20 63 72 69 74 65 72 69  //       criteri
19a70 61 29 20 77 69 6c 6c 20 62 65 20 64 69 73 70 6c  a) will be displ
19a80 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73  ayed to the cons
19a90 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ole...          
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ab0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ad0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
19ae0 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20 20 20 20  ion.debug)..    
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19b50 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20  / NOTE: Add the 
19b60 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69  console trace li
19b70 73 74 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20  stener to the.. 
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19ba0 2f 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20  /       list of 
19bb0 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20  trace listeners 
19bc0 6d 61 69 6e 74 61 69 6e 65 64 20 62 79 0d 0a 20  maintained by.. 
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 20 20 20 20 20 20 20 2f                 /
19bf0 2f 20 20 20 20 20 20 20 74 68 65 20 54 72 61 63  /       the Trac
19c00 65 4f 70 73 20 63 6c 61 73 73 20 28 69 2e 65 2e  eOps class (i.e.
19c10 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73 0d 0a   only messages..
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c40 2f 2f 20 20 20 20 20 20 20 74 68 61 74 20 6d 65  //       that me
19c50 65 74 20 74 68 65 20 64 65 62 75 67 20 70 72 69  et the debug pri
19c60 6f 72 69 74 79 20 77 69 6c 6c 20 62 65 0d 0a 20  ority will be.. 
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19c90 2f 20 20 20 20 20 20 20 73 65 65 6e 20 6f 6e 20  /       seen on 
19ca0 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20  the console)... 
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 2f                 /
19cd0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cf0 20 20 20 54 72 61 63 65 4f 70 73 2e 53 65 74 75     TraceOps.Setu
19d00 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28  pDebugListeners(
19d10 29 3b 0d 0a 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 20 20 20 20                  
19d30 7d 0d 0a 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 20 20 65                 e
19d50 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d90 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
19da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19db0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
19dc0 20 41 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65   Add the console
19dd0 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 20   trace listener 
19de0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
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 2f 2f 20 20 20 20 20 20          //      
19e10 20 6c 69 73 74 20 6f 66 20 62 75 69 6c 74 2d 69   list of built-i
19e20 6e 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72  n trace listener
19e30 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20  s (i.e...       
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
19e60 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73 20    only messages 
19e70 74 68 61 74 20 6d 65 65 74 20 74 68 65 20 74 72  that meet the tr
19e80 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ace..           
19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ea0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72       //       pr
19eb0 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65 20 73  iority will be s
19ec0 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f  een on the conso
19ed0 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  le)...          
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
19f20 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65  Listeners.Add(ne
19f30 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69  w ConsoleTraceLi
19f40 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20  stener());..    
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19fd0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ff0 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
1a000 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a  ation.noLog &&..
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a020 20 20 20 20 20 20 20 20 20 20 20 20 21 53 74 72              !Str
1a030 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1a040 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
1a050 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  logFileName)).. 
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a090 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74        Trace.List
1a0a0 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 54 65  eners.Add(new Te
1a0b0 78 74 57 72 69 74 65 72 54 72 61 63 65 4c 69 73  xtWriterTraceLis
1a0c0 74 65 6e 65 72 28 0d 0a 20 20 20 20 20 20 20 20  tener(..        
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0e0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1a0f0 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
1a100 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e));....        
1a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a120 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a140 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 65 63      // NOTE: Tec
1a150 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20 63 72 65  hnically, we cre
1a160 61 74 65 64 20 74 68 65 20 6c 6f 67 20 66 69 6c  ated the log fil
1a170 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
1a180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a190 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1b0 66 69 6c 65 73 43 72 65 61 74 65 64 2b 2b 3b 0d  filesCreated++;.
1a1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a1d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1a200 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d 70 20 74   // NOTE: Dump t
1a230 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  he configuration
1a240 20 6e 6f 77 20 69 6e 20 63 61 73 65 20 77 65 20   now in case we 
1a250 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20  need to..       
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a270 20 20 20 20 20 20 74 72 6f 75 62 6c 65 73 68 6f        troublesho
1a280 6f 74 20 61 6e 79 20 69 73 73 75 65 73 2e 0d 0a  ot any issues...
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a2c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
1a2d0 62 75 67 50 72 69 6f 72 69 74 79 20 3c 3d 20 54  bugPriority <= T
1a2e0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1a2f0 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ium)..          
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1a310 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70  nfiguration.Dump
1a320 28 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 29 3b  (debugCallback);
1a330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a340 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
1a350 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50  iguration.traceP
1a360 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65  riority <= Trace
1a370 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29  Priority.Medium)
1a380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a390 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1a3a0 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 74 72 61  uration.Dump(tra
1a3b0 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a  ceCallback);....
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1a3f0 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 72 65 20  OTE: Show where 
1a400 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 66  we are running f
1a410 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77 65 20 77  rom and how we w
1a420 65 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ere..           
1a430 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1a440 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20 20    invoked...    
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a460 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1a470 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
1a480 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73 65 6d 62  ocation = assemb
1a490 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d 0a 0d 0a  ly.Location;....
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4b0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1a4c0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1a4d0 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c  Priority.MediumL
1a4e0 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1a500 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1a510 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1a520 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a540 20 20 20 22 52 75 6e 6e 69 6e 67 20 65 78 65 63     "Running exec
1a550 75 74 61 62 6c 65 20 69 73 3a 20 7b 30 7d 22 2c  utable is: {0}",
1a560 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61   ForDisplay(loca
1a570 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  tion)),..       
1a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a590 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1a5a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a5b0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1a5c0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1a5d0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1a5e0 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  iumLow,..       
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1a610 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1a620 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 20 20 20 20 20 20 20 22 4f 72 69 67 69 6e 61 6c         "Original
1a650 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 69 73   command line is
1a660 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 43 6f 6d   Environment.Com
1a690 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72 61 63 65  mandLine), trace
1a6a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1a6d0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1a6e0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77  iority.MediumLow
1a6f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a700 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1a710 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1a720 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1a730 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a750 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f 63 65 73   "Running proces
1a760 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49 73 36 34  s is {0}.", Is64
1a770 42 69 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a  BitProcess() ?..
1a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a790 20 20 20 20 20 20 20 20 20 20 20 20 22 36 34 2d              "64-
1a7a0 62 69 74 22 20 3a 20 22 33 32 2d 62 69 74 22 29  bit" : "32-bit")
1a7b0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1a7c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a7d0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
1a7e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74  nfiguration.what
1a7f0 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
1a800 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a820 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a840 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
1a850 64 65 62 75 67 67 65 72 20 69 73 20 61 74 74 61  debugger is atta
1a860 63 68 65 64 20 61 6e 64 20 57 68 61 74 2d 49 66  ched and What-If
1a870 20 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20   mode..         
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a890 2f 20 20 20 20 20 20 20 69 73 20 5b 6e 6f 77 5d  /       is [now]
1a8a0 20 64 69 73 61 62 6c 65 64 2c 20 69 73 73 75 65   disabled, issue
1a8b0 20 61 20 77 61 72 6e 69 6e 67 2e 0d 0a 20 20 20   a warning...   
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8f0 20 69 66 20 28 44 65 62 75 67 67 65 72 2e 49 73   if (Debugger.Is
1a900 41 74 74 61 63 68 65 64 29 0d 0a 20 20 20 20 20  Attached)..     
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1a930 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1a940 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1a950 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a970 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1a980 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1a990 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9b0 20 20 20 20 20 20 20 20 22 46 6f 72 63 65 64 20          "Forced 
1a9c0 74 6f 20 64 69 73 61 62 6c 65 20 5c 22 77 68 61  to disable \"wha
1a9d0 74 2d 69 66 5c 22 20 6d 6f 64 65 20 77 69 74 68  t-if\" mode with
1a9e0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa00 20 20 20 20 20 20 22 64 65 62 75 67 67 65 72 20        "debugger 
1aa10 61 74 74 61 63 68 65 64 2e 22 2c 20 74 72 61 63  attached.", trac
1aa20 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1aa50 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1aa90 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1aaa0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1aab0 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
1aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aad0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1aae0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1aaf0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab10 20 20 20 20 20 20 22 4e 6f 20 61 63 74 75 61 6c        "No actual
1ab20 20 63 68 61 6e 67 65 73 20 77 69 6c 6c 20 62 65   changes will be
1ab30 20 6d 61 64 65 20 74 6f 20 74 68 69 73 20 22 20   made to this " 
1ab40 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ab60 73 79 73 74 65 6d 20 62 65 63 61 75 73 65 20 5c  system because \
1ab70 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
1ab80 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20  is enabled.",.. 
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1abb0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1abe0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
1ac10 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61   command line ha
1ac20 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61 6e 75 61  s not been manua
1ac30 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
1ac40 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1ac50 20 20 63 6f 6e 66 69 72 6d 65 64 20 28 69 2e 65    confirmed (i.e
1ac60 2e 20 76 69 61 20 74 68 65 20 65 78 70 6c 69 63  . via the explic
1ac70 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d  it command line.
1ac80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ac90 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
1aca0 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73 74 6f 70  tion), then stop
1acb0 20 70 72 6f 63 65 73 73 69 6e 67 20 6e 6f 77 2e   processing now.
1acc0 20 20 57 65 20 65 6e 66 6f 72 63 65 0d 0a 20 20    We enforce..  
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ace0 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20    //       this 
1acf0 72 75 6c 65 20 73 6f 20 74 68 61 74 20 73 69 6d  rule so that sim
1ad00 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c 69 63 6b  ply double-click
1ad10 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1ad30 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c 65        executable
1ad40 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73 75 6c 74   will not result
1ad50 20 69 6e 20 61 6e 79 20 63 68 61 6e 67 65 73 20   in any changes 
1ad60 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  being..         
1ad70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1ad80 20 20 20 20 6d 61 64 65 20 74 6f 20 74 68 65 20      made to the 
1ad90 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20  system...       
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1adb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1adc0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
1add0 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29  uration.confirm)
1ade0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1adf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae10 20 65 72 72 6f 72 20 3d 20 22 43 61 6e 6e 6f 74   error = "Cannot
1ae20 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68 65 20 5c   continue, the \
1ae30 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70 74 69 6f  "confirm\" optio
1ae40 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20  n is " +..      
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 20 20 20 20 20 20 22 6e 6f 74 20 65 6e 61 62 6c        "not enabl
1ae70 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed.";....       
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aeb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1aed0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
1aee0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
1af00 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
1af10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1af20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1af30 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1af40 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1af50 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
1af60 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1af90 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65  traceCallback, e
1afa0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1afb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1afc0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1afd0 20 22 46 61 69 6c 65 64 20 74 6f 20 70 72 6f 63   "Failed to proc
1afe0 65 73 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ess configuratio
1aff0 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
1b000 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b010 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b020 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1b030 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b040 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1b050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1b090 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
1b0a0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
1b0b0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
1b0c0 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
1b0d0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
1b0e0 62 6f 6f 6c 20 43 68 65 63 6b 52 75 6e 74 69 6d  bool CheckRuntim
1b0f0 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20  eVersion(..     
1b100 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69             Confi
1b110 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  guration configu
1b120 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
1b130 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74           bool st
1b140 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rict,..         
1b150 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
1b160 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
1b170 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1b180 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b190 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b1c0 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
1b1d0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
1b1e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b1f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b210 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c    error = "Inval
1b220 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  id configuration
1b230 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .";..           
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1b250 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1b280 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2a0 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 61 74 20 76   // NOTE: What v
1b2b0 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 72 75  ersion of the ru
1b2c0 6e 74 69 6d 65 20 77 61 73 20 74 68 65 20 63 6f  ntime was the co
1b2d0 72 65 20 28 70 72 69 6d 61 72 79 29 0d 0a 20 20  re (primary)..  
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2f0 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
1b300 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 61 67 61  bly compiled aga
1b310 69 6e 73 74 20 28 65 2e 67 2e 20 22 76 32 2e 30  inst (e.g. "v2.0
1b320 2e 35 30 37 32 37 22 20 6f 72 0d 0a 20 20 20 20  .50727" or..    
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b340 2f 2f 20 20 20 20 20 20 20 22 76 34 2e 30 2e 33  //       "v4.0.3
1b350 30 33 31 39 22 29 2e 0d 0a 20 20 20 20 20 20 20  0319")...       
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1b370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b380 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
1b390 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1b3a0 69 6f 6e 20 3d 20 47 65 74 49 6d 61 67 65 52 75  ion = GetImageRu
1b3b0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20  ntimeVersion(.. 
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3d0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1b3e0 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
1b3f0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
1b400 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b420 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61     // NOTE: We a
1b430 6c 6c 6f 77 20 74 68 65 20 61 63 74 75 61 6c 20  llow the actual 
1b440 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 63 68  image runtime ch
1b450 65 63 6b 69 6e 67 20 74 6f 20 62 65 0d 0a 20 20  ecking to be..  
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b470 20 20 2f 2f 20 20 20 20 20 20 20 62 79 70 61 73    //       bypas
1b480 73 65 64 20 76 69 61 20 74 68 65 20 22 2d 6e 6f  sed via the "-no
1b490 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 20  RuntimeVersion" 
1b4a0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20  command line..  
1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4c0 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f    //       optio
1b4d0 6e 2e 20 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20  n.  The command 
1b4e0 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 69 73 20 69  line option is i
1b4f0 6e 74 65 6e 64 65 64 20 66 6f 72 0d 0a 20 20 20  ntended for..   
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b510 20 2f 2f 20 20 20 20 20 20 20 65 78 70 65 72 74   //       expert
1b520 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a 20 20 20 20   use only...    
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b540 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1b550 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
1b560 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74  iguration.noRunt
1b570 69 6d 65 56 65 72 73 69 6f 6e 29 0d 0a 20 20 20  imeVersion)..   
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1b5b0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1b5c0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1b5d0 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20  .Medium,..      
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5f0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1b600 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1b610 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1b620 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b640 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d  "Assembly is com
1b650 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e  piled for the .N
1b660 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
1b670 3b 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  ; " +..         
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b690 20 20 20 22 68 6f 77 65 76 65 72 2c 20 69 6e 73     "however, ins
1b6a0 74 61 6c 6c 61 74 69 6f 6e 20 72 65 73 74 72 69  tallation restri
1b6b0 63 74 69 6f 6e 73 20 62 61 73 65 64 20 6f 6e 20  ctions based on 
1b6c0 74 68 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20  this " +..      
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6e0 20 20 20 20 20 20 22 66 61 63 74 20 68 61 76 65        "fact have
1b6f0 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 76   been disabled v
1b700 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  ia the command l
1b710 69 6e 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ine.",..        
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b730 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e      coreImageRun
1b740 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 20 74 72  timeVersion), tr
1b750 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1b760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b770 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b780 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1b790 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 54              // T
1b7d0 4f 44 4f 3a 20 52 65 73 74 72 69 63 74 20 74 68  ODO: Restrict th
1b7e0 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
1b7f0 62 61 73 65 64 20 6f 6e 20 77 68 69 63 68 20 69  based on which i
1b800 6d 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20  mage..          
1b810 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b820 20 20 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69     runtime versi
1b830 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f 72 65 2d  ons (which more-
1b840 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65 73 70 6f  or-less correspo
1b850 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nd..            
1b860 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1b870 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f   to .NET Framewo
1b880 72 6b 20 76 65 72 73 69 6f 6e 73 29 20 61 72 65  rk versions) are
1b890 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68   supported by th
1b8a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1b8b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1b8c0 76 65 72 73 69 6f 6e 73 20 6f 66 20 56 69 73 75  versions of Visu
1b8d0 61 6c 20 53 74 75 64 69 6f 20 74 68 61 74 20 61  al Studio that a
1b8e0 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20  re installed... 
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b900 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1b910 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
1b920 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
1b930 70 74 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e  pty(coreImageRun
1b940 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 0d 0a 20  timeVersion)).. 
1b950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b960 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1b980 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 63  ror = "invalid c
1b990 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72  ore file image r
1b9a0 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 22 3b  untime version";
1b9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b9c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b9d0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba00 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72      else if (Str
1ba10 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20  ing.Equals(..   
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba30 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61           coreIma
1ba40 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1ba50 2c 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74  , CLRv2ImageRunt
1ba60 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
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 20 53 74 72 69 6e 67 43           StringC
1ba90 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
1baa0 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
1bab0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bad0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65  // NOTE: For the
1bb00 20 43 4c 52 20 76 32 2e 30 20 72 75 6e 74 69 6d   CLR v2.0 runtim
1bb10 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20  e, make sure we 
1bb20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  disable..       
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb40 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74   //       any at
1bb50 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20  tempt to use it 
1bb60 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20  for things that 
1bb70 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20  require..       
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb90 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73   //       an ass
1bba0 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66  embly compiled f
1bbb0 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e  or the CLR v4.0.
1bbc0 20 20 49 74 20 69 73 0d 0a 20 20 20 20 20 20 20    It is..       
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbe0 20 2f 2f 20 20 20 20 20 20 20 75 6e 63 65 72 74   //       uncert
1bbf0 61 69 6e 20 69 66 20 74 68 69 73 20 69 73 20 61  ain if this is a
1bc00 63 74 75 61 6c 6c 79 20 61 20 70 72 6f 62 6c 65  ctually a proble
1bc10 6d 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  m in..          
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bc30 20 20 20 20 20 20 20 70 72 61 63 74 69 63 65 20         practice 
1bc40 61 73 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20  as the CLR v4.0 
1bc50 63 61 6e 20 6c 6f 61 64 20 61 6e 64 20 75 73 65  can load and use
1bc60 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   an..           
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1bc80 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63        assembly c
1bc90 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65  ompiled with the
1bca0 20 43 4c 52 20 76 32 2e 30 3b 20 68 6f 77 65 76   CLR v2.0; howev
1bcb0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
1bcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1bcd0 20 20 20 20 20 20 73 69 6e 63 65 20 74 68 69 73        since this
1bce0 20 70 72 6f 6a 65 63 74 20 6f 66 66 65 72 73 20   project offers 
1bcf0 62 6f 74 68 20 63 6f 6e 66 69 67 75 72 61 74 69  both configurati
1bd00 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ons,..          
1bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bd20 20 20 20 20 20 20 20 77 65 20 63 75 72 72 65 6e         we curren
1bd30 74 6c 79 20 64 69 73 61 6c 6c 6f 77 20 74 68 69  tly disallow thi
1bd40 73 20 6d 69 73 6d 61 74 63 68 2e 0d 0a 20 20 20  s mismatch...   
1bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd60 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd80 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1bd90 6f 4e 65 74 46 78 34 30 20 3d 20 74 72 75 65 3b  oNetFx40 = true;
1bda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bdb0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1bdc0 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
1bdd0 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  5 = true;..     
1bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdf0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1be00 2e 6e 6f 56 73 32 30 31 30 20 3d 20 74 72 75 65  .noVs2010 = true
1be10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1be20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1be30 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
1be40 32 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  2 = true;....   
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1be70 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1be80 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1be90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1beb0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1bec0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1bed0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bef0 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
1bf00 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66  ly is compiled f
1bf10 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  or the .NET Fram
1bf20 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a  ework {0}, " +..
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70              "sup
1bf50 70 6f 72 74 20 66 6f 72 20 2e 4e 45 54 20 46 72  port for .NET Fr
1bf60 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e  amework {1} is n
1bf70 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a  ow disabled.",..
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 43 4c 52 76              CLRv
1bfa0 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  2ImageRuntimeVer
1bfb0 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65  sion, CLRv4Image
1bfc0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
1bfd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1bff0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
1c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c010 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c020 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1c030 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73  f (String.Equals
1c040 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1c060 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1c070 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61  ersion, CLRv4Ima
1c080 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1c090 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1c0b0 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
1c0c0 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20  Ordinal))..     
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1c0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c110 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
1c120 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20  or the CLR v4.0 
1c130 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  runtime, make su
1c140 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20  re we disable.. 
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c160 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1c170 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75  any attempt to u
1c180 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73  se it for things
1c190 20 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20   that require.. 
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1c1c0 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70  an assembly comp
1c1d0 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52  iled for the CLR
1c1e0 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20   v2.0...        
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1c210 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1c220 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
1c230 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  x20 = true;..   
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c250 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1c260 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 74  on.noNetFx35 = t
1c270 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1c280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1c290 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
1c2a0 32 30 30 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20  2005 = true;..  
1c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2c0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1c2d0 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 74  ion.noVs2008 = t
1c2e0 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c300 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1c310 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1c320 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c340 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1c350 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1c360 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1c370 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c390 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73      "Assembly is
1c3a0 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
1c3b0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1c3c0 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {0}, " +..     
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74 20         "support 
1c3f0 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  for .NET Framewo
1c400 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69  rk {1} is now di
1c410 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20  sabled.",..     
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1c440 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  y(CLRv4ImageRunt
1c450 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  imeVersion),..  
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1c480 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52  play(CLRv2ImageR
1c490 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c  untimeVersion)),
1c4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c4c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c4f0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1c530 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
1c540 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c560 20 20 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20     "unsupported 
1c570 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20  core file image 
1c580 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20  runtime version 
1c590 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5b0 20 22 7b 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b   "{0}, must be {
1c5c0 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20  1} or {2}",..   
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5e0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1c5f0 6c 61 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e  lay(coreImageRun
1c600 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  timeVersion),.. 
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1c630 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65  splay(CLRv2Image
1c640 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
1c650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1c670 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d  rDisplay(CLRv4Im
1c680 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1c690 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n));....        
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c6e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1c6f0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
1c700 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
1c720 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1c730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c740 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c750 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1c760 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1c770 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
1c780 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
1c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7a0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1c7b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c  raceCallback, e,
1c7c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1c7d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c7e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1c7f0 22 46 61 69 6c 65 64 20 74 6f 20 63 68 65 63 6b  "Failed to check
1c800 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76   image runtime v
1c810 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ersion.";..     
1c820 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1c830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c840 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1c850 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1c860 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
1c870 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1c880 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1c890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1c8d0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
1c8e0 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
1c8f0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1c900 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28  c bool HasFlags(
1c910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c920 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68    InstallFlags h
1c930 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  asFlags,..      
1c940 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61            bool a
1c950 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..            
1c960 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
1c970 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c980 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a        if (all)..
1c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9a0 20 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73      return ((ins
1c9b0 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46  tallFlags & hasF
1c9c0 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67  lags) == hasFlag
1c9d0 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
1c9e0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ca00 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46  eturn ((installF
1ca10 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
1ca20 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73   != InstallFlags
1ca30 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20  .None);..       
1ca40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1ca50 20 20 20 20 20 20 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 2f 2f  ////////////////
1ca80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1caa0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1cab0 62 6f 6f 6c 20 49 73 4c 69 6e 71 53 75 70 70 6f  bool IsLinqSuppo
1cac0 72 74 65 64 28 29 0d 0a 20 20 20 20 20 20 20 20  rted()..        
1cad0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1cae0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1caf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1cb00 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a  TE: Return non-z
1cb10 65 72 6f 20 69 66 20 74 68 65 20 4c 49 4e 51 20  ero if the LINQ 
1cb20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64 20  assembly should 
1cb30 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
1cb40 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f      //       pro
1cb50 63 65 73 73 65 64 20 64 75 72 69 6e 67 20 74 68  cessed during th
1cb60 65 20 69 6e 73 74 61 6c 6c 2e 20 20 49 66 20 74  e install.  If t
1cb70 68 65 20 74 61 72 67 65 74 20 69 73 0d 0a 20 20  he target is..  
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1cb90 20 20 20 20 20 20 20 56 69 73 75 61 6c 20 53 74         Visual St
1cba0 75 64 69 6f 20 32 30 30 35 2c 20 74 68 69 73 20  udio 2005, this 
1cbb0 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 7a 65  should return ze
1cbc0 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro...           
1cbd0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1cbe0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1cbf0 21 6e 6f 4e 65 74 46 78 33 35 20 7c 7c 20 21 6e  !noNetFx35 || !n
1cc00 6f 4e 65 74 46 78 34 30 20 7c 7c 20 21 6e 6f 4e  oNetFx40 || !noN
1cc10 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20  etFx45;..       
1cc20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1cc30 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1cc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1cc80 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1cc90 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20 20 20 20  void Dump(..    
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1ccb0 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
1ccc0 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20 20 20  allback..       
1ccd0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1cce0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ccf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
1cd00 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20  raceCallback != 
1cd10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1cd20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1cd40 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1cd50 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1cd60 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd80 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1cd90 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61 73  ", ForDisplay(as
1cda0 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20  sembly)),..     
1cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdc0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1cdd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1cde0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1cdf0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1ce00 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1ce10 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce30 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22     "LogFileName"
1ce40 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67  , ForDisplay(log
1ce50 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce70 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1ce80 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ce90 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1cea0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1ceb0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1cec0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cee0 20 20 20 20 20 22 44 69 72 65 63 74 6f 72 79 22       "Directory"
1cef0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72  , ForDisplay(dir
1cf00 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20  ectory)),..     
1cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1cf30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1cf40 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1cf50 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1cf60 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1cf70 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf90 20 20 20 22 43 6f 72 65 46 69 6c 65 4e 61 6d 65     "CoreFileName
1cfa0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f  ", ForDisplay(co
1cfb0 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  reFileName)),.. 
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfd0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1cfe0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d000 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d010 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d020 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d040 20 20 20 20 20 20 20 22 4c 69 6e 71 46 69 6c 65         "LinqFile
1d050 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
1d060 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  y(linqFileName))
1d070 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d080 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d090 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0b0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1d0c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1d0d0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1d0e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d0f0 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 69             "Desi
1d100 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 2c 20 46  gnerFileName", F
1d110 6f 72 44 69 73 70 6c 61 79 28 64 65 73 69 67 6e  orDisplay(design
1d120 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  erFileName)),.. 
1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d140 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d150 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d170 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d180 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d190 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1b0 20 20 20 20 20 20 20 22 52 65 67 69 73 74 72 79         "Registry
1d1c0 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73  Version", ForDis
1d1d0 70 6c 61 79 28 72 65 67 69 73 74 72 79 56 65 72  play(registryVer
1d1e0 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d200 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d210 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d220 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d230 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d240 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d250 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d270 20 22 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22   "ConfigVersion"
1d280 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e  , ForDisplay(con
1d290 66 69 67 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  figVersion)),.. 
1d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d2c0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d2e0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d2f0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d300 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d320 20 20 20 20 20 20 20 22 56 73 56 65 72 73 69 6f         "VsVersio
1d330 6e 53 75 66 66 69 78 22 2c 20 46 6f 72 44 69 73  nSuffix", ForDis
1d340 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 53 75  play(vsVersionSu
1d350 66 66 69 78 29 29 2c 0d 0a 20 20 20 20 20 20 20  ffix)),..       
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d390 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d3a0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d3b0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d3c0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3e0 20 22 44 65 62 75 67 46 6f 72 6d 61 74 22 2c 20   "DebugFormat", 
1d3f0 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67  ForDisplay(debug
1d400 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20  Format)),..     
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d430 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d440 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d450 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1d460 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1d470 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d490 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74 22     "TraceFormat"
1d4a0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
1d4b0 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  ceFormat)),..   
1d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4d0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d4e0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d4f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d500 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d510 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d520 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d540 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61       "InstallFla
1d550 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  gs", ForDisplay(
1d560 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d  installFlags)),.
1d570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d580 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d590 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1d5c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1d5d0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1d5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d5f0 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 50           "DebugP
1d600 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
1d610 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f 72 69  play(debugPriori
1d620 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
1d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d640 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1d650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d660 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1d670 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1d680 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1d690 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d6b0 54 72 61 63 65 50 72 69 6f 72 69 74 79 22 2c 20  TracePriority", 
1d6c0 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65  ForDisplay(trace
1d6d0 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20  Priority)),..   
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d700 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d710 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d720 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d730 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d740 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d760 20 20 20 20 20 22 50 65 72 55 73 65 72 22 2c 20       "PerUser", 
1d770 46 6f 72 44 69 73 70 6c 61 79 28 70 65 72 55 73  ForDisplay(perUs
1d780 65 72 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  er)),..         
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d7a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1d7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d7c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1d7d0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1d7e0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1d7f0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d810 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73  Install", ForDis
1d820 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d  play(install)),.
1d830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d840 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d850 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d870 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1d880 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1d890 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1d8a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d8b0 20 20 20 20 20 20 20 20 20 22 57 6f 77 36 34 22           "Wow64"
1d8c0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 6f 77  , ForDisplay(wow
1d8d0 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  64)),..         
1d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d8f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1d900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d910 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1d920 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1d930 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1d940 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d960 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
1d970 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1d980 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1d990 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d9a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d9b0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9d0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1d9e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1d9f0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1da00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1da10 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65             "NoDe
1da20 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c  sktop", ForDispl
1da30 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d  ay(noDesktop)),.
1da40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1da50 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1da60 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da80 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1da90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1daa0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1dab0 0a 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 22 4e 6f 43 6f 6d 70           "NoComp
1dad0 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  act", ForDisplay
1dae0 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20  (noCompact)),.. 
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1db10 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1db30 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1db40 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1db50 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db70 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32         "NoNetFx2
1db80 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
1db90 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20  oNetFx20)),..   
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbb0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1dbc0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1dbd0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1dbe0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1dbf0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1dc00 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 33 35 22       "NoNetFx35"
1dc30 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
1dc40 65 74 46 78 33 35 29 29 2c 0d 0a 20 20 20 20 20  etFx35)),..     
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1dc70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1dc80 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1dc90 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1dca0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1dcb0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20     "NoNetFx40", 
1dce0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
1dcf0 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx40)),..       
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd10 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1dd20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1dd30 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1dd40 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1dd50 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1dd60 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd80 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c 20 46 6f   "NoNetFx45", Fo
1dd90 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
1dda0 34 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  45)),..         
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ddc0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1ddd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dde0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ddf0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1de00 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1de10 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1de30 4e 6f 56 73 32 30 30 35 22 2c 20 46 6f 72 44 69  NoVs2005", ForDi
1de40 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 35 29 29  splay(noVs2005))
1de50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1de60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1de70 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1de80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de90 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1dea0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1deb0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1dec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ded0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
1dee0 32 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61  2008", ForDispla
1def0 79 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20  y(noVs2008)),.. 
1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df10 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1df20 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1df40 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1df50 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1df60 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df80 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30         "NoVs2010
1df90 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1dfa0 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20  Vs2010)),..     
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1dfd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1dfe0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1dff0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1e000 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1e010 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e030 20 20 20 22 4e 6f 56 73 32 30 31 32 22 2c 20 46     "NoVs2012", F
1e040 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
1e050 31 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  12)),..         
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e070 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1e080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e090 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1e0a0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1e0b0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1e0c0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e0e0 4e 6f 54 72 61 63 65 22 2c 20 46 6f 72 44 69 73  NoTrace", ForDis
1e0f0 70 6c 61 79 28 6e 6f 54 72 61 63 65 29 29 2c 0d  play(noTrace)),.
1e100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e110 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e120 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e140 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1e150 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1e160 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1e170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e180 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6e 73           "NoCons
1e190 6f 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ole", ForDisplay
1e1a0 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20  (noConsole)),.. 
1e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1e1d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e1f0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1e200 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1e210 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e230 20 20 20 20 20 20 20 22 4e 6f 4c 6f 67 22 2c 20         "NoLog", 
1e240 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4c 6f 67  ForDisplay(noLog
1e250 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e270 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e290 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1e2a0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1e2b0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1e2c0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 68               "Th
1e2e0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 2c 20 46  rowOnMissing", F
1e2f0 6f 72 44 69 73 70 6c 61 79 28 74 68 72 6f 77 4f  orDisplay(throwO
1e300 6e 4d 69 73 73 69 6e 67 29 29 2c 0d 0a 20 20 20  nMissing)),..   
1e310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e320 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1e330 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1e340 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e350 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1e360 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1e370 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 20 20 20 20 20 22 57 68 61 74 49 66 22 2c 20 46       "WhatIf", F
1e3a0 6f 72 44 69 73 70 6c 61 79 28 77 68 61 74 49 66  orDisplay(whatIf
1e3b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e3d0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3f0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1e400 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1e410 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1e420 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
1e440 62 75 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  bug", ForDisplay
1e450 28 64 65 62 75 67 29 29 2c 0d 0a 20 20 20 20 20  (debug)),..     
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e470 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1e480 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e490 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e4a0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1e4b0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1e4c0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4e0 20 20 20 22 56 65 72 62 6f 73 65 22 2c 20 46 6f     "Verbose", Fo
1e4f0 72 44 69 73 70 6c 61 79 28 76 65 72 62 6f 73 65  rDisplay(verbose
1e500 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e520 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e540 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1e550 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1e560 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1e570 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1e580 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f               "Co
1e590 6e 66 69 72 6d 22 2c 20 46 6f 72 44 69 73 70 6c  nfirm", ForDispl
1e5a0 61 79 28 63 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20  ay(confirm)),.. 
1e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1e5d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e620 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e640 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d   if (assembly !=
1e650 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1e660 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e680 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e690 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e6a0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e6b0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6d0 20 20 20 20 22 41 73 73 65 6d 62 6c 79 54 69 74      "AssemblyTit
1e6e0 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  le",..          
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e700 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74    ForDisplay(Get
1e710 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 61 73  AssemblyTitle(as
1e720 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20  sembly))),..    
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e740 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e750 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e770 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e780 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e790 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e7a0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 22 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  "AssemblyConfigu
1e7d0 72 61 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20  ration",..      
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1e800 28 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66  (GetAssemblyConf
1e810 69 67 75 72 61 74 69 6f 6e 28 61 73 73 65 6d 62  iguration(assemb
1e820 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ly))),..        
1e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e840 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1e850 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
1e860 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1e870 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1e880 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1e890 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
1e8a0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1e8b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1e8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1e900 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
1e910 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
1e920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1e930 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 20 61  ivate Assembly a
1e940 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20  ssembly;..      
1e950 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73        public Ass
1e960 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79 0d 0a  embly Assembly..
1e970 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1e990 65 74 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65  et { return asse
1e9a0 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  mbly; }..       
1e9b0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61           set { a
1e9c0 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75 65 3b  ssembly = value;
1e9d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1e9e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1e9f0 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea30 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ea40 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1ea50 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d  ng logFileName;.
1ea60 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1ea70 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f 67 46 69  lic string LogFi
1ea80 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
1ea90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1eaa0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1eab0 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b  urn logFileName;
1eac0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1ead0 20 20 20 20 73 65 74 20 7b 20 6c 6f 67 46 69 6c      set { logFil
1eae0 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
1eaf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1eb00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1eb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb50 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1eb60 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
1eb70 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20   directory;..   
1eb80 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1eb90 73 74 72 69 6e 67 20 44 69 72 65 63 74 6f 72 79  string Directory
1eba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ebb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ebc0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 69   get { return di
1ebd0 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20 20 20 20  rectory; }..    
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1ebf0 7b 20 64 69 72 65 63 74 6f 72 79 20 3d 20 76 61  { directory = va
1ec00 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1ec10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ec20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ec30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1ec70 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1ec80 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e  string coreFileN
1ec90 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
1eca0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1ecb0 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  CoreFileName..  
1ecc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1ece0 20 7b 20 72 65 74 75 72 6e 20 63 6f 72 65 46 69   { return coreFi
1ecf0 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  leName; }..     
1ed00 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1ed10 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
1ed20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1ed30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ed40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
1ed90 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1eda0 65 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c  e string linqFil
1edb0 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
1edc0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
1edd0 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a  g LinqFileName..
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1ee00 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 69 6e 71  et { return linq
1ee10 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1ee30 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20   { linqFileName 
1ee40 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1ee50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1ee60 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1ee70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1eec0 61 74 65 20 73 74 72 69 6e 67 20 64 65 73 69 67  ate string desig
1eed0 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  nerFileName;..  
1eee0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1eef0 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72   string Designer
1ef00 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
1ef10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ef20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1ef30 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72 46 69  eturn designerFi
1ef40 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  leName; }..     
1ef50 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1ef60 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
1ef70 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
1ef80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1ef90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1efa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1efe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1eff0 69 76 61 74 65 20 73 74 72 69 6e 67 20 72 65 67  ivate string reg
1f000 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a 20  istryVersion;.. 
1f010 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1f020 63 20 73 74 72 69 6e 67 20 52 65 67 69 73 74 72  c string Registr
1f030 79 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  yVersion..      
1f040 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f050 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1f060 65 74 75 72 6e 20 72 65 67 69 73 74 72 79 56 65  eturn registryVe
1f070 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20  rsion; }..      
1f080 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1f090 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20  registryVersion 
1f0a0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1f0b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f0c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1f0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
1f110 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1f120 61 74 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 69  ate string confi
1f130 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  gVersion;..     
1f140 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1f150 72 69 6e 67 20 43 6f 6e 66 69 67 56 65 72 73 69  ring ConfigVersi
1f160 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
1f170 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f180 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1f190 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 20 7d  configVersion; }
1f1a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f1b0 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 67 56 65    set { configVe
1f1c0 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d  rsion = value; }
1f1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f1e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
1f210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f230 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1f240 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
1f250 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
1f260 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1f270 75 62 6c 69 63 20 73 74 72 69 6e 67 20 56 73 56  ublic string VsV
1f280 65 72 73 69 6f 6e 53 75 66 66 69 78 0d 0a 20 20  ersionSuffix..  
1f290 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1f2b0 20 7b 20 72 65 74 75 72 6e 20 76 73 56 65 72 73   { return vsVers
1f2c0 69 6f 6e 53 75 66 66 69 78 3b 20 7d 0d 0a 20 20  ionSuffix; }..  
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1f2e0 74 20 7b 20 76 73 56 65 72 73 69 6f 6e 53 75 66  t { vsVersionSuf
1f2f0 66 69 78 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  fix = value; }..
1f300 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f310 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1f320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f360 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f370 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64  private string d
1f380 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  ebugFormat;..   
1f390 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1f3a0 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d  string DebugForm
1f3b0 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  at..            
1f3c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f3d0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1f3e0 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d 0a  debugFormat; }..
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f400 73 65 74 20 7b 20 64 65 62 75 67 46 6f 72 6d 61  set { debugForma
1f410 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
1f420 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f430 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1f440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1f490 69 76 61 74 65 20 73 74 72 69 6e 67 20 74 72 61  ivate string tra
1f4a0 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ceFormat;..     
1f4b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1f4c0 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74  ring TraceFormat
1f4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1f4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f4f0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72   get { return tr
1f500 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20  aceFormat; }..  
1f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1f520 74 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20  t { traceFormat 
1f530 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1f540 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f550 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1f560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1f5b0 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ate InstallFlags
1f5c0 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a   installFlags;..
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1f5e0 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20  ic InstallFlags 
1f5f0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20  InstallFlags..  
1f600 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1f620 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c   { return instal
1f630 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20  lFlags; }..     
1f640 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1f650 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20   installFlags = 
1f660 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1f670 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f680 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f6d0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1f6e0 65 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  e TracePriority 
1f6f0 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a  debugPriority;..
1f700 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1f710 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ic TracePriority
1f720 20 44 65 62 75 67 50 72 69 6f 72 69 74 79 0d 0a   DebugPriority..
1f730 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1f750 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75  et { return debu
1f760 67 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20  gPriority; }..  
1f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1f780 74 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74  t { debugPriorit
1f790 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
1f7a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f7b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1f7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1f810 69 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72  ivate TracePrior
1f820 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74  ity tracePriorit
1f830 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
1f840 70 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f  public TracePrio
1f850 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69  rity TracePriori
1f860 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
1f870 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f880 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1f890 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d  tracePriority; }
1f8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f8b0 20 20 73 65 74 20 7b 20 74 72 61 63 65 50 72 69    set { tracePri
1f8c0 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d  ority = value; }
1f8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f8e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1f8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f930 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1f940 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 70    private bool p
1f950 65 72 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20  erUser;..       
1f960 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1f970 20 50 65 72 55 73 65 72 0d 0a 20 20 20 20 20 20   PerUser..      
1f980 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f990 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1f9a0 65 74 75 72 6e 20 70 65 72 55 73 65 72 3b 20 7d  eturn perUser; }
1f9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f9c0 20 20 73 65 74 20 7b 20 70 65 72 55 73 65 72 20    set { perUser 
1f9d0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1f9e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f9f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1fa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1fa50 61 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c  ate bool install
1fa60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1fa70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73 74 61  ublic bool Insta
1fa80 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..            
1fa90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1faa0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1fab0 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20  install; }..    
1fac0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1fad0 7b 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61 6c 75  { install = valu
1fae0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1faf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1fb00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1fb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1fb50 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1fb60 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20  ol wow64;..     
1fb70 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1fb80 6f 6c 20 57 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol Wow64..      
1fb90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fba0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1fbb0 65 74 75 72 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a  eturn wow64; }..
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbd0 73 65 74 20 7b 20 77 6f 77 36 34 20 3d 20 76 61  set { wow64 = va
1fbe0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1fbf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fc00 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1fc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1fc50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1fc60 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65  bool noRuntimeVe
1fc70 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
1fc80 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1fc90 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
1fca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1fcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fcc0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1fcd0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 20  RuntimeVersion; 
1fce0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1fcf0 20 20 20 73 65 74 20 7b 20 6e 6f 52 75 6e 74 69     set { noRunti
1fd00 6d 65 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75  meVersion = valu
1fd10 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1fd20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1fd30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1fd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1fd80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1fd90 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20  ol noDesktop;.. 
1fda0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1fdb0 63 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70  c bool NoDesktop
1fdc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1fdd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fde0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1fdf0 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20 20  Desktop; }..    
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1fe10 7b 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 76 61  { noDesktop = va
1fe20 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1fe30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fe40 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe80 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1fe90 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1fea0 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d  bool noCompact;.
1feb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1fec0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61  lic bool NoCompa
1fed0 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct..            
1fee0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1fef0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1ff00 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20 20  noCompact; }..  
1ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1ff20 74 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20 3d 20  t { noCompact = 
1ff30 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1ff40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ff50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1ff60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1ffa0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1ffb0 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30  e bool noNetFx20
1ffc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1ffd0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74  ublic bool NoNet
1ffe0 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20  Fx20..          
1fff0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20000 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
20010 6e 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d 0d 0a  n noNetFx20; }..
20020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20030 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32 30 20  set { noNetFx20 
20040 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
20050 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
20060 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
20070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
200b0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
200c0 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
200d0 33 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  35;..           
200e0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
200f0 65 74 46 78 33 35 0d 0a 20 20 20 20 20 20 20 20  etFx35..        
20100 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20110 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
20120 75 72 6e 20 6e 6f 4e 65 74 46 78 33 35 3b 20 7d  urn noNetFx35; }
20130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20140 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 33    set { noNetFx3
20150 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  5 = value; }..  
20160 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
20170 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
20180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
201c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
201d0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
201e0 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx40;..         
201f0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
20200 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20  oNetFx40..      
20210 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20220 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
20230 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 30 3b  eturn noNetFx40;
20240 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20250 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
20260 78 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x40 = value; }..
20270 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20280 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
20290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
202e0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
202f0 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20  etFx45;..       
20300 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
20310 20 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20 20 20   NoNetFx45..    
20320 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20330 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
20340 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
20350 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  5; }..          
20360 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
20370 74 46 78 34 35 20 3d 20 76 61 6c 75 65 3b 20 7d  tFx45 = value; }
20380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20390 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
203a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
203f0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
20400 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20  oVs2005;..      
20410 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
20420 6c 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20 20  l NoVs2005..    
20430 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20440 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
20450 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 35   return noVs2005
20460 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20470 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
20480 30 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  005 = value; }..
20490 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
204a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
204b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20500 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
20510 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20  s2008;..        
20520 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
20530 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20  NoVs2008..      
20540 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20550 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
20560 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20  eturn noVs2008; 
20570 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20580 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30     set { noVs200
20590 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  8 = value; }..  
205a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
205b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
205c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
20610 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
20620 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  010;..          
20630 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
20640 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20  Vs2010..        
20650 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20660 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
20670 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d  urn noVs2010; }.
20680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20690 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20   set { noVs2010 
206a0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
206b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
206c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
206d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20710 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
20720 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31  ate bool noVs201
20730 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2;..            
20740 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73  public bool NoVs
20750 32 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20  2012..          
20760 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20770 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
20780 6e 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a 20  n noVs2012; }.. 
20790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
207a0 65 74 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d 20  et { noVs2012 = 
207b0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
207c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
207d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
207e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20820 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
20830 65 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d  e bool noTrace;.
20840 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
20850 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65  lic bool NoTrace
20860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20880 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
20890 54 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20  Trace; }..      
208a0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
208b0 6e 6f 54 72 61 63 65 20 3d 20 76 61 6c 75 65 3b  noTrace = value;
208c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
208d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
208e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
208f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20920 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20930 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
20940 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20   noConsole;..   
20950 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20960 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a  bool NoConsole..
20970 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
20990 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f  et { return noCo
209a0 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20  nsole; }..      
209b0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
209c0 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75  noConsole = valu
209d0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
209e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
209f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a30 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20a40 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
20a50 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20  ol noLog;..     
20a60 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
20a70 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20  ol NoLog..      
20a80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20a90 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
20aa0 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a  eturn noLog; }..
20ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ac0 73 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61  set { noLog = va
20ad0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
20ae0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
20af0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20b40 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20b50 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
20b60 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ing;..          
20b70 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68    public bool Th
20b80 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20  rowOnMissing..  
20b90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
20bb0 20 7b 20 72 65 74 75 72 6e 20 74 68 72 6f 77 4f   { return throwO
20bc0 6e 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20  nMissing; }..   
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
20be0 20 7b 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e   { throwOnMissin
20bf0 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  g = value; }..  
20c00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
20c10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
20c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
20c70 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49  ivate bool whatI
20c80 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
20c90 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74  public bool What
20ca0 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
20cb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20cc0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
20cd0 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20  whatIf; }..     
20ce0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20cf0 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b   whatIf = value;
20d00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20d10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20d20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20d70 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
20d80 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20   debug;..       
20d90 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
20da0 20 44 65 62 75 67 0d 0a 20 20 20 20 20 20 20 20   Debug..        
20db0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20dc0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
20dd0 75 72 6e 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20  urn debug; }..  
20de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
20df0 74 20 7b 20 64 65 62 75 67 20 3d 20 76 61 6c 75  t { debug = valu
20e00 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
20e10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20e20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20e70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
20e80 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20  ol verbose;..   
20e90 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20ea0 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20  bool Verbose..  
20eb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
20ed0 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62 6f 73   { return verbos
20ee0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
20ef0 20 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 62        set { verb
20f00 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ose = value; }..
20f10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
20f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20f80 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e  private bool con
20f90 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20  firm;..         
20fa0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43     public bool C
20fb0 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20  onfirm..        
20fc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20fd0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
20fe0 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a  urn confirm; }..
20ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21000 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20  set { confirm = 
21010 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
21020 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21030 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
21040 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
21050 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
21060 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
21070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
210c0 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69  gion FrameworkLi
210d0 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  st Class..      
210e0 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
210f0 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f 72 6b   class Framework
21100 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d  List..        {.
21110 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
21120 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
21130 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
21140 20 20 20 20 20 20 70 75 62 6c 69 63 20 46 72 61        public Fra
21150 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20  meworkList()..  
21160 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21170 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
21180 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
21190 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
211a0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
211b0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
211c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
211d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21200 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21210 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
21220 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  lic Methods..   
21230 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
21240 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
21250 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20   rootKey;..     
21260 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
21270 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f  ckRegistryKey Ro
21280 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  otKey..         
21290 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
212a0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
212b0 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20  rn rootKey; }.. 
212c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
212d0 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76  et { rootKey = v
212e0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
212f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21300 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21340 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21350 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
21360 20 53 74 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65   StringList name
21370 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
21380 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73  public StringLis
21390 74 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  t Names..       
213a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
213b0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
213c0 74 75 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20  turn names; }.. 
213d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
213e0 65 74 20 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c  et { names = val
213f0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
21400 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21410 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21450 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21460 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 56         private V
21470 65 72 73 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f  ersionMap versio
21480 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns;..           
21490 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d   public VersionM
214a0 61 70 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20  ap Versions..   
214b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
214c0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
214d0 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e  { return version
214e0 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
214f0 20 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 73        set { vers
21500 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ions = value; }.
21510 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21570 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
21580 20 70 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c   private StringL
21590 69 73 74 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist platformName
215a0 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
215b0 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73  public StringLis
215c0 74 20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d  t PlatformNames.
215d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
215e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215f0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 6c 61  get { return pla
21600 74 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20  tformNames; }.. 
21610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21620 65 74 20 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  et { platformNam
21630 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  es = value; }.. 
21640 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
21650 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
21660 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
21670 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
21680 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
21690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
216e0 20 20 23 72 65 67 69 6f 6e 20 56 73 4c 69 73 74    #region VsList
216f0 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
21700 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
21710 6c 61 73 73 20 56 73 4c 69 73 74 0d 0a 20 20 20  lass VsList..   
21720 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21730 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
21740 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
21750 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21760 6c 69 63 20 56 73 4c 69 73 74 28 29 0d 0a 20 20  lic VsList()..  
21770 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21780 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
21790 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
217a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
217b0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
217c0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
217d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
217e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21810 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21820 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
21830 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
21840 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
21850 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
21860 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20  Key rootKey;..  
21870 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
21880 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
21890 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20   RootKey..      
218a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
218b0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
218c0 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d  eturn rootKey; }
218d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
218e0 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20    set { rootKey 
218f0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
21900 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21910 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
21920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21940 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
21960 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
21970 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 20  ate VersionList 
21980 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20  versions;..     
21990 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65         public Ve
219a0 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f  rsionList Versio
219b0 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
219c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
219d0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
219e0 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20  versions; }..   
219f0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
21a00 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61   { versions = va
21a10 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
21a20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
21a30 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
21a40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
21a50 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
21a60 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
21a70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ac0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
21ad0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
21ae0 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a 20 20  onstant Data..  
21af0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
21b00 6e 73 74 20 73 74 72 69 6e 67 20 43 6f 72 65 46  nst string CoreF
21b10 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65  ileName = "Syste
21b20 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
21b30 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  l";..        pri
21b40 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
21b50 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  g LinqFileName =
21b60 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
21b70 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d  Lite.Linq.dll";.
21b80 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
21b90 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
21ba0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
21bb0 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
21bc0 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  r.dll";..       
21bd0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
21be0 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72 4e 61  tring ProviderNa
21bf0 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44 61 74  me = "SQLite Dat
21c00 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20  a Provider";..  
21c10 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
21c20 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f 6a 65  nst string Proje
21c30 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ctName = "System
21c40 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
21c50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21c60 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 65 67  const string Leg
21c70 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  acyProjectName =
21c80 20 22 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20   "SQLite";..    
21c90 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
21ca0 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69 61  t string Invaria
21cb0 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ntName = "System
21cc0 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
21cd0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21ce0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 46 61 63  const string Fac
21cf0 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d 20 22  toryTypeName = "
21d00 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
21d10 74 65 2e 53 51 4c 69 74 65 46 61 63 74 6f 72 79  te.SQLiteFactory
21d20 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
21d30 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
21d40 20 44 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22   Description = "
21d50 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 44  .NET Framework D
21d60 61 74 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72  ata Provider for
21d70 20 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20   SQLite";....   
21d80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21dd0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21de0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52  const string CLR
21df0 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
21e00 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30  rsion = "v2.0.50
21e10 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  727";..        p
21e20 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
21e30 69 6e 67 20 43 4c 52 76 34 49 6d 61 67 65 52 75  ing CLRv4ImageRu
21e40 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
21e50 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a  v4.0.30319";....
21e60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21eb0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
21ec0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
21ed0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
21ee0 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b  at = "{0}: {1}";
21ef0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21f00 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
21f10 6f 67 46 69 6c 65 53 75 66 66 69 78 20 3d 20 22  ogFileSuffix = "
21f20 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  .log";....      
21f30 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21f80 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
21f90 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74 4b 65  st string RootKe
21fa0 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77 61 72  yName = "Softwar
21fb0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  e";..        pri
21fc0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
21fd0 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d  g Wow64SubKeyNam
21fe0 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f 64 65  e = "Wow6432Node
21ff0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
22000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22040 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22050 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
22060 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46  NOTE: The .NET F
22070 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62 6f 74  ramework has bot
22080 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
22090 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d 0a 20  bit editions... 
220a0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
220b0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
220c0 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20  c readonly bool 
220d0 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79  NetFxIs32BitOnly
220e0 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
220f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22140 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
22150 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
22160 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53 74 75   now, Visual Stu
22170 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20 61 20  dio is always a 
22180 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61 74 69  32-bit applicati
22190 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  on...        //.
221a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
221b0 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
221c0 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69 74 4f   bool VsIs32BitO
221d0 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  nly = true;.... 
221e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
221f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22230 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22240 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
22250 79 20 73 74 72 69 6e 67 20 56 73 49 64 46 6f 72  y string VsIdFor
22260 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20  mat = "B";....  
22270 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
222c0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
222d0 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
222e0 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72   string XPathFor
222f0 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  AddElement =..  
22300 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
22310 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e  guration/system.
22320 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46  data/DbProviderF
22330 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40 69 6e  actories/add[@in
22340 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d  variant=\"{0}\"]
22350 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  ";....        pr
22360 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
22370 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61  donly string XPa
22380 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65  thForRemoveEleme
22390 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
223a0 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
223b0 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50  /system.data/DbP
223c0 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73  roviderFactories
223d0 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72 69 61  /remove[@invaria
223e0 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20  nt=\"{0}\"]";.. 
223f0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
22400 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
22410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22450 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22460 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
22470 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20  Static Data..   
22480 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
22490 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74 68 69  tic Assembly thi
224a0 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65  sAssembly = Asse
224b0 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74 69 6e  mbly.GetExecutin
224c0 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a  gAssembly();....
224d0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
224e0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
224f0 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20 50 61  aceCategory = Pa
22500 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 0d  th.GetFileName(.
22510 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
22520 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69  sAssembly.Locati
22530 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61  on); /* NOTE: Sa
22540 6d 65 20 66 6f 72 20 64 65 62 75 67 20 61 6e 64  me for debug and
22550 20 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a 20 20   trace. */....  
22560 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
22570 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61  atic TraceCallba
22580 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  ck debugCallback
22590 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a 20 20   = AppDebug;..  
225a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
225b0 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61  atic TraceCallba
225c0 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
225d0 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a 0d 0a   = AppTrace;....
225e0 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22630 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
22640 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
22650 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
22660 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20   = null;....#if 
22670 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20  WINDOWS..       
22680 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
22690 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44 69 72  string systemDir
226a0 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 20 6e 75  ectoryWow64 = nu
226b0 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  ll;..#endif.... 
226c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
226d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
22710 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22720 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c  e static int fil
22730 65 73 43 72 65 61 74 65 64 20 3d 20 30 3b 0d 0a  esCreated = 0;..
22740 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22750 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73  static int files
22760 4d 6f 64 69 66 69 65 64 20 3d 20 30 3b 0d 0a 20  Modified = 0;.. 
22770 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
22780 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73 44  tatic int filesD
22790 65 6c 65 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20  eleted = 0;..   
227a0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
227b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
227c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22800 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
22810 65 67 69 6f 6e 20 54 72 61 63 65 20 48 61 6e 64  egion Trace Hand
22820 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
22830 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
22840 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61  ing GetLogFileNa
22850 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
22860 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65   string typeName
22870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 20  ..            ) 
22880 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
22890 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
228a0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
228b0 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 54 65  ame = Path.GetTe
228c0 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a 20  mpFileName();.. 
228d0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
228e0 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61  g directory = Pa
228f0 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e  th.GetDirectoryN
22900 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  ame(fileName);..
22910 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
22920 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  ng fileNameOnly 
22930 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
22940 6d 65 57 69 74 68 6f 75 74 45 78 74 65 6e 73 69  meWithoutExtensi
22950 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  on(fileName);...
22960 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
22970 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d 65 20  ing newFileName 
22980 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
22990 69 72 65 63 74 6f 72 79 2c 20 53 74 72 69 6e 67  irectory, String
229a0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
229b0 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b 31            "{0}{1
229c0 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43 61 74 65  }{2}", traceCate
229d0 67 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e 49 73  gory, !String.Is
229e0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79 70 65  NullOrEmpty(type
229f0 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20  Name) ?..       
22a00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 22               "."
22a10 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20 53 74   + typeName : St
22a20 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e 22 20  ring.Empty, "." 
22a30 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 2b  + fileNameOnly +
22a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22a50 20 20 20 20 20 20 4c 6f 67 46 69 6c 65 53 75 66        LogFileSuf
22a60 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fix));....      
22a70 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28        File.Move(
22a80 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46 69 6c  fileName, newFil
22a90 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
22aa0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
22ab0 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  wFileName;..    
22ac0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22ad0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22b20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
22b30 69 63 20 76 6f 69 64 20 41 70 70 44 65 62 75 67  ic void AppDebug
22b40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
22b50 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a  tring message,..
22b60 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
22b70 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20  ng category..   
22b80 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
22b90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22ba0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
22bb0 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72  gCore(String.For
22bc0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
22bd0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
22be0 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63  ebugFormat, Trac
22bf0 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67 49 64  eOps.NextDebugId
22c00 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  (),..           
22c10 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69       TraceOps.Ti
22c20 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65  meStamp(DateTime
22c30 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67  .UtcNow), messag
22c40 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  e), category);..
22c50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22c60 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22cb0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22cc0 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70 54  static void AppT
22cd0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
22ce0 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
22cf0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
22d00 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d  string category.
22d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
22d20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22d30 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
22d40 54 72 61 63 65 43 6f 72 65 28 53 74 72 69 6e 67  TraceCore(String
22d50 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
22d60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
22d70 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 20  ps.TraceFormat, 
22d80 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54 72 61  TraceOps.NextTra
22d90 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20  ceId(),..       
22da0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
22db0 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65  s.TimeStamp(Date
22dc0 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65  Time.UtcNow), me
22dd0 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79  ssage), category
22de0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
22df0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
22e00 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
22e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e50 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22e60 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63 20  #region Generic 
22e70 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e  Platform Handlin
22e80 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
22e90 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49  te static bool I
22ea0 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 0d  s64BitProcess().
22eb0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
22ec0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
22ed0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
22ee0 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   Returns true if
22ef0 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
22f00 63 65 73 73 20 69 73 20 36 34 2d 62 69 74 2e 20  cess is 64-bit. 
22f10 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20   If this..      
22f20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
22f30 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e 6f 77  s true, we *know
22f40 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74 20 62  * that we must b
22f50 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36  e running on a 6
22f60 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20  4-bit..         
22f70 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72     //       oper
22f80 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61 73 20  ating system as 
22f90 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72 2c 20  well.  However, 
22fa0 69 66 20 74 68 69 73 20 69 73 20 66 61 6c 73 65  if this is false
22fb0 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20 20 20  , we..          
22fc0 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20 6e 6f    //       do no
22fd0 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
22fe0 6f 77 20 74 68 61 74 20 77 65 20 61 72 65 20 72  ow that we are r
22ff0 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32 2d 62  unning on a 32-b
23000 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  it..            
23010 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74 69  //       operati
23020 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65 20 74  ng system, due t
23030 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32 2d 6f  o WoW64 (Win32-o
23040 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e 0d 0a  n-Win64), etc...
23050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
23060 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23070 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a 65 20  rn (IntPtr.Size 
23080 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 29  == sizeof(long))
23090 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69 6e 74  ; // NOTE: Point
230a0 65 72 20 69 73 20 36 34 2d 62 69 74 73 3f 0d 0a  er is 64-bits?..
230b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
230c0 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
23110 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23120 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 53 75  static bool IsSu
23130 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 0d  pportedRootKey(.
23140 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
23150 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74  kRegistry regist
23160 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
23170 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
23180 20 72 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20   rootKey..      
23190 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
231a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
231b0 72 65 74 75 72 6e 20 4f 62 6a 65 63 74 2e 52 65  return Object.Re
231c0 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f  ferenceEquals(ro
231d0 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e  otKey, registry.
231e0 43 75 72 72 65 6e 74 55 73 65 72 29 20 7c 7c 0d  CurrentUser) ||.
231f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23200 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63   Object.Referenc
23210 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
23220 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   registry.LocalM
23230 61 63 68 69 6e 65 29 3b 0d 0a 20 20 20 20 20 20  achine);..      
23240 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
23250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23290 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
232a0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
232b0 20 73 74 72 69 6e 67 20 47 65 74 52 6f 6f 74 4b   string GetRootK
232c0 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
232d0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
232e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
232f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23300 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
23310 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
23320 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e 61 6d  {1}", RootKeyNam
23330 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
23340 20 20 20 20 77 6f 77 36 34 20 26 26 20 49 73 36      wow64 && Is6
23350 34 42 69 74 50 72 6f 63 65 73 73 28 29 20 3f 0d  4BitProcess() ?.
23360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23370 20 20 20 20 20 22 5c 5c 22 20 2b 20 57 6f 77 36       "\\" + Wow6
23380 34 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20 53 74  4SubKeyName : St
23390 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20  ring.Empty);..  
233a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
233b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
233c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23400 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
23410 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53  atic string GetS
23420 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 0d  ystemDirectory(.
23430 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
23440 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
23450 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
23460 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a  {..#if WINDOWS..
23470 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23480 77 6f 77 36 34 29 0d 0a 20 20 20 20 20 20 20 20  wow64)..        
23490 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
234a0 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65         if (syste
234b0 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20  mDirectoryWow64 
234c0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
234d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234f0 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
23500 57 6f 77 36 34 20 3d 0d 0a 20 20 20 20 20 20 20  Wow64 =..       
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23520 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
23530 68 6f 64 73 2e 47 65 74 53 79 73 74 65 6d 44 69  hods.GetSystemDi
23540 72 65 63 74 6f 72 79 28 29 3b 0d 0a 20 20 20 20  rectory();..    
23550 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23570 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69   return systemDi
23580 72 65 63 74 6f 72 79 57 6f 77 36 34 3b 0d 0a 20  rectoryWow64;.. 
23590 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
235a0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
235b0 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
235c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
235d0 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65         if (syste
235e0 6d 44 69 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75  mDirectory == nu
235f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
23600 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 44           systemD
23610 69 72 65 63 74 6f 72 79 20 3d 20 45 6e 76 69 72  irectory = Envir
23620 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44 69 72  onment.SystemDir
23630 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20  ectory;....     
23640 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23650 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72  n systemDirector
23660 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
23670 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
23680 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
23690 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
236a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
236f0 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 53  region Generic S
23700 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a  tring Handling..
23710 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23720 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f  static string Fo
23730 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
23740 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
23750 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
23760 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
23770 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
23780 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
23790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
237a0 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d  eturn "<null>";.
237b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
237c0 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20  tring result;.. 
237d0 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20             Type 
237e0 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47 65 74  type = value.Get
237f0 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Type();....     
23800 20 20 20 20 20 20 20 69 66 20 28 74 79 70 65 20         if (type 
23810 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65  == typeof(XmlEle
23820 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20 20 20  ment))..        
23830 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23840 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
23850 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c  t element = (Xml
23860 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a  Element)value;..
23870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23880 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65    result = eleme
23890 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20  nt.OuterXml;..  
238a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
238b0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
238c0 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
238d0 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20  (Version))..    
238e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
238f0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
23900 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28 56 65  on version = (Ve
23910 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a  rsion)value;....
23920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23930 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e  result = String.
23940 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 76  Format("v{0}", v
23950 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  ersion);..      
23960 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23970 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
23980 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23990 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
239a0 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e   = value.ToStrin
239b0 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  g();....        
239c0 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
239d0 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 0d  lt.Length == 0).
239e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239f0 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c 65 6d       return "<em
23a00 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  pty>";....      
23a10 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
23a20 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
23a30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23a40 20 20 20 20 20 20 20 74 79 70 65 2e 49 73 53 75         type.IsSu
23a50 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f 66 28  bclassOf(typeof(
23a60 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20 22 7b  ValueType)) ? "{
23a70 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c  0}" : "\"{0}\"",
23a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a90 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b 0d 0a        result);..
23aa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
23ac0 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
23ad0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23ae0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
23af0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b20 2f 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 0d 0a 0d  /////////////...
23b40 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
23b50 20 41 73 73 65 6d 62 6c 79 20 41 74 74 72 69 62   Assembly Attrib
23b60 75 74 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ute Handling..  
23b70 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
23b80 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
23b90 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74  semblyConfigurat
23ba0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
23bb0 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
23bc0 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bly..           
23bd0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
23be0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
23bf0 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29  ssembly != null)
23c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23c20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
23c30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
23c50 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66 69  (assembly.IsDefi
23c60 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ned(..          
23c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c80 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c    typeof(Assembl
23c90 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74  yConfigurationAt
23ca0 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29  tribute), false)
23cb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23cc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ce0 20 20 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67    AssemblyConfig
23cf0 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65  urationAttribute
23d00 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d   configuration =
23d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 41                (A
23d30 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
23d40 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 0d 0a  tionAttribute)..
23d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d60 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
23d70 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41 74  mbly.GetCustomAt
23d80 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20 20  tributes(..     
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23da0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
23db0 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67  f(AssemblyConfig
23dc0 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65  urationAttribute
23dd0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 20 20 20 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a      false)[0];..
23e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23e10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
23e20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   configuration.C
23e30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3b 0d 0a 20  onfiguration;.. 
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
23e60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23e70 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23ea0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
23eb0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
23ec0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23ed0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23ee0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
23ef0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
23f00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
23f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
23f60 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
23f70 67 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74  g GetAssemblyTit
23f80 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
23f90 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
23fa0 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
23fb0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
23fc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
23fd0 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d  sembly != null).
23fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24000 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
24010 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24020 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24030 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e  assembly.IsDefin
24040 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed(..           
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79   typeof(Assembly
24070 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 2c  TitleAttribute),
24080 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20   false))..      
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
240a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
240b0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
240c0 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 20  yTitleAttribute 
240d0 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20  title =..       
240e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240f0 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79 54 69       (AssemblyTi
24100 74 6c 65 41 74 74 72 69 62 75 74 65 29 0d 0a 20  tleAttribute).. 
24110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24120 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d             assem
24130 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41 74 74  bly.GetCustomAtt
24140 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20 20 20  ributes(..      
24150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24160 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
24170 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74  (AssemblyTitleAt
24180 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29  tribute), false)
24190 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [0];....        
241a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241b0 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54 69 74  return title.Tit
241c0 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le;..           
241d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
241e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
241f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
24200 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
24210 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24220 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
24230 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24250 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24260 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
24270 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
24280 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
24290 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
242a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
242b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
242f0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e         #region .
24300 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 48 61  NET Framework Ha
24310 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
24320 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
24330 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f  tring GetFramewo
24340 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a  rkRootKeyName(..
24350 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
24360 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
24370 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
24380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
24390 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
243a0 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f  at("{0}\\Microso
243b0 66 74 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72  ft\\.NETFramewor
243c0 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k",..           
243d0 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e       GetRootKeyN
243e0 61 6d 65 28 77 6f 77 36 34 29 29 3b 0d 0a 20 20  ame(wow64));..  
243f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24400 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24450 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
24460 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46  atic string GetF
24470 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28  rameworkKeyName(
24480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
24490 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
244a0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
244b0 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
244c0 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
244d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
244e0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
244f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
24500 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
24510 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
24520 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
24530 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72  ng format = !Str
24540 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
24550 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20  y(platformName) 
24560 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
24570 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
24580 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b  ft\\{1}\\v{2}\\{
24590 33 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  3}" :..         
245a0 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63         "{0}\\Mic
245b0 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32  rosoft\\{1}\\v{2
245c0 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  }";....         
245d0 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
245e0 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20  .Format(format, 
245f0 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77  GetRootKeyName(w
24600 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20  ow64),..        
24610 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
24620 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
24630 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
24640 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  mName);..       
24650 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
24660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
246b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
246c0 73 74 72 69 6e 67 20 47 65 74 49 6d 61 67 65 52  string GetImageR
246d0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
246e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
246f0 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  ng fileName..   
24700 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
24710 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24720 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
24730 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24740 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
24750 61 73 73 65 6d 62 6c 79 20 3d 0d 0a 20 20 20 20  assembly =..    
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74  Assembly.Reflect
24780 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28  ionOnlyLoadFrom(
24790 66 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  fileName); /* th
247a0 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  row */....      
247b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
247c0 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d  sembly != null).
247d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
247e0 20 20 20 20 20 72 65 74 75 72 6e 20 61 73 73 65       return asse
247f0 6d 62 6c 79 2e 49 6d 61 67 65 52 75 6e 74 69 6d  mbly.ImageRuntim
24800 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  eVersion;..     
24810 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
24820 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
24830 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
24850 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
24860 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24870 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24880 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
24890 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
248a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
248f0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
24900 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72  ring GetFramewor
24910 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20  kDirectory(..   
24920 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
24930 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
24940 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
24950 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
24960 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
24970 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
24980 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
24990 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
249a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
249b0 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
249c0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
249d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
249e0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
249f0 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
24a00 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
24a10 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
24a20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
24a30 79 2c 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52  y, GetFrameworkR
24a40 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34  ootKeyName(wow64
24a50 29 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20  ), false,..     
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
24a70 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
24a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
24a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24aa0 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
24ab0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24ac0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
24ad0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
24ae0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
24af0 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48 65  lue = RegistryHe
24b00 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a  lper.GetValue(..
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c      key, "Instal
24b30 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20 77 68  lRoot", null, wh
24b40 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
24b50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24b60 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
24b70 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b90 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bb0 72 65 74 75 72 6e 20 50 61 74 68 2e 43 6f 6d 62  return Path.Comb
24bc0 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ine(..          
24bd0 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
24be0 67 29 76 61 6c 75 65 2c 20 53 74 72 69 6e 67 2e  g)value, String.
24bf0 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 66  Format("v{0}", f
24c00 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
24c10 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
24c20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
24c30 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
24c40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
24c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
24ca0 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61 6d 65  region Per-Frame
24cb0 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20 48 61  work/Platform Ha
24cc0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
24cd0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
24ce0 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 46 72  oid InitializeFr
24cf0 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a 20 20  ameworkList(..  
24d00 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
24d10 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
24d20 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
24d30 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
24d40 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
24d50 20 20 20 20 20 20 20 20 20 20 72 65 66 20 46 72            ref Fr
24d60 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
24d70 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20  eworkList..     
24d80 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
24d90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24da0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
24db0 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
24dd0 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 65 77  meworkList = new
24de0 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29   FrameworkList()
24df0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24e00 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
24e10 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  st.RootKey == nu
24e20 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
24e30 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
24e40 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f  st.RootKey = roo
24e50 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
24e60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
24e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ea0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24eb0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
24ec0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
24ed0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24ee0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24ef0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
24f00 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 20 6e  rkList.Names = n
24f10 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b  ew StringList();
24f20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24f30 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
24f40 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
24f50 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
24f60 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20  n.NoDesktop)..  
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f80 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
24f90 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 46  Names.Add(".NETF
24fa0 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d 0a 20  ramework");.... 
24fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
24fc0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
24fd0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
24fe0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43  onfiguration.NoC
24ff0 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
25000 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25020 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
25030 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d  mes.Add(".NETCom
25040 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b  pactFramework");
25050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25060 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
25070 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e  ist.Names.Add(".
25080 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77  NETCompactFramew
25090 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ork");..        
250a0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
250b0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
250c0 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
250d0 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20  Framework");..  
250e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
250f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
25160 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
25170 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e  st.Versions == n
25180 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
25190 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
251a0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
251b0 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65  st.Versions = ne
251c0 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 3b 0d  w VersionMap();.
251d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
251e0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
251f0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
25200 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
25210 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20  .NoDesktop)..   
25220 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20      VersionList 
25250 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
25260 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e  st = new Version
25270 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25290 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
252a0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
252b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
252c0 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20 20 20  etFx20)..       
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252e0 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
252f0 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
25300 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32 37 29  ion(2, 0, 50727)
25310 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
25320 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
25330 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
25340 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
25350 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34  uration.NoNetFx4
25360 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
25370 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
25380 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  topVersionList.A
25390 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34  dd(new Version(4
253a0 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d 0a 0d  , 0, 30319));...
253b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
253c0 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
253d0 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
253e0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
253f0 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 29 0d 0a 20  on.NoNetFx45).. 
25400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25410 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65         desktopVe
25420 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
25430 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c 20  w Version(4, 5, 
25440 35 30 37 30 39 29 29 3b 0d 0a 0d 0a 20 20 20 20  50709));....    
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25460 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
25470 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54  rsions.Add(".NET
25480 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20  Framework",..   
25490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254a0 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
254b0 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20  ionList);..     
254c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254e0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
254f0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
25500 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
25510 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  Compact)..      
25520 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25540 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56   frameworkList.V
25550 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45  ersions.Add(".NE
25560 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72  TCompactFramewor
25570 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k",..           
25580 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
25590 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77   VersionList(new
255a0 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20   Version[] {..  
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255c0 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f        new Versio
255d0 6e 28 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e  n(2, 0, 0, 0), n
255e0 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c  ew Version(3, 5,
255f0 20 30 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20   0, 0)..        
25600 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b              }));
25610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25620 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
25630 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25640 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25650 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25690 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
256a0 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
256b0 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
256c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
256d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
256e0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
256f0 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20  formNames = new 
25700 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d  StringList();...
25710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25720 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
25730 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
25740 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
25750 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20  oDesktop)..     
25760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
25770 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
25780 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e  tformNames.Add(n
25790 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ull);....       
257a0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
257b0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
257c0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
257d0 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74  ration.NoCompact
257e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
257f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25800 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
25810 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
25820 4e 61 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65  Names.Add("Pocke
25830 74 50 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  tPC");..        
25840 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
25850 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
25860 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61  rmNames.Add("Sma
25870 72 74 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20  rtphone");..    
25880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25890 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
258a0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28  atformNames.Add(
258b0 22 57 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20  "WindowsCE");.. 
258c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
258d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
258e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
258f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25940 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25950 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76   static bool Hav
25960 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74  eFrameworkDirect
25970 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
25980 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
25990 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
259a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
259b0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
259c0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
259d0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
259e0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
259f0 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
25a00 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
25a10 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
25a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
25a30 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
25a40 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
25a50 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
25a60 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
25a70 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
25a80 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46  g keyName = GetF
25a90 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28  rameworkKeyName(
25aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25ab0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
25ac0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
25ad0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
25ae0 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
25af0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
25b00 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
25b10 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
25b20 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
25b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25b40 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
25b50 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
25b60 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
25b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b90 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
25ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25bb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
25bc0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
25bd0 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66         if (platf
25be0 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  ormName != null)
25bf0 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e   // NOTE: Skip n
25c00 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20  on-desktop...   
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d   return true;...
25c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25c40 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
25c50 79 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  y = GetFramework
25c60 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
25c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c80 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
25c90 72 6b 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34  rkVersion, wow64
25ca0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
25cb0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
25cc0 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
25cd0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
25ce0 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d00 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
25d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25d20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79    if (!Directory
25d30 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72  .Exists(director
25d40 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
25d50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25d60 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
25d70 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
25d80 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
25d90 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
25da0 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
25db0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
25dc0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
25dd0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
25de0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
25df0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
25e00 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
25e10 20 66 6f 75 6e 64 20 76 69 61 20 64 69 72 65 63   found via direc
25e20 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20  tory {1}.",..   
25e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e40 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
25e50 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46  eworkVersion), F
25e60 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74  orDisplay(direct
25e70 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ory)),..        
25e80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
25e90 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
25ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25eb0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
25ec0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25ed0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25ee0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f20 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
25f30 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
25f40 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61 6d  ic bool HaveFram
25f50 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a  eworkRegistry(..
25f60 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
25f70 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
25f80 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
25f90 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
25fa0 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
25fb0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
25fc0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
25fd0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
25fe0 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
25ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
26000 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
26010 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
26020 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
26030 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
26040 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
26050 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26060 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
26070 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f  ame = GetFramewo
26080 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rkKeyName(..    
26090 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
260a0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
260b0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
260c0 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34  tformName, wow64
260d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
260e0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
260f0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
26100 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
26110 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
26120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
26130 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
26140 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
26150 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
26160 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26170 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
26180 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
261b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
261c0 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d   if (platformNam
261d0 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f  e != null) // NO
261e0 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73  TE: Skip non-des
261f0 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20  ktop...         
26200 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26210 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  n true;....     
26220 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
26230 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
26240 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
26250 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
26260 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
26270 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
26280 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
26290 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
262b0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
262c0 7d 20 66 6f 75 6e 64 20 76 69 61 20 72 65 67 69  } found via regi
262d0 73 74 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20  stry {1}.",..   
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262f0 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
26300 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46  eworkVersion), F
26310 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 4e 61 6d  orDisplay(keyNam
26320 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
26330 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
26340 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26360 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
26370 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
26380 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
26390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263b0 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
263e0 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
263f0 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
26400 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
26410 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
26420 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63  atic bool ForEac
26430 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67  hFrameworkConfig
26440 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
26450 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69  ockRegistry regi
26460 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  stry,..         
26470 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74     FrameworkList
26480 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d   frameworkList,.
26490 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61  .            Fra
264a0 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c 6c  meworkConfigCall
264b0 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a  back callback,..
264c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
264d0 6e 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e  ng version, /* N
264e0 4f 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a  OTE: Optional. *
264f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  /..            s
26500 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
26510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
26520 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
26530 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
26540 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
26550 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
26560 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
26570 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
26580 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
26590 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
265a0 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
265b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
265c0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
265d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
265e0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
265f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
26600 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
26610 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
26620 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
26630 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a  ef bool saved,..
26640 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
26650 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
26660 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
26670 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26680 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79      if (registry
26690 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
266a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
266b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
266c0 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73  = "invalid regis
266d0 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  try";..         
266e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
266f0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
26700 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26710 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
26720 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
26730 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
26750 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
26760 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d  ramework list";.
26770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26780 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
26790 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
267a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
267b0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
267c0 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b  tKey = framework
267d0 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d  List.RootKey;...
267e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
267f0 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  (rootKey == null
26800 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
26810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26820 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
26830 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20  id root key";.. 
26840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
26850 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
26860 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26870 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
26880 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b  IsSupportedRootK
26890 65 79 28 72 65 67 69 73 74 72 79 2c 20 72 6f 6f  ey(registry, roo
268a0 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tKey))..        
268b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
268c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
268d0 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65  root key must be
268e0 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72   per-user or per
268f0 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20  -machine";..    
26900 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
26910 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
26920 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26930 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
26940 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
26950 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
26960 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26970 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
26980 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e   "no framework n
26990 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ames found";..  
269a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
269b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
269c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
269d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
269e0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
269f0 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
26a00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
26a20 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77  ror = "no framew
26a30 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75  ork versions fou
26a40 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
26a50 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
26a60 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
26a70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
26a80 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
26a90 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
26aa0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
26ab0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26ac0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
26ad0 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20   = "no platform 
26ae0 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
26af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
26b00 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
26b10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26b20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
26b30 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
26b40 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d  es.Count != fram
26b50 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
26b60 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a  rmNames.Count)..
26b70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
26b90 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
26ba0 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20  rmat("framework 
26bb0 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64  name count {0} d
26bc0 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20  oes not " +..   
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26be0 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d   "match platform
26bf0 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22   name count {1}"
26c00 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  , frameworkList.
26c10 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20  Names.Count,..  
26c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c30 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
26c40 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
26c50 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
26c60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26c70 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
26c80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26c90 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
26ca0 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
26cb0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
26cc0 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65  ames.Count; inde
26cd0 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
26ce0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26cf0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
26d00 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
26d10 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20  : Grab the name 
26d20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b  of the framework
26d30 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d   (e.g. ".NETFram
26d40 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20  ework")..       
26d50 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
26d60 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f    and the name o
26d70 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28  f the platform (
26d80 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22  e.g. "WindowsCE"
26d90 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
26da0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
26db0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
26dc0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66  rameworkName = f
26dd0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
26de0 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20  es[index];..    
26df0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
26e00 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  ng platformName 
26e10 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
26e20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e  PlatformNames[in
26e30 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
26e40 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
26e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
26e60 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e  NOTE: Skip all n
26e70 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d 65  on-desktop frame
26e80 77 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66 20 74  works (i.e. if t
26e90 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20  he platform..   
26ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
26eb0 20 20 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f        name is no
26ec0 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20  t null)...      
26ed0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
26ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26ef0 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21   (platformName !
26f00 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
26f10 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
26f20 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
26f30 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
26f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26f50 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
26f60 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f  supported versio
26f70 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69  ns of this parti
26f80 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20  cular..         
26f90 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
26fa0 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20  framework...    
26fb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
26fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fd0 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d  VersionList fram
26fe0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
26ff0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27000 20 20 20 20 20 69 66 20 28 76 65 72 73 69 6f 6e       if (version
27010 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
27020 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27040 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
27050 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
27060 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69  E: Manual overri
27070 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20  de of the *ONE* 
27080 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  framework versio
27090 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
270a0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
270b0 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20  to process...   
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
270e0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
270f0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20  rkVersionList = 
27100 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
27110 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
27120 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
27130 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  kVersionList.Add
27140 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76 65 72  (new Version(ver
27150 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  sion));..       
27160 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
27170 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
27180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27190 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
271a0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66 72           if (!fr
271b0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
271c0 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65  ions.TryGetValue
271d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
271e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
271f0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75  rameworkName, ou
27200 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t frameworkVersi
27210 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20  onList) ||..    
27220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27230 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65      (frameworkVe
27240 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c  rsionList == nul
27250 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
27260 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27280 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
272b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
272c0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
272d0 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d  ch (Version fram
272e0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20  eworkVersion in 
272f0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27300 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20  List)..         
27310 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
27330 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
27340 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
27350 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20  ty.Lower,..     
27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27370 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
27380 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
27390 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
273a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
273b0 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65 77           "framew
273c0 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66  orkName = {0}, f
273d0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
273e0 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  = {1}, " +..    
273f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27400 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d      "platformNam
27410 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73  e = {2}", ForDis
27420 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61  play(frameworkNa
27430 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
27440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
27450 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
27460 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  rkVersion),..   
27470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27480 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
27490 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20  platformName)), 
274a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
274b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
274c0 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65         if (!Have
274d0 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f  FrameworkDirecto
274e0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
274f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27500 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
27510 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
27520 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
27530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27540 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
27550 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 77 68 61  Name, wow64, wha
27560 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
27570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27580 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
275a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
275b0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
275c0 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
275d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275e0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
275f0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
27600 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
27610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27620 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
27630 20 64 69 72 65 63 74 6f 72 79 20 6e 6f 74 20 66   directory not f
27640 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e  ound, skipping..
27650 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
27660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27670 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
27680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27690 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
276a0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
276b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
276c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276d0 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b      if (callback
276e0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
276f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27700 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
27710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27720 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
27730 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65 77  tory = GetFramew
27740 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  orkDirectory(.. 
27750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27760 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
27770 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27780 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
27790 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277b0 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
277c0 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63  ullOrEmpty(direc
277d0 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
277e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
277f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27800 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
27810 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
27820 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
27830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
27850 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
27860 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
27870 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27890 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
278a0 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65  amework {0} dire
278b0 63 74 6f 72 79 20 69 73 20 69 6e 76 61 6c 69 64  ctory is invalid
278c0 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
278d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278e0 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
278f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
27900 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c  meworkVersion)),
27910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
27930 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
27940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27950 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
27960 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27970 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27990 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74   directory = Pat
279a0 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
279b0 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22 29 3b 0d  ory, "Config");.
279c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
279d0 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65         if (!Dire
279e0 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72  ctory.Exists(dir
279f0 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
27a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
27a30 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
27a40 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
27a50 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
27a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a70 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
27a80 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
27a90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
27aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ab0 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
27ac0 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69  Framework {0} di
27ad0 72 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f 65 73  rectory {1} does
27ae0 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20   not " +..      
27af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b00 20 20 20 20 20 20 22 65 78 69 73 74 2c 20 73 6b        "exist, sk
27b10 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44  ipping...", ForD
27b20 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
27b30 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
27b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b50 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
27b60 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 20 74  y(directory)), t
27b70 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
27b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27b90 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
27ba0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
27bb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bd0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
27be0 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
27bf0 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d 61 63  (directory, "mac
27c00 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b 0d 0a  hine.config");..
27c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c20 20 20 20 20 20 20 69 66 20 28 21 46 69 6c 65 2e        if (!File.
27c30 45 78 69 73 74 73 28 66 69 6c 65 4e 61 6d 65 29  Exists(fileName)
27c40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27c50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c70 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
27c80 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
27c90 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cb0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
27cc0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
27cd0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
27ce0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
27cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d00 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
27d10 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31 7d 20  rk {0} file {1} 
27d20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
27d30 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
27d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d50 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20   "skipping...", 
27d60 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
27d70 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  workVersion),.. 
27d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d90 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
27da0 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65 29 29  splay(fileName))
27db0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
27dc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
27de0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
27df0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e10 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c 53       bool localS
27e20 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  aved = false;...
27e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e40 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61       if (!callba
27e50 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
27e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e70 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72   fileName, invar
27e80 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63  iant, name, desc
27e90 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d  ription, typeNam
27ea0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
27eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ec0 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 63 6c  assemblyName, cl
27ed0 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36 34 2c  ientData, wow64,
27ee0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
27ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
27f10 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
27f20 65 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c 20 72  ef localSaved, r
27f30 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
27f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27f60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27f70 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
27f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
27f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27fa0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
27fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
27fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27fd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f            if (lo
27fe0 63 61 6c 53 61 76 65 64 20 26 26 20 21 73 61 76  calSaved && !sav
27ff0 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
28000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28010 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
28020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28030 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
28040 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
28050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28060 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
28070 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
28080 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
28090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
280a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280b0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
280c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
280d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28100 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b 30  "localSaved = {0
28110 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d 22 2c  }, saved = {1}",
28120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28140 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63    ForDisplay(loc
28150 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44 69 73  alSaved), ForDis
28160 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d 0a 20  play(saved)),.. 
28170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
28190 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
281a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
281c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
281d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
281e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
281f0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
28200 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
28210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28250 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
28260 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
28270 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
28280 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
28290 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
282a0 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d  bool ForEachFram
282b0 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a  eworkRegistry(..
282c0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
282d0 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72  Registry registr
282e0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
282f0 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
28300 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20  ameworkList,..  
28310 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
28320 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62  orkRegistryCallb
28330 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ack callback,.. 
28340 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
28350 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f  g version, /* NO
28360 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f  TE: Optional. */
28370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
28380 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
28390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
283a0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
283b0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
283c0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
283d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
283e0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
283f0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
28400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
28410 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
28420 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
28430 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28440 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73 74        if (regist
28450 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
28460 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28470 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
28480 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67  r = "invalid reg
28490 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20  istry";..       
284a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
284b0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
284c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
284d0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
284e0 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  rkList == null).
284f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28510 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
28520 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22   framework list"
28530 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28540 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
28550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28560 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
28570 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
28580 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f  ootKey = framewo
28590 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d  rkList.RootKey;.
285a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
285b0 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
285c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
285d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
285e0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
285f0 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
28600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28610 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
28620 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28630 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28640 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f  (!IsSupportedRoo
28650 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20 72  tKey(registry, r
28660 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20  ootKey))..      
28670 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28680 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
28690 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
286a0 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
286b0 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
286c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
286d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
286e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
286f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
28700 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
28710 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
28720 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28730 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
28740 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
28750 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
28760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28770 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
28780 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28790 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
287a0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
287b0 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
287c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
287d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287e0 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
287f0 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66  ework versions f
28800 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
28810 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
28820 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
28830 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28840 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
28850 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
28860 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
28870 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28880 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
28890 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72  or = "no platfor
288a0 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  m names found";.
288b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
288c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
288d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
288e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
288f0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
28900 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72  ames.Count != fr
28910 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
28920 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
28930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28950 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
28960 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72  Format("framewor
28970 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d  k name count {0}
28980 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
28990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289a0 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f     "match platfo
289b0 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31  rm name count {1
289c0 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  }", frameworkLis
289d0 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a  t.Names.Count,..
289e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289f0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
28a00 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
28a10 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
28a20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28a30 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
28a40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28a50 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
28a60 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
28a70 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   < frameworkList
28a80 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e  .Names.Count; in
28a90 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
28aa0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28ab0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
28ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
28ad0 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d  TE: Grab the nam
28ae0 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  e of the framewo
28af0 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72  rk (e.g. ".NETFr
28b00 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20  amework")..     
28b10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
28b20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65      and the name
28b30 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   of the platform
28b40 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43   (e.g. "WindowsC
28b50 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  E")...          
28b60 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
28b70 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
28b80 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d   frameworkName =
28b90 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
28ba0 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  ames[index];..  
28bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
28bc0 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
28bd0 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
28be0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b  t.PlatformNames[
28bf0 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
28c00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
28c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28c20 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
28c30 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69   supported versi
28c40 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74  ons of this part
28c50 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20  icular..        
28c60 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
28c70 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20   framework...   
28c80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
28c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28ca0 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61   VersionList fra
28cb0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
28cc0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
28cd0 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69 6f        if (versio
28ce0 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n != null)..    
28cf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d10 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
28d20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
28d30 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72  TE: Manual overr
28d40 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a  ide of the *ONE*
28d50 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   framework versi
28d60 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
28d70 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
28d80 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20   to process...  
28d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28da0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
28db0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
28dc0 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  orkVersionList =
28dd0 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
28de0 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
28df0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
28e00 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  rkVersionList.Ad
28e10 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76 65  d(new Version(ve
28e20 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20  rsion));..      
28e30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
28e40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
28e50 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
28e60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28e70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66            if (!f
28e80 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
28e90 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  sions.TryGetValu
28ea0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
28eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ec0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f  frameworkName, o
28ed0 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ut frameworkVers
28ee0 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20  ionList) ||..   
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f00 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56       (frameworkV
28f10 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75  ersionList == nu
28f20 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
28f30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f50 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
28f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
28f80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28f90 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
28fa0 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61  ach (Version fra
28fb0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e  meworkVersion in
28fc0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
28fd0 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20  nList)..        
28fe0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
29000 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
29010 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
29020 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
29030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29040 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
29050 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
29060 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
29070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29080 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65            "frame
29090 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20  workName = {0}, 
290a0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
290b0 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {1}, " +..   
290c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290d0 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61       "platformNa
290e0 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69  me = {2}", ForDi
290f0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e  splay(frameworkN
29100 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
29110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
29120 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
29130 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
29140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29150 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
29160 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c  (platformName)),
29170 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
29180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29190 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
291a0 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74  eFrameworkRegist
291b0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
291c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291d0 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
291e0 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
291f0 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
29200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29210 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
29220 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 77 68 61  Name, wow64, wha
29230 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
29240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29250 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
29270 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
29280 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
29290 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
292a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292b0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
292c0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
292d0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
292e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292f0 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
29300 20 72 65 67 69 73 74 72 79 20 6e 6f 74 20 66 6f   registry not fo
29310 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e  und, skipping...
29320 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
29330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29340 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
29350 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29360 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
29370 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
29380 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
29390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293a0 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20     if (callback 
293b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
293c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293d0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293f0 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b     if (!callback
29400 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29420 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
29430 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
29440 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
29450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29460 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61        platformNa
29470 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  me, clientData, 
29480 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69  wow64, throwOnMi
29490 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
294a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294b0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
294c0 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29  ose, ref error))
294d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
294e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
294f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29500 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
29510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29520 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29530 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29540 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29550 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
29560 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
29570 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
29580 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
29590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
295a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
295b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
295c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
295d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
295e0 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 56 69 73   #region Per-Vis
295f0 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72 73 69  ual Studio Versi
29600 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  on Handling..   
29610 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
29620 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c  tic void Initial
29630 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20 20 20  izeVsList(..    
29640 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
29650 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
29660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  ..            Co
29670 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
29680 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
29690 20 20 20 20 20 20 20 20 72 65 66 20 56 73 4c 69          ref VsLi
296a0 73 74 20 76 73 4c 69 73 74 0d 0a 20 20 20 20 20  st vsList..     
296b0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
296c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
296d0 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e   if (vsList == n
296e0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
296f0 20 20 20 20 20 20 76 73 4c 69 73 74 20 3d 20 6e        vsList = n
29700 65 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a  ew VsList();....
29710 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29720 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d  vsList.RootKey =
29730 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
29740 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
29750 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65  RootKey = rootKe
29760 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
29770 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72    if (vsList.Ver
29780 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
29790 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
297a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
297b0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  sList.Versions =
297c0 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
297d0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
297e0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
297f0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
29800 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
29810 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35 29 0d 0a  tion.NoVs2005)..
29820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29830 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69      vsList.Versi
29840 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
29850 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f 20 32  ion(8, 0)); // 2
29860 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  005....         
29870 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
29880 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
29890 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
298a0 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a  tion.NoVs2008)..
298b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298c0 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69      vsList.Versi
298d0 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
298e0 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f 20 32  ion(9, 0)); // 2
298f0 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  008....         
29900 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
29910 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
29920 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
29930 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a  tion.NoVs2010)..
29940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29950 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69      vsList.Versi
29960 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
29970 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f 20 32  ion(10, 0));// 2
29980 30 31 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  010....         
29990 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
299a0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
299b0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
299c0 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 32 29 0d 0a  tion.NoVs2012)..
299d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299e0 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69      vsList.Versi
299f0 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
29a00 69 6f 6e 28 31 31 2c 20 30 29 29 3b 2f 2f 20 32  ion(11, 0));// 2
29a10 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20  012..           
29a20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
29a30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
29a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
29a90 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
29aa0 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a  HaveVsVersion(..
29ab0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
29ac0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
29ad0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
29ae0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
29af0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
29b00 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
29b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
29b20 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
29b30 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
29b40 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
29b50 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
29b60 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
29b70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b80 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
29b90 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
29ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
29bb0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
29bc0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
29bd0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
29be0 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
29bf0 6e 2c 20 73 75 66 66 69 78 2c 20 77 6f 77 36 34  n, suffix, wow64
29c00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
29c10 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
29c20 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
29c30 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
29c40 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
29c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29c60 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
29c70 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
29c80 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
29c90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29ca0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
29cb0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
29cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cd0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
29ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29cf0 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
29d00 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47  RegistryHelper.G
29d10 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
29d30 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c  y, "InstallDir",
29d40 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76   null, whatIf, v
29d50 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
29d60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29d70 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
29d80 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
29d90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29da0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
29db0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
29dc0 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73 74   directory = (st
29dd0 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ring)value;.... 
29de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29df0 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
29e00 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
29e10 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
29e20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29e30 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
29e40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
29e50 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
29e60 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
29e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
29e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ea0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
29eb0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
29ec0 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
29ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ee0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
29ef0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
29f00 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
29f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29f20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 75       "Visual Stu
29f30 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69 6e  dio {0} found in
29f40 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22   directory {1}."
29f50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29f60 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
29f70 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20 46 6f  y(vsVersion), Fo
29f80 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f  rDisplay(directo
29f90 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ry)),..         
29fa0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
29fb0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
29fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29fd0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
29fe0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
29ff0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a040 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a050 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2a060 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2a070 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2a080 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2a090 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61  tatic bool ForEa
2a0a0 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73  chVsVersionRegis
2a0b0 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
2a0c0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72    MockRegistry r
2a0d0 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
2a0e0 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c        VsList vsL
2a0f0 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ist,..          
2a100 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65    VisualStudioRe
2a110 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63  gistryCallback c
2a120 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
2a130 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
2a140 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
2a150 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
2a160 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2a170 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
2a180 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
2a190 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2a1a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
2a1b0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2a1c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a1d0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2a1e0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2a1f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2a200 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2a210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2a220 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2a230 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
2a240 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
2a250 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2a270 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
2a280 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
2a290 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a2a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2a2b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a2c0 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73         if (vsLis
2a2d0 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
2a2e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a2f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2a300 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 6c   = "invalid VS l
2a310 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist";..         
2a320 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2a330 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2a340 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a350 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2a360 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 76 73 4c  ey rootKey = vsL
2a370 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a  ist.RootKey;....
2a380 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a390 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  rootKey == null)
2a3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a3c0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2a3d0 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20  d root key";..  
2a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a3f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2a400 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2a410 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 49            if (!I
2a420 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65  sSupportedRootKe
2a430 79 28 72 65 67 69 73 74 72 79 2c 20 72 6f 6f 74  y(registry, root
2a440 4b 65 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  Key))..         
2a450 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a460 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72        error = "r
2a470 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20  oot key must be 
2a480 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d  per-user or per-
2a490 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20  machine";..     
2a4a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a4b0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2a4c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a4d0 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73         if (vsLis
2a4e0 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75  t.Versions == nu
2a4f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a500 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a510 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
2a520 56 53 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e  VS versions foun
2a530 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
2a540 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2a550 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2a560 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a570 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f   foreach (Versio
2a580 6e 20 76 73 56 65 72 73 69 6f 6e 20 69 6e 20 76  n vsVersion in v
2a590 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 29 0d  sList.Versions).
2a5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5c0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2a5d0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2a5e0 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
2a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a600 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2a610 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2a620 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a640 20 20 20 22 76 73 56 65 72 73 69 6f 6e 20 3d 20     "vsVersion = 
2a650 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {0}", ForDisplay
2a660 28 76 73 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  (vsVersion)),.. 
2a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a680 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2a690 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a6a0 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65 56        if (!HaveV
2a6b0 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20  sVersion(..     
2a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6d0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
2a6e0 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 77  rsion, suffix, w
2a6f0 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
2a700 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2a710 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a730 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2a740 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2a750 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
2a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a770 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2a780 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2a790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a7a0 20 20 20 20 20 20 20 20 20 20 22 56 69 73 75 61            "Visua
2a7b0 6c 20 53 74 75 64 69 6f 20 76 65 72 73 69 6f 6e  l Studio version
2a7c0 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70   not found, skip
2a7d0 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  ping...",..     
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7f0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2a800 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a810 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2a820 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2a830 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2a840 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
2a850 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
2a860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a870 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
2a880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a890 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
2a8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a8b0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2a8c0 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  y, vsVersion, su
2a8d0 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 63  ffix, package, c
2a8e0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a900 20 20 20 20 77 6f 77 36 34 2c 20 74 68 72 6f 77      wow64, throw
2a910 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49  OnMissing, whatI
2a920 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
2a930 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
2a940 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a960 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a990 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2a9a0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2a9b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2a9c0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
2a9d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2a9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2aa20 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2aa30 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 46   Configuration F
2aa40 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ile Handling..  
2aa50 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
2aa60 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
2aa70 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
2aa80 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2aa90 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
2aaa0 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  dDbProviderFacto
2aab0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2aac0 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
2aad0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2aae0 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
2aaf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2ab00 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
2ab10 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2ab20 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
2ab30 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2ab40 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
2ab50 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
2ab60 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
2ab70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2ab80 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2ab90 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2aba0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2abb0 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
2abc0 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
2abd0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2abe0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2abf0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2ac00 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69           bool di
2ac10 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  rty = false;..  
2ac20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63            XmlDoc
2ac30 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d  ument document =
2ac40 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74   new XmlDocument
2ac50 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2ac60 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73     document.Pres
2ac70 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d  erveWhitespace =
2ac80 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2ac90 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61      document.Loa
2aca0 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  d(fileName);....
2acb0 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
2acc0 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e  lement addElemen
2acd0 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
2ace0 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
2acf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad00 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50  String.Format(XP
2ad10 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74  athForAddElement
2ad20 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73  , invariant)) as
2ad30 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
2ad40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ad50 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75  addElement == nu
2ad60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2ad70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ad80 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65      string[] ele
2ad90 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20  mentNames = {.. 
2ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adb0 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74 61 22     "system.data"
2adc0 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46 61 63  , "DbProviderFac
2add0 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20 20 20  tories"..       
2ade0 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20           };.... 
2adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58                 X
2ae00 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f  mlElement previo
2ae10 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20  usElement =..   
2ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae30 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65   document.Docume
2ae40 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f  ntElement; /* co
2ae50 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a  nfiguration */..
2ae60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ae70 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e    foreach (strin
2ae80 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e  g elementName in
2ae90 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a   elementNames)..
2aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aeb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2aec0 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
2aed0 74 20 3d 20 70 72 65 76 69 6f 75 73 45 6c 65 6d  t = previousElem
2aee0 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
2aef0 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2af10 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20 58  lementName) as X
2af20 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
2af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af40 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74    if (addElement
2af50 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2af70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2af80 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
2af90 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
2afa0 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a  CreateElement(..
2afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2afc0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d              elem
2afd0 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e  entName, String.
2afe0 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  Empty);....     
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b000 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65     previousEleme
2b010 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61  nt.AppendChild(a
2b020 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  ddElement);..   
2b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b040 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b050 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
2b060 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61 64 64 45  usElement = addE
2b070 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20  lement;..       
2b080 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2b0a0 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d  dElement = docum
2b0b0 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e  ent.CreateElemen
2b0c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2b0d0 20 20 20 20 20 20 20 20 22 61 64 64 22 2c 20 53          "add", S
2b0e0 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d  tring.Empty);...
2b0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b100 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
2b110 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64  .AppendChild(add
2b120 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20  Element);....   
2b130 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2b140 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2b150 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b160 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
2b170 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45  ring.Equals(addE
2b180 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62  lement.GetAttrib
2b190 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20 20  ute("name"),..  
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1b0 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f    name, StringCo
2b1c0 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
2b1d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2b1e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b1f0 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65     addElement.Se
2b200 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65  tAttribute("name
2b210 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ", name);..     
2b220 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
2b230 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2b240 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b250 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
2b260 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65  ng.Equals(addEle
2b270 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74  ment.GetAttribut
2b280 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d  e("invariant"),.
2b290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b2a0 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74 2c 20       invariant, 
2b2b0 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
2b2c0 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20  .Ordinal))..    
2b2d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b2e0 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
2b2f0 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75  ement.SetAttribu
2b300 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 2c 20  te("invariant", 
2b310 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20 20 20  invariant);..   
2b320 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2b330 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2b340 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b350 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
2b360 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45  ring.Equals(addE
2b370 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62  lement.GetAttrib
2b380 75 74 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e  ute("description
2b390 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
2b3a0 20 20 20 20 20 20 20 20 20 64 65 73 63 72 69 70           descrip
2b3b0 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70  tion, StringComp
2b3c0 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
2b3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b3f0 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41   addElement.SetA
2b400 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69  ttribute("descri
2b410 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74  ption", descript
2b420 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion);..         
2b430 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
2b440 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2b450 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b460 20 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79     string fullTy
2b470 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e  peName = String.
2b480 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d  Format("{0}, {1}
2b490 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2b4a0 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73      typeName, as
2b4b0 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  semblyName);....
2b4c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b4d0 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
2b4e0 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
2b4f0 72 69 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d  ribute("type"),.
2b500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b510 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d       fullTypeNam
2b520 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  e, StringCompari
2b530 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
2b540 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2b560 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72  dElement.SetAttr
2b570 69 62 75 74 65 28 22 74 79 70 65 22 2c 20 66 75  ibute("type", fu
2b580 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20  llTypeName);..  
2b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2b5a0 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2b5b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b5c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
2b5d0 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a  rty || whatIf)..
2b5e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2b600 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
2b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b620 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2b630 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2b640 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
2b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b660 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2b670 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2b680 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2b690 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61                "a
2b6b0 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22  ddElement = {0}"
2b6c0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64  , ForDisplay(add
2b6d0 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20  Element)),..    
2b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6f0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2b700 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2b710 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
2b720 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
2b730 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
2b740 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29  t.Save(fileName)
2b750 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b760 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69       filesModifi
2b770 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed++;....       
2b780 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d           saved =
2b790 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2b7a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b7b0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2b7c0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2b7d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2b7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2b820 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
2b830 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2b840 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2b850 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
2b860 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2b870 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69  ol RemoveDbProvi
2b880 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
2b890 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2b8a0 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
2b8b0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
2b8c0 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
2b8d0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2b8e0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2b8f0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2b900 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
2b910 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
2b920 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2b930 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2b940 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2b950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b960 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c  bool dirty = fal
2b970 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2b980 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63   XmlDocument doc
2b990 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44  ument = new XmlD
2b9a0 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20  ocument();....  
2b9b0 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
2b9c0 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74 65  nt.PreserveWhite
2b9d0 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20  space = true;.. 
2b9e0 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
2b9f0 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d  ent.Load(fileNam
2ba00 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2ba10 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61 64     XmlElement ad
2ba20 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d  dElement = docum
2ba30 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
2ba40 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
2ba50 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
2ba60 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41 64 64  rmat(XPathForAdd
2ba70 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61  Element, invaria
2ba80 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65  nt)) as XmlEleme
2ba90 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  nt;....         
2baa0 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e     if (addElemen
2bab0 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
2bac0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2bad0 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
2bae0 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65  ement.ParentNode
2baf0 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 61 64 64  .RemoveChild(add
2bb00 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20  Element);..     
2bb10 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
2bb20 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2bb30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2bb40 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
2bb50 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20  t removeElement 
2bb60 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63  = document.Selec
2bb70 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20  tSingleNode(..  
2bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
2bb90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74  ring.Format(XPat
2bba0 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e  hForRemoveElemen
2bbb0 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61  t, invariant)) a
2bbc0 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
2bbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2bbe0 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 21  (removeElement !
2bbf0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2bc00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2bc10 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 45 6c          removeEl
2bc20 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65  ement.ParentNode
2bc30 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72 65 6d  .RemoveChild(rem
2bc40 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20  oveElement);..  
2bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2bc60 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2bc70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2bc80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
2bc90 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a  rty || whatIf)..
2bca0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2bcc0 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
2bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bce0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2bcf0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2bd00 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
2bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2bd30 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2bd40 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2bd50 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61                "a
2bd70 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 2c  ddElement = {0},
2bd80 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d   removeElement =
2bd90 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
2bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdb0 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45 6c  ForDisplay(addEl
2bdc0 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73 70 6c  ement), ForDispl
2bdd0 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  ay(removeElement
2bde0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2be00 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
2be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be40 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28    document.Save(
2be50 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
2be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
2be70 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a  lesModified++;..
2be80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2be90 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d    saved = true;.
2bea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2beb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2bec0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2bed0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2bee0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2bef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf20 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2bf30 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2bf40 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 44  ic bool ProcessD
2bf50 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2bf60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2bf70 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d  tring fileName,.
2bf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2bf90 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a  ing invariant,..
2bfa0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2bfb0 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
2bfc0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
2bfd0 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  cription,..     
2bfe0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79         string ty
2bff0 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
2c000 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
2c010 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d  e assemblyName,.
2c020 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
2c030 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
2c040 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2c050 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2c060 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
2c070 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
2c080 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2c090 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2c0a0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2c0b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2c0c0 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
2c0d0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2c0e0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2c0f0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2c100 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c110 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
2c120 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
2c130 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
2c140 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
2c150 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
2c160 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
2c170 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2c180 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c190 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2c1a0 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20  valid framework 
2c1b0 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b 20  config callback 
2c1c0 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
2c1d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2c1e0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2c1f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2c200 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
2c210 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c230 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50  return RemoveDbP
2c240 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
2c250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c260 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
2c270 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66  nvariant, whatIf
2c280 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
2c290 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2c2a0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
2c2b0 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20  rror) &&..      
2c2c0 20 20 20 20 20 20 20 20 20 20 41 64 64 44 62 50            AddDbP
2c2d0 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
2c2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c2f0 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
2c300 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20  nvariant, name, 
2c310 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70  description, typ
2c320 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
2c330 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
2c340 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  mblyName, whatIf
2c350 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
2c360 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29  aved, ref error)
2c370 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2c380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
2c390 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2c3a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c3b0 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
2c3c0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
2c3d0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2c3e0 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
2c3f0 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61  , invariant, wha
2c400 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
2c410 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20  f saved,..      
2c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c430 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
2c440 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2c450 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2c460 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2c470 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2c480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c4c0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73        #region As
2c4d0 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20 48  sembly Folders H
2c4e0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
2c4f0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2c500 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62  string GetAssemb
2c510 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65  lyFoldersKeyName
2c520 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2c530 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
2c540 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2c550 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
2c560 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
2c570 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2c580 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
2c590 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c5a0 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20  wow64..         
2c5b0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2c5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
2c5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
2c5e0 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 67 69 73  NOTE: This regis
2c5f0 74 72 79 20 6b 65 79 20 61 70 70 65 61 72 73 20  try key appears 
2c600 74 6f 20 61 6c 77 61 79 73 20 62 65 20 33 32 2d  to always be 32-
2c610 62 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20  bit only..      
2c620 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28        //       (
2c630 69 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20 62 65  i.e. probably be
2c640 63 61 75 73 65 20 69 74 20 69 73 20 6f 6e 6c 79  cause it is only
2c650 20 75 73 65 64 20 62 79 20 56 69 73 75 61 6c 0d   used by Visual.
2c660 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
2c670 20 20 20 20 20 20 53 74 75 64 69 6f 2c 20 77 68        Studio, wh
2c680 69 63 68 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ich is currently
2c690 20 61 6c 77 61 79 73 20 33 32 2d 62 69 74 20 6f   always 32-bit o
2c6a0 6e 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  nly)...         
2c6b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2c6c0 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74     string format
2c6d0 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c   = !String.IsNul
2c6e0 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72  lOrEmpty(platfor
2c6f0 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20  mName) ?..      
2c700 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c            "{0}\\
2c710 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c  Microsoft\\{1}\\
2c720 76 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73 65 6d  v{2}\\{3}\\Assem
2c730 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 20 3a 0d  blyFoldersEx" :.
2c740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c750 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74   "{0}\\Microsoft
2c760 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41 73 73  \\{1}\\v{2}\\Ass
2c770 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 3b  emblyFoldersEx";
2c780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c790 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
2c7a0 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74  rmat(format, Get
2c7b0 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36  RootKeyName(wow6
2c7c0 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4),..           
2c7d0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
2c7e0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2c7f0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2c800 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  me);..        }.
2c810 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2c820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c860 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2c870 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2c880 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46  l AddToAssemblyF
2c890 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
2c8a0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2c8b0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2c8c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2c8d0 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
2c8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2c8f0 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
2c900 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2c910 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
2c920 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
2c930 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
2c940 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
2c950 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
2c960 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
2c970 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2c980 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2c990 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2c9a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2c9b0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2c9c0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2c9d0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2c9e0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2c9f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2ca00 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
2ca10 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b  AssemblyFoldersK
2ca20 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
2ca30 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2ca40 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2ca50 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2ca60 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b 0d  rmName, wow64);.
2ca70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
2ca80 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2ca90 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
2caa0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2cab0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2cac0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2cad0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72  Key, keyName, tr
2cae0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
2caf0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2cb00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2cb10 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
2cb20 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2cb30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2cb50 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2cb60 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2cb80 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
2cb90 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
2cba0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
2cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbc0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2cbd0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2cbe0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2cbf0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2cc00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
2cc20 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2cc30 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
2cc40 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
2cc50 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20  eateSubKey(..   
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc70 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79       key, subKey
2cc80 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65  Name, whatIf, ve
2cc90 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2cca0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccc0 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
2ccd0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2cce0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd00 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2cd10 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd30 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2cd40 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
2cd50 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
2cd60 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd80 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29  key, subKeyName)
2cd90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2cdb0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2cde0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2cdf0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2ce00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ce10 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
2ce20 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f  y, null, directo
2ce30 72 79 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ry, whatIf, verb
2ce40 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
2ce50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2ce60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ce70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2ce80 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
2ce90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2cea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ceb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ced0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cee0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2cef0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2cf00 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d   RemoveFromAssem
2cf10 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20  blyFolders(..   
2cf20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2cf30 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2cf40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2cf50 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
2cf60 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2cf70 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
2cf80 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
2cf90 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2cfa0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
2cfb0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2cfc0 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
2cfd0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2cfe0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2cff0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
2d000 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
2d010 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2d020 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2d030 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2d040 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2d050 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
2d060 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2d070 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d080 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
2d090 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46  e = GetAssemblyF
2d0a0 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a  oldersKeyName(..
2d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0c0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
2d0d0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2d0e0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77   platformName, w
2d0f0 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
2d100 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
2d110 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
2d120 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
2d130 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
2d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d150 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2d160 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49  ame, true, whatI
2d170 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2d180 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d190 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2d1a0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
2d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2d1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d1d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2d1e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d200 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
2d210 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
2d220 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
2d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d240 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2d250 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
2d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d270 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2d280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d290 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2d2a0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2d2b0 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65  lper.DeleteSubKe
2d2c0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2d2d0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62          key, sub
2d2e0 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e  KeyName, throwOn
2d2f0 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c  Missing, whatIf,
2d300 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
2d310 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2d320 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d330 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
2d340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2d350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d390 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2d3a0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2d3b0 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65 6d 62  ol ProcessAssemb
2d3c0 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
2d3d0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2d3e0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2d3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d400 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
2d410 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2d420 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
2d430 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
2d440 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
2d450 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
2d460 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2d470 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
2d480 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2d490 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2d4a0 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
2d4b0 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2d4c0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2d4d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2d4e0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2d4f0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2d500 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2d510 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2d520 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d530 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
2d540 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
2d550 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
2d560 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
2d570 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
2d580 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
2d590 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2d5a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d5b0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2d5c0 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20  valid framework 
2d5d0 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
2d5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d5f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2d600 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d610 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d620 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
2d630 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d640 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d650 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62  RemoveFromAssemb
2d660 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
2d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d680 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
2d690 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2d6a0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2d6b0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 65 67               Leg
2d6d0 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20  acyProjectName, 
2d6e0 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20 77 68  wow64, false, wh
2d6f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
2d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d710 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 20 26      ref error) &
2d720 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
2d730 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79     AddToAssembly
2d740 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
2d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2d760 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
2d770 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2d780 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
2d790 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2d7a0 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65             Proje
2d7b0 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20  ctName, pair.X, 
2d7c0 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76  wow64, whatIf, v
2d7d0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
2d7e0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2d7f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2d800 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2d810 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d820 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
2d830 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f  veFromAssemblyFo
2d840 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
2d850 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2d860 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
2d870 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2d880 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2d890 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2d8a0 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74           Project
2d8b0 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 74 68 72  Name, wow64, thr
2d8c0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61  owOnMissing, wha
2d8d0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  tIf, verbose,.. 
2d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8f0 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a     ref error);..
2d900 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2d910 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2d920 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2d930 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2d940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2d980 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2d990 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  on Visual Studio
2d9a0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
2d9b0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2d9c0 63 20 73 74 72 69 6e 67 20 47 65 74 56 73 52 6f  c string GetVsRo
2d9d0 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  otKeyName(..    
2d9e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2d9f0 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  64..            
2da00 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2da10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2da20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
2da30 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
2da40 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d 0a  VisualStudio",..
2da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da60 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77  GetRootKeyName(w
2da70 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20  ow64));..       
2da80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2da90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2daa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dad0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2dae0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2daf0 73 74 72 69 6e 67 20 47 65 74 56 73 4b 65 79 4e  string GetVsKeyN
2db00 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
2db10 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
2db20 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2db30 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
2db40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2db50 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
2db60 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2db70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2db80 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
2db90 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2dba0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
2dbb0 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
2dbc0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
2dbd0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2dbe0 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
2dbf0 5c 7b 31 7d 7b 32 7d 22 2c 20 47 65 74 56 73 52  \{1}{2}", GetVsR
2dc00 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34  ootKeyName(wow64
2dc10 29 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  ), vsVersion, su
2dc20 66 66 69 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffix);..        
2dc30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2dc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2dc90 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
2dca0 74 75 64 69 6f 20 44 61 74 61 20 53 6f 75 72 63  tudio Data Sourc
2dcb0 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  e Handling..    
2dcc0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2dcd0 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74  ic bool AddVsDat
2dce0 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20  aSource(..      
2dcf0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2dd00 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2dd20 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
2dd30 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2dd40 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
2dd50 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
2dd60 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
2dd70 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2dd80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2dd90 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2dda0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2ddb0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2ddc0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2ddd0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2dde0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2de00 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
2de10 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2de20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2de30 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2de40 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
2de50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de60 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2de70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2de80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2de90 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
2dea0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2deb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2dec0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2ded0 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
2dee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2def0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2df00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2df10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2df20 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
2df30 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
2df40 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 77  rsion, suffix, w
2df50 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
2df60 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
2df70 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
2df80 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
2df90 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
2dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfb0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2dfc0 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
2dfd0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2dfe0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2e000 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
2e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e020 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2e030 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2e040 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e060 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
2e070 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
2e080 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
2e090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e0a0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2e0b0 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
2e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2e0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e0f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2e100 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2e110 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
2e120 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
2e130 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2e140 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e150 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
2e160 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74  "DataSources", t
2e170 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
2e180 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2e190 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2e1b0 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
2e1c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2e1d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1f0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2e200 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e220 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
2e230 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
2e240 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f  key: {0}\\DataSo
2e250 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  urces",..       
2e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e270 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
2e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e290 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2e2a0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2e2b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2d0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2e2e0 69 73 74 72 79 4b 65 79 20 64 61 74 61 53 6f 75  istryKey dataSou
2e2f0 72 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  rceKey =..      
2e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e310 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2e320 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
2e330 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20  y(subKey,..     
2e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e350 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
2e360 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74  ataSourceId.ToSt
2e370 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2e380 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2e3a0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2e3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e3c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3e0 20 69 66 20 28 64 61 74 61 53 6f 75 72 63 65 4b   if (dataSourceK
2e3f0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e410 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e430 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2e440 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e460 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
2e470 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
2e480 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2e490 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20  \{1}", key,..   
2e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2e4c0 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
2e4d0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2e4e0 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
2e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e500 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2e510 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2e530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e540 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2e550 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2e560 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e580 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c    dataSourceKey,
2e590 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f   null, String.Fo
2e5a0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5c0 20 20 20 22 7b 30 7d 20 44 61 74 61 62 61 73 65     "{0} Database
2e5d0 20 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63 74 4e   File", ProjectN
2e5e0 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ame), whatIf,.. 
2e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e600 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
2e610 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e630 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2e640 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2e650 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65 20  OTE: This value 
2e660 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e 30  is new as of 1.0
2e670 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20  .83.0...        
2e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e690 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2e6a0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2e6b0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2e6c0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6e0 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c    dataSourceKey,
2e6f0 20 22 44 65 66 61 75 6c 74 50 72 6f 76 69 64 65   "DefaultProvide
2e700 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r",..           
2e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e720 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f   package.DataPro
2e730 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67  viderId.ToString
2e740 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
2e750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e760 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2e770 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
2e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e790 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2e7a0 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
2e7b0 4b 65 79 28 64 61 74 61 53 6f 75 72 63 65 4b 65  Key(dataSourceKe
2e7c0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53  String.Format("S
2e7f0 75 70 70 6f 72 74 69 6e 67 50 72 6f 76 69 64 65  upportingProvide
2e800 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  rs\\{0}",..     
2e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e820 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
2e830 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
2e840 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2e850 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
2e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e870 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2e880 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2e890 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2e8b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2e8c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e8d0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
2e8e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2e8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e930 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2e940 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2e950 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61   bool RemoveVsDa
2e960 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
2e970 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2e980 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2e990 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2e9a0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
2e9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2e9c0 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
2e9d0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
2e9e0 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
2e9f0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2ea00 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2ea10 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2ea20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2ea30 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2ea40 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
2ea50 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
2ea60 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2ea70 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2ea80 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
2ea90 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2eaa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2eab0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2eac0 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
2ead0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2eae0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2eaf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2eb00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2eb10 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
2eb20 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2eb30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2eb40 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2eb50 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
2eb60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2eb70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2eb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2eb90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
2eba0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
2ebb0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
2ebc0 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
2ebd0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
2ebe0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2ebf0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2ec00 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2ec10 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec30 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2ec40 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
2ec50 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2ec60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ec80 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2ec90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eca0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ecb0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2ecc0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ece0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2ecf0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2ed00 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2ed10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ed20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2ed30 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
2ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed50 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2ed60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ed70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2ed80 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2ed90 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
2eda0 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
2edb0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2edc0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2edd0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2ede0 20 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20   "DataSources", 
2edf0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2ee00 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2ee10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee30 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
2ee40 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2ee50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee70 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2ee80 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eea0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2eeb0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2eec0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53   key: {0}\\DataS
2eed0 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20  ources",..      
2eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eef0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
2ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ef20 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2ef30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef50 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2ef60 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  r.DeleteSubKeyTr
2ef70 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
2ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
2ef90 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74  Key, package.Dat
2efa0 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69  aSourceId.ToStri
2efb0 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
2efc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2efd0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
2efe0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
2eff0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2f000 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2f010 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f020 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
2f030 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2f040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f080 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2f090 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2f0a0 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44   bool ProcessVsD
2f0b0 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
2f0c0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2f0d0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2f0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2f0f0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2f100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2f110 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
2f120 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2f130 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2f140 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
2f150 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2f160 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2f170 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2f180 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
2f190 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
2f1a0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
2f1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2f1c0 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
2f1d0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2f1e0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2f1f0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2f200 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f210 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
2f220 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2f230 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f240 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2f250 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
2f260 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2f270 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2f280 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2f290 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f2a0 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
2f2b0 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69  bool> pair = cli
2f2c0 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61  entData as AnyPa
2f2d0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
2f2e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f2f0 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c   if (pair == nul
2f300 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2f310 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f320 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2f330 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20  lid VS callback 
2f340 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
2f350 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2f360 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2f370 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2f380 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
2f390 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3b0 72 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61  return AddVsData
2f3c0 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
2f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2f3e0 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
2f3f0 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
2f400 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
2f410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f420 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
2f430 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
2f440 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2f450 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2f460 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f470 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f480 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53  rn RemoveVsDataS
2f490 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
2f4a0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2f4b0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
2f4c0 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
2f4d0 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d   wow64, whatIf,.
2f4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f4f0 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65       verbose, re
2f500 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
2f510 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2f520 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2f530 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2f540 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2f550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2f590 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69        #region Vi
2f5a0 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61  sual Studio Data
2f5b0 20 50 72 6f 76 69 64 65 72 20 48 61 6e 64 6c 69   Provider Handli
2f5c0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
2f5d0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2f5e0 41 64 64 56 73 44 61 74 61 50 72 6f 76 69 64 65  AddVsDataProvide
2f5f0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
2f600 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2f610 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2f620 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2f630 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2f640 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
2f650 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
2f660 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
2f670 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2f680 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
2f690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2f6a0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
2f6b0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2f6c0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2f6d0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2f6e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2f6f0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2f700 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2f710 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f720 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
2f730 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
2f740 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f750 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2f760 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
2f770 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
2f780 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f790 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2f7a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f7b0 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
2f7c0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2f7d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f7e0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2f7f0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
2f800 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
2f810 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f820 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2f830 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f840 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
2f850 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
2f860 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73  ame(vsVersion, s
2f870 75 66 66 69 78 2c 20 77 6f 77 36 34 29 3b 0d 0a  uffix, wow64);..
2f880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
2f890 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2f8a0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
2f8b0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2f8c0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2f8d0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2f8e0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
2f8f0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
2f900 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2f910 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f920 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
2f930 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2f940 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2f960 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2f970 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2f990 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
2f9a0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
2f9b0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9d0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2f9e0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2f9f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2fa00 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2fa10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
2fa30 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2fa40 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
2fa50 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2fa60 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa80 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f     key, "DataPro
2fa90 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77  viders", true, w
2faa0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2fab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fac0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2fad0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
2fae0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2fb20 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2fb30 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb50 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2fb60 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2fb70 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72  0}\\DataProvider
2fb80 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
2fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fba0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
2fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbc0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2fbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fbe0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2fc00 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2fc10 79 4b 65 79 20 64 61 74 61 50 72 6f 76 69 64 65  yKey dataProvide
2fc20 72 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20  rKey =..        
2fc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc40 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2fc50 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
2fc60 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  subKey,..       
2fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc80 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
2fc90 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
2fca0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2fcb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2fcd0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2fce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fcf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd10 20 69 66 20 28 64 61 74 61 50 72 6f 76 69 64 65   if (dataProvide
2fd20 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rKey == null).. 
2fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd60 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2fd70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2fda0 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
2fdb0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2fdc0 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20  }\\{1}", key,.. 
2fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2fdf0 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
2fe00 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
2fe10 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
2fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2fe40 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe80 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2fe90 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2feb0 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
2fec0 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c 20 44 65 73  erKey, null, Des
2fed0 63 72 69 70 74 69 6f 6e 2c 20 77 68 61 74 49 66  cription, whatIf
2fee0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2ff00 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff40 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61  // NOTE: This va
2ff50 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66  lue is new as of
2ff60 20 31 2e 30 2e 38 33 2e 30 2e 20 20 48 6f 77 65   1.0.83.0.  Howe
2ff70 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ver,..          
2ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2ff90 20 20 20 20 20 20 20 69 74 20 73 68 6f 75 6c 64         it should
2ffa0 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20   only be set if 
2ffb0 74 68 65 20 70 61 63 6b 61 67 65 20 61 73 73 65  the package asse
2ffc0 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
2ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2ffe0 20 20 20 20 20 20 20 61 6e 64 20 61 6c 6c 20 74         and all t
2fff0 68 65 20 61 73 73 65 6d 62 6c 69 65 73 20 69 74  he assemblies it
30000 20 72 65 66 65 72 73 20 74 6f 20 61 72 65 20 62   refers to are b
30010 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  eing..          
30020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30030 20 20 20 20 20 20 20 70 6c 61 63 65 64 20 69 6e         placed in
30040 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 61 73  to the global as
30050 73 65 6d 62 6c 79 20 63 61 63 68 65 2e 0d 0a 20  sembly cache... 
30060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30070 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
30080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30090 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 2e 47     if (package.G
300a0 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
300b0 68 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  he)..           
300c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
300d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300e0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
300f0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
30100 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
30110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30120 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
30130 65 72 4b 65 79 2c 20 22 41 73 73 65 6d 62 6c 79  erKey, "Assembly
30140 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
30150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30160 20 20 20 20 70 61 63 6b 61 67 65 2e 41 73 73 65      package.Asse
30170 6d 62 6c 79 4e 61 6d 65 2e 54 6f 53 74 72 69 6e  mblyName.ToStrin
30180 67 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  g(),..          
30190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301a0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
301b0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
301c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
301e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
301f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30200 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
30210 45 3a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73  E: This value is
30220 20 6e 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38   new as of 1.0.8
30230 33 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  3.0...          
30240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30260 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
30270 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
30280 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
30290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302a0 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
302b0 20 22 41 73 73 6f 63 69 61 74 65 64 53 6f 75 72   "AssociatedSour
302c0 63 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ce",..          
302d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302e0 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f    package.DataSo
302f0 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  urceId.ToString(
30300 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
30310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30320 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
30330 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
30340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30350 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
30360 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
30370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30380 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
30390 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 49  aProviderKey, "I
303a0 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20 49  nvariantName", I
303b0 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20  nvariantName,.. 
303c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303d0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
303e0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
303f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30400 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
30410 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
30420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
30440 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
30450 54 65 63 68 6e 6f 6c 6f 67 79 22 2c 0d 0a 20 20  Technology",..  
30460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30470 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
30480 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  e.AdoNetTechnolo
30490 67 79 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  gyId.ToString(Vs
304a0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
304b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304c0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
304d0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
304e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304f0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
30500 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
30510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30520 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
30530 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 43 6f 64  roviderKey, "Cod
30540 65 42 61 73 65 22 2c 20 66 69 6c 65 4e 61 6d 65  eBase", fileName
30550 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
30560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30570 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
30580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30590 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
305a0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
305b0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
305c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305d0 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
305e0 79 2c 20 22 46 61 63 74 6f 72 79 53 65 72 76 69  y, "FactoryServi
305f0 63 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ce",..          
30600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30610 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63    package.Servic
30620 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
30630 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
30640 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
30660 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
30670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30680 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
30690 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
306a0 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
306b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
306c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
306d0 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c  upportedObjects\
306e0 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 55  \DataConnectionU
306f0 49 43 6f 6e 74 72 6f 6c 22 2c 0d 0a 20 20 20 20  IControl",..    
30700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30710 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
30720 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
30730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30740 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
30750 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
30760 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
30770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30790 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73  SupportedObjects
307a0 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e  \\DataConnection
307b0 50 72 6f 70 65 72 74 69 65 73 22 2c 0d 0a 20 20  Properties",..  
307c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307d0 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
307e0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
307f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30800 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
30810 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
30820 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey(dataProviderK
30830 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
30840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30850 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63   "SupportedObjec
30860 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69  ts\\DataConnecti
30870 6f 6e 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74  onSupport", what
30880 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
30890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308a0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
308b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308c0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
308d0 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
308e0 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y(dataProviderKe
308f0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
30900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30910 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74  "SupportedObject
30920 73 5c 5c 44 61 74 61 4f 62 6a 65 63 74 53 75 70  s\\DataObjectSup
30930 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a  port", whatIf,..
30940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30950 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
30960 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30980 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
30990 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
309a0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
309b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309c0 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
309d0 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
309e0 74 61 56 69 65 77 53 75 70 70 6f 72 74 22 2c 20  taViewSupport", 
309f0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
30a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a10 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
30a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
30a40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
30a50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
30a60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
30a70 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
30a80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
30a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ad0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
30ae0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
30af0 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f   RemoveVsDataPro
30b00 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
30b10 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
30b20 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
30b30 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
30b40 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
30b50 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
30b60 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
30b70 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
30b80 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
30b90 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
30ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
30bb0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
30bc0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
30bd0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
30be0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
30bf0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
30c00 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
30c10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
30c20 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
30c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c50 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
30c60 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
30c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c80 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
30c90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30ca0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
30cb0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
30cc0 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
30cd0 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 77 6f 77  ion, suffix, wow
30ce0 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
30cf0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
30d00 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
30d10 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
30d20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d40 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
30d50 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
30d60 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
30d70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30d80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30d90 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
30da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
30db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30dc0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
30dd0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
30de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30df0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
30e00 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
30e10 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
30e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e30 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
30e40 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
30e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e60 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
30e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30e90 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
30ea0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
30eb0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
30ec0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
30ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30ee0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44           key, "D
30ef0 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74  ataProviders", t
30f00 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
30f10 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
30f20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
30f40 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
30f50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
30f60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f80 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
30f90 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
30fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fb0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
30fc0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
30fd0 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72  key: {0}\\DataPr
30fe0 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20  oviders",..     
30ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31000 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
31010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31020 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
31030 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
31040 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31060 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
31070 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  er.DeleteSubKeyT
31080 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
31090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
310a0 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61  bKey, package.Da
310b0 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53  taProviderId.ToS
310c0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
310d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
310e0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
310f0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
31110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
31120 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
31130 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
31140 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31150 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31190 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
311a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
311b0 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
311c0 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
311d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
311e0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
311f0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
31200 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
31210 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
31220 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
31230 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
31240 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
31250 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
31260 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
31270 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
31280 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
31290 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
312a0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
312b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
312c0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
312d0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
312e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
312f0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
31300 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
31310 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31320 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
31330 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
31340 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
31350 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
31360 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
31370 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
31380 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
31390 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
313a0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
313b0 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
313c0 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
313d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
313e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
313f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31400 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
31410 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
31420 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31430 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
31440 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
31450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31460 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
31470 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
31480 70 61 63 6b 61 67 65 2c 20 70 61 69 72 2e 58 2c  package, pair.X,
31490 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
314a0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
314b0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
314c0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
314d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
314e0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
314f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31500 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31510 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72  n RemoveVsDataPr
31520 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20  ovider(..       
31530 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
31540 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
31550 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
31560 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
31570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31580 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
31590 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
315a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
315b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
315c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
315d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
315e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
315f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
31620 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
31630 69 73 75 61 6c 20 53 74 75 64 69 6f 20 50 61 63  isual Studio Pac
31640 6b 61 67 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  kage Handling.. 
31650 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
31660 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
31670 61 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28 0d  alizeVsPackage(.
31680 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73  .            Ass
31690 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62  emblyName assemb
316a0 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  lyName,..       
316b0 20 20 20 20 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c       bool global
316c0 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 0d 0a  AssemblyCache,..
316d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
316e0 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 0d  Package package.
316f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
31700 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31710 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
31720 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
31730 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31740 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
31750 61 67 65 20 3d 20 6e 65 77 20 50 61 63 6b 61 67  age = new Packag
31760 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
31770 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
31780 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 61  AssemblyName = a
31790 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20  ssemblyName;..  
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
317b0 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73 73 65  ckage.GlobalAsse
317c0 6d 62 6c 79 43 61 63 68 65 20 3d 20 67 6c 6f 62  mblyCache = glob
317d0 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b  alAssemblyCache;
317e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
317f0 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e      package.AdoN
31800 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d  etTechnologyId =
31810 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
31820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31830 22 37 37 41 42 39 41 39 44 2d 37 38 42 39 2d 34  "77AB9A9D-78B9-4
31840 42 41 37 2d 39 31 41 43 2d 38 37 33 46 35 33 33  BA7-91AC-873F533
31850 38 46 31 44 32 22 29 3b 0d 0a 0d 0a 20 20 20 20  8F1D2");....    
31860 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
31870 61 67 65 2e 50 61 63 6b 61 67 65 49 64 20 3d 20  age.PackageId = 
31880 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20  new Guid(..     
31890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
318a0 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30  DCBE6C8D-0E57-40
318b0 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36  99-A183-98FF74C6
318c0 34 44 39 43 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  4D9C");....     
318d0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
318e0 67 65 2e 53 65 72 76 69 63 65 49 64 20 3d 20 6e  ge.ServiceId = n
318f0 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20  ew Guid(..      
31900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
31910 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39  CBE6C8D-0E57-409
31920 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36 34  9-A183-98FF74C64
31930 44 39 44 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  D9D");....      
31940 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
31950 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 20 3d  e.DataSourceId =
31960 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
31970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31980 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34  "0EBAAB6E-CA80-4
31990 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30  B4A-8DDF-CBE6BF0
319a0 35 38 43 37 31 22 29 3b 0d 0a 0d 0a 20 20 20 20  58C71");....    
319b0 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
319c0 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72  age.DataProvider
319d0 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a  Id = new Guid(..
319e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319f0 20 20 20 20 22 30 45 42 41 41 42 36 45 2d 43 41      "0EBAAB6E-CA
31a00 38 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45  80-4B4A-8DDF-CBE
31a10 36 42 46 30 35 38 43 37 30 22 29 3b 0d 0a 20 20  6BF058C70");..  
31a20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
31a30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31a40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
31a90 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
31aa0 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 50 61  tic bool AddVsPa
31ab0 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
31ac0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
31ad0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
31ae0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
31af0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
31b00 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
31b10 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
31b20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
31b30 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
31b40 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
31b50 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
31b60 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
31b70 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
31b80 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
31b90 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
31ba0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
31bb0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
31bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
31bd0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
31be0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
31bf0 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
31c00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
31c20 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
31c30 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
31c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
31c50 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
31c60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
31c70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
31c80 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
31c90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
31cb0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
31cc0 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
31ce0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
31cf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
31d00 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
31d10 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
31d20 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
31d30 6e 2c 20 73 75 66 66 69 78 2c 20 77 6f 77 36 34  n, suffix, wow64
31d40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31d50 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
31d60 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
31d70 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
31d80 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
31d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31da0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
31db0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
31dc0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
31dd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31de0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
31df0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
31e00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
31e30 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
31e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e50 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
31e60 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
31e70 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
31e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e90 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
31ea0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31ec0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
31ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
31ee0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31ef0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
31f00 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
31f10 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
31f20 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
31f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f40 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63         key, "Pac
31f50 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68  kages", true, wh
31f60 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
31f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31f80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31f90 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
31fa0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
31fb0 20 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 20 20 20 20 65 72 72 6f              erro
31fe0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
31ff0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
32000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32010 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
32020 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
32030 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20  }\\Packages",.. 
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32050 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
32060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32070 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32080 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
32090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
320a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
320b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
320c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320d0 2f 2f 20 4e 4f 54 45 3a 20 2a 57 41 52 4e 49 4e  // NOTE: *WARNIN
320e0 47 2a 20 43 68 61 6e 67 69 6e 67 20 61 6e 79 20  G* Changing any 
320f0 6f 66 20 74 68 65 73 65 20 76 61 6c 75 65 73 20  of these values 
32100 77 69 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20 20 20  will likely..   
32110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32120 20 2f 2f 20 20 20 20 20 20 20 72 65 71 75 69 72   //       requir
32130 65 20 61 20 6e 65 77 20 22 70 61 63 6b 61 67 65  e a new "package
32140 20 6c 6f 61 64 20 6b 65 79 22 20 28 50 4c 4b 29   load key" (PLK)
32150 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
32160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
32170 20 20 20 20 20 67 65 6e 65 72 61 74 65 64 20 69       generated i
32180 6e 20 6f 72 64 65 72 20 74 6f 20 70 72 6f 70 65  n order to prope
32190 72 6c 79 20 73 75 70 70 6f 72 74 20 6c 6f 61 64  rly support load
321a0 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
321b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
321c0 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 69 6e        package in
321d0 74 6f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  to Visual Studio
321e0 20 32 30 30 38 20 61 6e 64 20 65 61 72 6c 69 65   2008 and earlie
321f0 72 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20  r without..     
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32210 2f 20 20 20 20 20 20 20 74 68 65 20 6d 61 74 63  /       the matc
32220 68 69 6e 67 20 56 69 73 75 61 6c 20 53 74 75 64  hing Visual Stud
32230 69 6f 20 53 44 4b 20 62 65 69 6e 67 20 69 6e 73  io SDK being ins
32240 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20  talled...       
32250 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
32260 20 20 20 20 20 20 50 6c 65 61 73 65 20 72 65 66        Please ref
32270 65 72 20 74 6f 20 74 68 65 20 22 53 51 4c 69 74  er to the "SQLit
32280 65 2e 44 65 73 69 67 6e 65 72 5c 70 6c 6b 2e 74  e.Designer\plk.t
32290 78 74 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20  xt" file..      
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
322b0 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 65         for the e
322c0 78 69 73 74 69 6e 67 20 6f 66 66 69 63 69 61 6c  xisting official
322d0 20 76 61 6c 75 65 73 20 61 6e 64 20 75 70 64 61   values and upda
322e0 74 65 20 74 68 65 6d 20 69 66 0d 0a 20 20 20 20  te them if..    
322f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32300 2f 2f 20 20 20 20 20 20 20 6e 65 63 65 73 73 61  //       necessa
32310 72 79 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 6e  ry.  Also, the n
32320 65 77 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70  ewly generated p
32330 61 63 6b 61 67 65 20 6c 6f 61 64 0d 0a 20 20 20  ackage load..   
32340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32350 20 2f 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74   //       key it
32360 73 65 6c 66 2c 20 77 68 69 63 68 20 69 73 20 61  self, which is a
32370 20 31 32 38 20 63 68 61 72 61 63 74 65 72 20 61   128 character a
32380 6c 70 68 61 6e 75 6d 65 72 69 63 0d 0a 20 20 20  lphanumeric..   
32390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323a0 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67   //       string
323b0 2c 20 6d 75 73 74 20 62 65 20 70 6c 61 63 65 64  , must be placed
323c0 20 69 6e 20 74 68 65 20 72 65 73 6f 75 72 63 65   in the resource
323d0 20 73 74 72 69 6e 67 20 6e 61 6d 65 64 0d 0a 20   string named.. 
323e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323f0 20 20 20 2f 2f 20 20 20 20 20 20 20 22 34 30 30     //       "400
32400 22 20 69 6e 20 74 68 65 20 22 53 51 4c 69 74 65  " in the "SQLite
32410 2e 44 65 73 69 67 6e 65 72 5c 56 53 50 61 63 6b  .Designer\VSPack
32420 61 67 65 2e 72 65 73 78 22 20 66 69 6c 65 0d 0a  age.resx" file..
32430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32440 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64      //       and
32450 20 74 68 65 6e 20 74 68 65 20 64 65 73 69 67 6e   then the design
32460 65 72 20 61 73 73 65 6d 62 6c 79 20 69 74 73 65  er assembly itse
32470 6c 66 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20  lf must be..    
32480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32490 2f 2f 20 20 20 20 20 20 20 72 65 63 6f 6d 70 69  //       recompi
324a0 6c 65 64 2e 20 20 41 73 20 6f 66 20 74 68 69 73  led.  As of this
324b0 20 77 72 69 74 69 6e 67 20 28 69 6e 20 46 65 62   writing (in Feb
324c0 72 75 61 72 79 20 32 30 31 32 29 2c 0d 0a 20 20  ruary 2012),..  
324d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324e0 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 66    //       the f
324f0 6f 6c 6c 6f 77 69 6e 67 20 55 52 4c 20 69 73 20  ollowing URL is 
32500 74 68 65 20 70 72 6f 70 65 72 20 70 6c 61 63 65  the proper place
32510 20 74 6f 20 67 65 6e 65 72 61 74 65 0d 0a 20 20   to generate..  
32520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32530 20 20 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61    //       packa
32540 67 65 20 6c 6f 61 64 20 6b 65 79 73 3a 0d 0a 20  ge load keys:.. 
32550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32560 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
32570 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
32580 20 20 20 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e      http://msdn.
32590 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e  microsoft.com/en
325a0 2d 75 73 2f 76 73 74 75 64 69 6f 2f 63 63 36 35  -us/vstudio/cc65
325b0 35 37 39 35 0d 0a 20 20 20 20 20 20 20 20 20 20  5795..          
325c0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
325d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325e0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
325f0 69 73 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65  istryKey package
32600 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  Key =..         
32610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32620 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
32630 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73  r.CreateSubKey(s
32640 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  ubKey,..        
32650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32660 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b      package.Pack
32670 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ageId.ToString(V
32680 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74  sIdFormat), what
32690 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
326a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326b0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
326c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
326e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
326f0 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c  ackageKey == nul
32700 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
32710 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32730 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
32740 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
32750 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32770 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
32780 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
32790 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
327a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
327c0 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b  ey, package.Pack
327d0 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ageId.ToString(V
327e0 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
327f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32800 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32810 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
32820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32830 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
32840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32850 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
32860 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
32870 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ey, null,..     
32880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32890 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
328a0 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e  rmat("{0} Design
328b0 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f  er Package", Pro
328c0 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  jectName),..    
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328e0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
328f0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
32900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32910 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
32920 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
32930 6b 61 67 65 4b 65 79 2c 20 22 43 6c 61 73 73 22  kageKey, "Class"
32940 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
32960 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e  SQLite.Designer.
32970 53 51 4c 69 74 65 50 61 63 6b 61 67 65 22 2c 20  SQLitePackage", 
32980 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
32990 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
329a0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
329b0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
329c0 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
329d0 20 22 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20   "CodeBase",..  
329e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329f0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
32a00 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  me, whatIf, verb
32a10 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
32a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a30 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
32a40 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
32a50 4b 65 79 2c 20 22 49 44 22 2c 20 34 30 30 2c 20  Key, "ID", 400, 
32a60 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
32a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a80 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
32a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32aa0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
32ab0 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74   directory = Get
32ac0 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28  SystemDirectory(
32ad0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
32ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32af0 20 20 20 69 66 20 28 64 69 72 65 63 74 6f 72 79     if (directory
32b00 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
32b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
32b30 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b   = String.Empty;
32b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32b50 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
32b60 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
32b70 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
32b80 22 49 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22  "InprocServer32"
32b90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
32bb0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
32bc0 63 74 6f 72 79 2c 20 22 6d 73 63 6f 72 65 65 2e  ctory, "mscoree.
32bd0 64 6c 6c 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  dll"),..        
32be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bf0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
32c00 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
32c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
32c30 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
32c40 4b 65 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d  Key, "CompanyNam
32c50 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c70 20 22 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e   "http://system.
32c80 64 61 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f  data.sqlite.org/
32c90 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
32ca0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
32cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cc0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
32cd0 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
32ce0 65 79 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22  ey, "MinEdition"
32cf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
32d10 73 74 61 6e 64 61 72 64 22 2c 20 77 68 61 74 49  standard", whatI
32d20 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
32d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d40 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
32d50 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
32d60 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f  packageKey, "Pro
32d70 64 75 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20  ductName",..    
32d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d90 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
32da0 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67  ormat("{0} Desig
32db0 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72  ner Package", Pr
32dc0 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20  ojectName),..   
32dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32de0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
32df0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
32e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e10 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
32e20 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
32e30 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75  ckageKey, "Produ
32e40 63 74 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20  ctVersion",..   
32e50 20 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 22 31 2e 30 22 2c 20           "1.0", 
32e70 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
32e80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32e90 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
32ea0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
32eb0 4b 65 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d  Key toolboxKey =
32ec0 0d 0a 20 20 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 20 20 20 20                  
32ee0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
32ef0 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 70 61  .CreateSubKey(pa
32f00 63 6b 61 67 65 4b 65 79 2c 0d 0a 20 20 20 20 20  ckageKey,..     
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f20 20 20 20 20 20 20 20 20 20 20 20 22 54 6f 6f 6c             "Tool
32f30 62 6f 78 22 2c 20 77 68 61 74 49 66 2c 20 76 65  box", whatIf, ve
32f40 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
32f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f80 69 66 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d  if (toolboxKey =
32f90 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
32fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fd0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
32fe0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
32ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33010 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63      "could not c
33020 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b  reate registry k
33030 65 79 3a 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  ey: " +..       
33040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33050 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
33060 7d 5c 5c 54 6f 6f 6c 62 6f 78 22 2c 20 70 61 63  }\\Toolbox", pac
33070 6b 61 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20  kageKey);....   
33080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33090 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
330a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
330b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
330d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330e0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
330f0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
33100 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33120 20 20 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22     toolboxKey, "
33130 44 65 66 61 75 6c 74 20 49 74 65 6d 73 22 2c 20  Default Items", 
33140 33 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  3, whatIf,..    
33150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33160 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
33170 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
33180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
33190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
331a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
331b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
331c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
331d0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
331e0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
331f0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
33200 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
33210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33220 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20    key, "Menus", 
33230 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
33240 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
33250 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33270 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
33280 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
33290 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
332a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332b0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
332c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
332d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332e0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
332f0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
33300 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73   key: {0}\\Menus
33310 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
33320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33330 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
33340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33350 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
33360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33370 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
33380 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
33390 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
333a0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
333b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
333c0 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50  ubKey, package.P
333d0 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
333e0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
333f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33400 20 20 20 20 20 20 20 20 22 2c 20 31 30 30 30 2c          ", 1000,
33410 20 33 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72   3", whatIf, ver
33420 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
33430 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33440 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
33450 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
33460 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
33470 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
33480 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
33490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334a0 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73 22   key, "Services"
334b0 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
334c0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
334d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
334e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334f0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
33500 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
33510 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33530 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
33540 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
33550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33560 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
33570 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
33580 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72  ry key: {0}\\Ser
33590 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  vices",..       
335a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335b0 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
335c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
335e0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
335f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33610 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
33620 69 73 74 72 79 4b 65 79 20 73 65 72 76 69 63 65  istryKey service
33630 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  Key =..         
33640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33650 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
33660 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73  r.CreateSubKey(s
33670 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  ubKey,..        
33680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33690 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76      package.Serv
336a0 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  iceId.ToString(V
336b0 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74  sIdFormat), what
336c0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
336d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336e0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
336f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33710 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
33720 65 72 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c  erviceKey == nul
33730 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
33740 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
33750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33760 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
33770 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
33780 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337a0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
337b0 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
337c0 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
337d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
337f0 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76  ey, package.Serv
33800 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  iceId.ToString(V
33810 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
33820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33830 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
33840 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
33850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33860 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33880 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
33890 65 74 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b  etValue(serviceK
338a0 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ey, null,..     
338b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338c0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50         package.P
338d0 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
338e0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
338f0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
33900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33910 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
33920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33930 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
33940 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
33950 28 73 65 72 76 69 63 65 4b 65 79 2c 20 22 4e 61  (serviceKey, "Na
33960 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me",..          
33970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33980 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
33990 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 53 65  "{0} Designer Se
339a0 72 76 69 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e  rvice", ProjectN
339b0 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
339c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339d0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
339e0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
339f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
33a00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
33a10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
33a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
33a30 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
33a40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
33aa0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
33ab0 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50  c bool RemoveVsP
33ac0 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20  ackage(..       
33ad0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
33ae0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
33af0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
33b00 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
33b10 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
33b20 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
33b30 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
33b40 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
33b50 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
33b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
33b70 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
33b80 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
33b90 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
33ba0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
33bb0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
33bc0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
33bd0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
33be0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
33bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
33c00 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
33c10 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
33c20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33c30 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
33c40 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
33c50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33c60 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
33c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33c80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
33c90 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
33ca0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
33cb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33cc0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
33cd0 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
33ce0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33cf0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
33d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33d10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
33d20 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
33d30 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
33d40 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
33d50 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
33d60 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
33d70 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
33d80 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
33d90 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
33da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33db0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
33dc0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
33dd0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
33de0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
33df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
33e00 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
33e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33e20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33e30 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
33e40 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
33e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e60 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
33e70 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
33e80 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
33e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33ea0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
33eb0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
33ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ed0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
33ee0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33ef0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33f00 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
33f10 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
33f20 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
33f30 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
33f40 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
33f50 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
33f60 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72 75   "Packages", tru
33f70 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
33f80 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
33f90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
33fb0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
33fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33fd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ff0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
34000 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
34010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34020 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
34030 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
34040 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73  y: {0}\\Packages
34050 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
34060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34070 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
34080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34090 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
340a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
340c0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
340d0 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
340e0 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
340f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34100 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
34110 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64  ackage.PackageId
34120 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
34130 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
34140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34150 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
34160 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34170 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
34180 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
34190 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
341a0 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
341b0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
341c0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
341d0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
341e0 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c 20   "Menus", true, 
341f0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
34200 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34210 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34220 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
34230 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
34240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34250 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
34270 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
34280 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
34290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342a0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
342b0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
342c0 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20  {0}\\Menus",..  
342d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342e0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
342f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34300 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34310 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
34320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
34330 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34340 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
34350 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61 6c 75  elper.DeleteValu
34360 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
34370 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
34380 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b  ey, package.Pack
34390 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ageId.ToString(V
343a0 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
343b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343c0 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73 73       throwOnMiss
343d0 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ing, whatIf, ver
343e0 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
343f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34400 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
34410 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
34420 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
34430 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
34440 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
34450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34460 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73 22   key, "Services"
34470 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
34480 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
34490 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
344a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344b0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
344c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
344d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
344e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
34500 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
34510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34520 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
34530 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
34540 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72  ry key: {0}\\Ser
34550 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  vices",..       
34560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34570 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
34580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34590 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
345a0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
345b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
345c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345d0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
345e0 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65  .DeleteSubKeyTre
345f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
34600 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
34610 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76  ey, package.Serv
34620 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  iceId.ToString(V
34630 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
34640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34650 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
34660 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
34670 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
34680 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34690 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
346a0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
346b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
346c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
346d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
346e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
346f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34700 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
34710 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
34720 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61  l ProcessVsPacka
34730 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
34740 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
34750 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
34760 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
34770 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
34780 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
34790 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
347a0 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
347b0 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
347c0 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
347d0 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
347e0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
347f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
34800 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
34810 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
34820 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
34830 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
34840 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
34850 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
34860 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
34870 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
34880 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
34890 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
348a0 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
348b0 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
348c0 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
348d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
348e0 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
348f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
34900 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
34910 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
34920 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
34930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34940 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
34950 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
34960 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
34970 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
34980 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34990 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
349a0 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  AddVsPackage(.. 
349b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349c0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
349d0 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
349e0 61 63 6b 61 67 65 2c 20 70 61 69 72 2e 58 2c 20  ackage, pair.X, 
349f0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
34a00 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
34a10 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
34a20 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
34a30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
34a40 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
34a50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34a60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34a70 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65   RemoveVsPackage
34a80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34a90 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
34aa0 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
34ab0 78 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f 77 36  x, package, wow6
34ac0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
34ad0 20 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d          throwOnM
34ae0 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20  issing, whatIf, 
34af0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
34b00 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
34b10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
34b20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
34b30 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  on..        #end
34b40 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
34b50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
34b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
34ba0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 70 70       #region App
34bb0 6c 69 63 61 74 69 6f 6e 20 45 6e 74 72 79 20 50  lication Entry P
34bc0 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 5b 4d  oint..        [M
34bd0 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
34be0 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
34bf0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
34c00 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
34c10 20 69 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20   int Main(..    
34c20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
34c30 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20   args..         
34c40 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
34c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
34c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
34c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34c80 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
34c90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e  onfiguration = n
34ca0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
34cb0 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72        string err
34cc0 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  or = null;....  
34cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
34ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
34d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34d30 20 23 72 65 67 69 6f 6e 20 44 65 62 75 67 67 65   #region Debugge
34d40 72 20 48 6f 6f 6b 0d 0a 20 20 20 20 20 20 20 20  r Hook..        
34d50 20 20 20 20 20 20 20 20 69 66 20 28 45 6e 76 69          if (Envi
34d60 72 6f 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69 72  ronment.GetEnvir
34d70 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22  onmentVariable("
34d80 42 72 65 61 6b 22 29 20 21 3d 20 6e 75 6c 6c 29  Break") != null)
34d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34da0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34db0 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
34dc0 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20  .WriteLine(..   
34dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34de0 20 20 20 20 20 22 41 74 74 61 63 68 20 61 20 64       "Attach a d
34df0 65 62 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65  ebugger to proce
34e00 73 73 20 7b 30 7d 20 61 6e 64 20 22 20 2b 0d 0a  ss {0} and " +..
34e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e20 20 20 20 20 20 20 20 20 22 70 72 65 73 73 20 61          "press a
34e30 6e 79 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e  ny key to contin
34e40 75 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ue.",..         
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
34e60 72 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e  rocess.GetCurren
34e70 74 50 72 6f 63 65 73 73 28 29 2e 49 64 29 3b 0d  tProcess().Id);.
34e80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34e90 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
34ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34eb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34ec0 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
34ed0 6c 65 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29  le.ReadKey(true)
34ee0 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
34f10 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
34f20 28 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f  (InvalidOperatio
34f30 6e 45 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43  nException) // C
34f40 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a  onsole.ReadKey..
34f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
34f80 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
34f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
34fb0 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75              Debu
34fc0 67 67 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20  gger.Break();.. 
34fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
34fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34ff0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
35000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
35050 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35060 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61     #region Comma
35070 6e 64 20 4c 69 6e 65 20 50 72 6f 63 65 73 73 69  nd Line Processi
35080 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
35090 20 20 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75      if (!Configu
350a0 72 61 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28  ration.FromArgs(
350b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
350c0 20 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20            args, 
350d0 74 72 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67  true, ref config
350e0 75 72 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72  uration, ref err
350f0 6f 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  or) ||..        
35100 20 20 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e              !Con
35110 66 69 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65  figuration.Proce
35120 73 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ss(..           
35130 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
35140 73 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  s, configuration
35150 2c 20 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f  , true, ref erro
35160 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  r) ||..         
35170 20 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66             !Conf
35180 69 67 75 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52  iguration.CheckR
35190 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351b0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
351c0 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66  ation, true, ref
351d0 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
351e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
351f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35200 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65   TraceOps.ShowMe
35210 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f 72  ssage(TracePrior
35220 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
35230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35240 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
35250 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
35260 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79  ck, thisAssembly
35270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35280 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
35290 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c  , traceCategory,
352a0 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
352b0 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20  ns.OK,..        
352c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352d0 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45  MessageBoxIcon.E
352e0 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
352f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
35300 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
35310 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
35320 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a  ty.MediumHigh,..
35330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35340 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
35350 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
35360 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22  back, "Failure."
35370 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35380 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
35390 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
353a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353b0 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46    return 1; /* F
353c0 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20  AILURE */..     
353d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
353e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
353f0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
35400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
35410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
35450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
35460 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
35470 72 79 20 72 65 67 69 73 74 72 79 20 3d 20 6e 65  ry registry = ne
35480 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d  w MockRegistry(.
35490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
354a0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
354b0 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 66  ration.WhatIf, f
354c0 61 6c 73 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20  alse, false)).. 
354d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
354e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
354f0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
35500 72 65 20 41 73 73 65 6d 62 6c 79 20 4e 61 6d 65  re Assembly Name
35510 20 43 68 65 63 6b 0d 0a 20 20 20 20 20 20 20 20   Check..        
35520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
35530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35540 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20      // NOTE: Do 
35550 74 68 69 73 20 66 69 72 73 74 2c 20 62 65 66 6f  this first, befo
35560 72 65 20 6d 61 6b 69 6e 67 20 61 6e 79 20 63 68  re making any ch
35570 61 6e 67 65 73 20 74 6f 20 74 68 65 0d 0a 20 20  anges to the..  
35580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35590 20 20 2f 2f 20 20 20 20 20 20 20 73 79 73 74 65    //       syste
355a0 6d 2c 20 62 65 63 61 75 73 65 20 69 74 20 77 69  m, because it wi
355b0 6c 6c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  ll throw an exce
355c0 70 74 69 6f 6e 20 69 66 20 74 68 65 0d 0a 20 20  ption if the..  
355d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355e0 20 20 2f 2f 20 20 20 20 20 20 20 66 69 6c 65 20    //       file 
355f0 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 72 65  name does not re
35600 70 72 65 73 65 6e 74 20 61 20 76 61 6c 69 64 20  present a valid 
35610 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20  managed..       
35620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
35630 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 0d        assembly..
35640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35650 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
35660 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
35670 65 6d 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73  emblyName coreAs
35680 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 0d 0a 20 20  semblyName =..  
35690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356a0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
356b0 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
356c0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356e0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   configuration.C
356f0 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  oreFileName); /*
35700 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20   throw */....   
35710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35720 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64 65   AssemblyName de
35730 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
35740 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  me =..          
35750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
35760 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73  semblyName.GetAs
35770 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20  semblyName(..   
35780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35790 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
357a0 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46  ration.DesignerF
357b0 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72  ileName); /* thr
357c0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
357d0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
357e0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
357f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
35800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35830 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
35840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35850 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 20 44  #region System D
35860 69 72 65 63 74 6f 72 79 20 43 68 65 63 6b 0d 0a  irectory Check..
35870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35880 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
35890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
358a0 4f 54 45 3a 20 47 65 74 74 69 6e 67 20 74 68 65  OTE: Getting the
358b0 20 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72   system director
358c0 79 20 76 61 6c 75 65 20 68 65 72 65 20 73 65 72  y value here ser
358d0 76 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ves..           
358e0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
358f0 20 20 74 77 6f 20 70 75 72 70 6f 73 65 73 3a 0d    two purposes:.
35900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35910 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
35920 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
35930 20 20 20 20 20 20 31 2e 20 49 74 20 65 6e 61 62        1. It enab
35940 6c 65 73 20 75 73 20 74 6f 20 6c 6f 67 20 74 68  les us to log th
35950 65 20 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f  e system directo
35960 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
35970 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
35980 20 20 20 20 76 61 6c 75 65 20 76 65 72 79 20 65      value very e
35990 61 72 6c 79 20 69 6e 20 74 68 65 20 69 6e 73 74  arly in the inst
359a0 61 6c 6c 61 74 69 6f 6e 20 70 72 6f 63 65 73 73  allation process
359b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
359c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
359d0 20 20 28 69 2e 65 2e 20 65 76 65 6e 20 74 68 6f    (i.e. even tho
359e0 75 67 68 20 74 68 65 20 76 61 6c 75 65 20 69 74  ugh the value it
359f0 73 65 6c 66 20 69 73 20 6e 6f 74 0d 0a 20 20 20  self is not..   
35a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a10 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 65 65   //          nee
35a20 64 65 64 20 75 6e 74 69 6c 20 6d 75 63 68 20 6c  ded until much l
35a30 61 74 65 72 29 2e 0d 0a 20 20 20 20 20 20 20 20  ater)...        
35a40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
35a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a60 20 20 20 20 2f 2f 20 20 20 20 20 20 20 32 2e 20      //       2. 
35a70 53 69 6e 63 65 20 74 68 65 20 76 61 6c 75 65 20  Since the value 
35a80 69 73 20 63 61 63 68 65 64 2c 20 69 74 20 70 72  is cached, it pr
35a90 65 76 65 6e 74 73 20 61 6e 0d 0a 20 20 20 20 20  events an..     
35aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35ab0 2f 20 20 20 20 20 20 20 20 20 20 65 78 63 65 70  /          excep
35ac0 74 69 6f 6e 20 66 72 6f 6d 20 62 65 69 6e 67 20  tion from being 
35ad0 74 68 72 6f 77 6e 20 6d 75 63 68 20 6c 61 74 65  thrown much late
35ae0 72 20 64 75 72 69 6e 67 0d 0a 20 20 20 20 20 20  r during..      
35af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
35b00 20 20 20 20 20 20 20 20 20 20 74 68 65 20 69 6e            the in
35b10 73 74 61 6c 6c 20 77 68 65 6e 20 74 68 65 20 76  stall when the v
35b20 61 6c 75 65 20 69 73 20 71 75 65 72 69 65 64 20  alue is queried 
35b30 61 67 61 69 6e 0d 0a 20 20 20 20 20 20 20 20 20  again..         
35b40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
35b50 20 20 20 20 20 20 20 28 69 2e 65 2e 20 77 69 74         (i.e. wit
35b60 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  h the same value
35b70 20 66 6f 72 20 74 68 65 20 22 77 6f 77 36 34 22   for the "wow64"
35b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35b90 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
35ba0 20 20 70 61 72 61 6d 65 74 65 72 29 2e 0d 0a 20    parameter)... 
35bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bc0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
35bd0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
35be0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
35bf0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
35c00 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20  MediumLow,..    
35c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
35c30 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
35c40 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
35c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35c60 20 20 20 20 20 20 20 20 20 20 22 53 79 73 74 65            "Syste
35c70 6d 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 7b  m directory is {
35c80 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  0}.", ForDisplay
35c90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35ca0 20 20 20 20 20 20 20 20 20 20 20 47 65 74 53 79             GetSy
35cb0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 63 6f  stemDirectory(co
35cc0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36  nfiguration.Wow6
35cd0 34 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  4))),..         
35ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
35cf0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 20 2f  raceCategory); /
35d00 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
35d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
35d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
35d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
35d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35d90 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45       #region .NE
35da0 54 20 46 72 61 6d 65 77 6f 72 6b 20 2f 20 56 69  T Framework / Vi
35db0 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61  sual Studio Data
35dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35dd0 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
35de0 63 6b 61 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  ckage = null;.. 
35df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e00 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74     FrameworkList
35e10 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d   frameworkList =
35e20 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
35e30 20 20 20 20 20 20 20 20 20 20 20 20 56 73 4c 69              VsLi
35e40 73 74 20 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c  st vsList = null
35e50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35e60 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
35e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ea0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
35eb0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74              Init
35ec0 69 61 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28  ializeVsPackage(
35ed0 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
35ee0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
35ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
35f00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
35f10 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20  Flags(..        
35f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f30 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
35f40 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  .GlobalAssemblyC
35f50 61 63 68 65 2c 20 74 72 75 65 29 20 26 26 0d 0a  ache, true) &&..
35f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f70 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
35f80 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d  ation.HasFlags(.
35f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
35fb0 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b  tallFlags.VsPack
35fc0 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  ageGlobalAssembl
35fd0 79 43 61 63 68 65 2c 20 74 72 75 65 29 2c 0d 0a  yCache, true),..
35fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ff0 20 20 20 20 20 20 20 20 72 65 66 20 70 61 63 6b          ref pack
36000 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  age);....       
36010 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
36020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36050 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
36060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36070 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77  InitializeFramew
36080 6f 72 6b 4c 69 73 74 28 72 65 67 69 73 74 72 79  orkList(registry
36090 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a  .LocalMachine,..
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 63 6f 6e 66 69 67 75 72          configur
360c0 61 74 69 6f 6e 2c 20 72 65 66 20 66 72 61 6d 65  ation, ref frame
360d0 77 6f 72 6b 4c 69 73 74 29 3b 0d 0a 0d 0a 20 20  workList);....  
360e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360f0 20 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69    InitializeVsLi
36100 73 74 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st(configuration
36110 2e 50 65 72 55 73 65 72 20 3f 0d 0a 20 20 20 20  .PerUser ?..    
36120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36130 20 20 20 20 72 65 67 69 73 74 72 79 2e 43 75 72      registry.Cur
36140 72 65 6e 74 55 73 65 72 20 3a 20 72 65 67 69 73  rentUser : regis
36150 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65  try.LocalMachine
36160 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36170 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
36180 67 75 72 61 74 69 6f 6e 2c 20 72 65 66 20 76 73  guration, ref vs
36190 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  List);..        
361a0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
361b0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
361c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
361d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
361e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
361f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36200 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36220 20 23 72 65 67 69 6f 6e 20 53 68 61 72 65 64 20   #region Shared 
36230 43 6c 69 65 6e 74 20 44 61 74 61 20 43 72 65 61  Client Data Crea
36240 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..          
36250 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
36260 20 64 69 72 65 63 74 6f 72 79 44 61 74 61 20 3d   directoryData =
36270 20 6e 65 77 20 41 6e 79 50 61 69 72 3c 73 74 72   new AnyPair<str
36280 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20  ing, bool>(..   
36290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362a0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
362b0 6f 6e 2e 44 69 72 65 63 74 6f 72 79 2c 20 63 6f  on.Directory, co
362c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74  nfiguration.Inst
362d0 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  all);....       
362e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
362f0 65 63 74 20 66 69 6c 65 4e 61 6d 65 44 61 74 61  ect fileNameData
36300 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72 3c 73   = new AnyPair<s
36310 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20  tring, bool>(.. 
36320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36330 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
36340 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c  tion.DesignerFil
36350 65 4e 61 6d 65 2c 20 63 6f 6e 66 69 67 75 72 61  eName, configura
36360 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a  tion.Install);..
36370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36380 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
36390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
363a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
363b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
363f0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
36400 20 2e 4e 45 54 20 47 41 43 20 49 6e 73 74 61 6c   .NET GAC Instal
36410 6c 2f 52 65 6d 6f 76 65 0d 0a 20 20 20 20 20 20  l/Remove..      
36420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
36430 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   (configuration.
36440 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20  HasFlags(..     
36450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36460 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
36470 61 67 73 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62  ags.GlobalAssemb
36480 6c 79 43 61 63 68 65 2c 20 74 72 75 65 29 29 0d  lyCache, true)).
36490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
364a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
364b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364c0 50 75 62 6c 69 73 68 20 70 75 62 6c 69 73 68 20  Publish publish 
364d0 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
364e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364f0 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
36500 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20  ation.WhatIf).. 
36510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36520 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
36530 73 68 20 3d 20 6e 65 77 20 50 75 62 6c 69 73 68  sh = new Publish
36540 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
36550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
36560 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
36570 2e 49 6e 73 74 61 6c 6c 29 0d 0a 20 20 20 20 20  .Install)..     
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36590 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
365a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365b0 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
365c0 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20  tion.WhatIf)..  
365d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
365f0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
36600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36610 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
36620 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f  sh.GacInstall(co
36630 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65  nfiguration.Core
36640 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
36650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36660 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
36670 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
36680 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
36690 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
366a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366b0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
366c0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
366d0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
366e0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
366f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36700 20 20 20 20 20 20 20 22 47 61 63 49 6e 73 74 61         "GacInsta
36710 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68  ll: assemblyPath
36720 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20   = {0}",..      
36730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36740 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
36750 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69  play(configurati
36760 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
36770 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
36780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36790 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
367a0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
367b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367c0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
367d0 74 69 6f 6e 2e 49 73 4c 69 6e 71 53 75 70 70 6f  tion.IsLinqSuppo
367e0 72 74 65 64 28 29 29 0d 0a 20 20 20 20 20 20 20  rted())..       
367f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36800 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36820 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
36830 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
36840 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
36850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36860 20 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77          /* throw
36870 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
36880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36890 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68           publish
368a0 2e 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66  .GacInstall(conf
368b0 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69  iguration.LinqFi
368c0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
368d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
368f0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
36900 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
36910 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
36920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
36940 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
36950 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
36960 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
36970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36990 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73   "GacInstall: as
369a0 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d  semblyPath = {0}
369b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
369c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369d0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
369e0 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ay(configuration
369f0 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c  .LinqFileName)),
36a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
36a30 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
36a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a50 20 20 20 7d 0d 0a 0d 0a 20 20 20 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 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
36a80 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d  ation.HasFlags(.
36a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ab0 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
36ac0 73 2e 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61  s.VsPackageGloba
36ad0 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20  lAssemblyCache, 
36ae0 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
36af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
36b30 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
36b40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
36b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b60 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
36b70 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
36b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b90 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
36ba0 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69  GacInstall(confi
36bb0 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65  guration.Designe
36bc0 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  rFileName);.... 
36bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
36bf0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
36c00 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
36c10 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
36c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c40 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
36c50 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
36c60 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
36c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c90 20 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a      "GacInstall:
36ca0 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20   assemblyPath = 
36cb0 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
36cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cd0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
36ce0 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74  splay(configurat
36cf0 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65  ion.DesignerFile
36d00 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
36d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
36d30 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
36d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
36d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
36d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d90 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
36da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
36db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
36dd0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48  (configuration.H
36de0 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20  asFlags(..      
36df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
36e10 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63  stallFlags.VsPac
36e20 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62  kageGlobalAssemb
36e30 6c 79 43 61 63 68 65 2c 20 74 72 75 65 29 29 0d  lyCache, true)).
36e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36e50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
36e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e80 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
36e90 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20  on.WhatIf)..    
36ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ec0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
36ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ef0 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f   publish.GacRemo
36f00 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ve(configuration
36f10 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .DesignerFileNam
36f20 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
36f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f40 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
36f50 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
36f60 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
36f70 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
36f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f90 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
36fa0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
36fb0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
36fc0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
36fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fe0 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63              "Gac
36ff0 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79  Remove: assembly
37000 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20  Path = {0}",..  
37010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37030 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e    ForDisplay(con
37040 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67  figuration.Desig
37050 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  nerFileName)),..
37060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37080 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
37090 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
370a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
370c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370d0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
370e0 69 6f 6e 2e 49 73 4c 69 6e 71 53 75 70 70 6f 72  ion.IsLinqSuppor
370f0 74 65 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ted())..        
37100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37110 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37130 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
37140 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
37150 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37170 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
37180 2a 2f 0d 0a 20 20 20 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 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
371b0 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67  GacRemove(config
371c0 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65  uration.LinqFile
371d0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
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 54 72 61 63 65 4f            TraceO
37200 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
37210 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
37220 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
37230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37240 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
37250 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
37260 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
37270 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
37280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
372a0 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d  GacRemove: assem
372b0 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
372c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
372d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372e0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
372f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69  configuration.Li
37300 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  nqFileName)),.. 
37310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37330 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
37340 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
37350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37360 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
37370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37380 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
37390 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20  ion.WhatIf)..   
373a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
373c0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
373d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373e0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73            publis
373f0 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66  h.GacRemove(conf
37400 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
37410 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
37420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37430 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
37440 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
37450 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
37460 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
37470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37480 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
37490 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
374a0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
374b0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
374c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374d0 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a       "GacRemove:
374e0 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20   assemblyPath = 
374f0 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
37500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37510 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
37520 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
37530 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  CoreFileName)),.
37540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37560 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
37570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37580 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
37590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
375b0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
375c0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
375d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
375e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
375f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37610 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
37620 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
37630 67 69 6f 6e 20 2e 4e 45 54 20 41 73 73 65 6d 62  gion .NET Assemb
37640 6c 79 46 6f 6c 64 65 72 73 0d 0a 20 20 20 20 20  lyFolders..     
37650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
37660 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
37670 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20  .HasFlags(..    
37680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37690 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46          InstallF
376a0 6c 61 67 73 2e 41 73 73 65 6d 62 6c 79 46 6f 6c  lags.AssemblyFol
376b0 64 65 72 73 2c 20 74 72 75 65 29 29 0d 0a 20 20  ders, true))..  
376c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
376e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
376f0 28 21 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f  (!ForEachFramewo
37700 72 6b 52 65 67 69 73 74 72 79 28 72 65 67 69 73  rkRegistry(regis
37710 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
37720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37730 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
37740 69 73 74 2c 20 50 72 6f 63 65 73 73 41 73 73 65  ist, ProcessAsse
37750 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 0d 0a 20 20  mblyFolders,..  
37760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
37780 6e 66 69 67 75 72 61 74 69 6f 6e 2e 52 65 67 69  nfiguration.Regi
37790 73 74 72 79 56 65 72 73 69 6f 6e 2c 20 64 69 72  stryVersion, dir
377a0 65 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20 20 20  ectoryData,..   
377b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377c0 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 65 74               Net
377d0 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c  FxIs32BitOnly ||
377e0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57   configuration.W
377f0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37810 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
37820 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73  tion.ThrowOnMiss
37830 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
37840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37850 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
37860 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66  ion.WhatIf, conf
37870 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
37880 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
37890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378a0 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d      ref error)).
378b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
378c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
378d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378e0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
378f0 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61  .ShowMessage(Tra
37900 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
37910 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
37920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37930 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
37940 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
37950 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  k, thisAssembly,
37960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37980 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61    error, traceCa
37990 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42  tegory, MessageB
379a0 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20  oxButtons.OK,.. 
379b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
379d0 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72  essageBoxIcon.Er
379e0 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
379f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a00 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
37a10 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
37a20 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
37a30 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
37a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a50 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
37a60 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
37a70 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c  ack, "Failure.",
37a80 0d 0a 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
37ab0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ad0 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41   return 1; /* FA
37ae0 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20  ILURE */..      
37af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
37b10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
37b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b30 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
37b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
37b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
37b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37ba0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45       #region .NE
37bb0 54 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  T DbProviderFact
37bc0 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
37bd0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
37be0 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
37bf0 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
37c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c10 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44    InstallFlags.D
37c20 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
37c30 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
37c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37c60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61           bool sa
37c70 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ved = false;....
37c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c90 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72          if (!For
37ca0 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e  EachFrameworkCon
37cb0 66 69 67 28 72 65 67 69 73 74 72 79 2c 0d 0a 20  fig(registry,.. 
37cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
37ce0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72  rameworkList, Pr
37cf0 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65 72 46  ocessDbProviderF
37d00 61 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  actory,..       
37d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
37d30 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 56 65 72  ration.ConfigVer
37d40 73 69 6f 6e 2c 20 49 6e 76 61 72 69 61 6e 74 4e  sion, InvariantN
37d50 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
37d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d70 20 20 20 20 20 20 50 72 6f 76 69 64 65 72 4e 61        ProviderNa
37d80 6d 65 2c 20 44 65 73 63 72 69 70 74 69 6f 6e 2c  me, Description,
37d90 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65   FactoryTypeName
37da0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37dc0 20 20 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e     coreAssemblyN
37dd0 61 6d 65 2c 20 64 69 72 65 63 74 6f 72 79 44 61  ame, directoryDa
37de0 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
37df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e00 20 20 20 20 20 4e 65 74 46 78 49 73 33 32 42 69       NetFxIs32Bi
37e10 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75  tOnly || configu
37e20 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20  ration.Wow64,.. 
37e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
37e50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72  onfiguration.Thr
37e60 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
37e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
37e90 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
37ea0 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  If, configuratio
37eb0 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  n.Verbose,..    
37ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ed0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
37ee0 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72  saved, ref error
37ef0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
37f00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
37f30 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28  Ops.ShowMessage(
37f40 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
37f50 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
37f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f70 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
37f80 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
37f90 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62  back, thisAssemb
37fa0 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
37fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fc0 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63       error, trac
37fd0 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61  eCategory, Messa
37fe0 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c  geBoxButtons.OK,
37ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38010 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
38020 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  .Error);....    
38030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38040 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
38050 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
38060 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
38070 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
38080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38090 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
380a0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
380b0 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65  llback, "Failure
380c0 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
380d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380e0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
380f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
38100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38110 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
38120 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
38130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38140 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
38150 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
38160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38170 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
38180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38190 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
381a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
381b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
381c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
381d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
381e0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
381f0 56 53 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20  VS Package..    
38200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38210 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
38220 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
38230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38240 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
38250 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67 65 2c  Flags.VsPackage,
38260 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20   true))..       
38270 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
38280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38290 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72          if (!For
382a0 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67  EachVsVersionReg
382b0 69 73 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d  istry(registry,.
382c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
382d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382e0 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73   vsList, Process
382f0 56 73 50 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  VsPackage,..    
38300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38310 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
38320 69 67 75 72 61 74 69 6f 6e 2e 56 73 56 65 72 73  iguration.VsVers
38330 69 6f 6e 53 75 66 66 69 78 2c 20 70 61 63 6b 61  ionSuffix, packa
38340 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
38350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38360 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 44 61 74       fileNameDat
38370 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
38380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38390 20 20 20 20 56 73 49 73 33 32 42 69 74 4f 6e 6c      VsIs32BitOnl
383a0 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74 69  y || configurati
383b0 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20  on.Wow64,..     
383c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
383e0 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e  guration.ThrowOn
383f0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
38400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38410 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
38420 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20  uration.WhatIf, 
38430 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65  configuration.Ve
38440 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
38450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38460 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
38470 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
38480 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
38490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
384b0 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65  eOps.ShowMessage
384c0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
384d0 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
384e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384f0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
38500 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
38510 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d  lback, thisAssem
38520 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bly,..          
38530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38540 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61        error, tra
38550 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73  ceCategory, Mess
38560 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b  ageBoxButtons.OK
38570 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
38580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38590 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f     MessageBoxIco
385a0 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20  n.Error);....   
385b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385c0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
385d0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
385e0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
385f0 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20  diumHigh,..     
38600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38610 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
38620 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
38630 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72  allback, "Failur
38640 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
38650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38660 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
38670 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
38680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38690 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f       return 1; /
386a0 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20  * FAILURE */..  
386b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
386d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
386e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386f0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
38700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38710 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
38720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38750 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
38760 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
38770 20 56 53 20 44 61 74 61 53 6f 75 72 63 65 0d 0a   VS DataSource..
38780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38790 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
387a0 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d  ation.HasFlags(.
387b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
387c0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
387d0 74 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61 74 61  tallFlags.VsData
387e0 53 6f 75 72 63 65 2c 20 74 72 75 65 29 29 0d 0a  Source, true))..
387f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20