System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 33e2f83149f5dc977fa65149d83fa2285af685e1:


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 34 30 2c 0d  bool noNetFx40,.
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 35 2c   bool noNetFx45,
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 56 73 32 30 30 35 2c    bool noVs2005,
f5c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f5d0: 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c    bool noVs2008,
f5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f5f0: 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c    bool noVs2010,
f600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f610: 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 2c    bool noVs2012,
f620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f630: 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d    bool noTrace,.
f640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f650: 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c   bool noConsole,
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 4c 6f 67 2c 0d 0a 20    bool noLog,.. 
f680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f690: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
f6a0: 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
f6b0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
f6c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f6d0: 20 20 20 62 6f 6f 6c 20 64 65 62 75 67 2c 0d 0a     bool debug,..
f6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6f0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
f700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f710: 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20  ool confirm..   
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
f730: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f750: 68 69 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61  his.assembly = a
f760: 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20  ssembly;..      
f770: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c            this.l
f780: 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67  ogFileName = log
f790: 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
f7a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f7b0: 64 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65  directory = dire
f7c0: 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  ctory;..        
f7d0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 72          this.cor
f7e0: 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65  eFileName = core
f7f0: 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
f800: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f810: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c  linqFileName = l
f820: 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  inqFileName;..  
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f840: 69 73 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  is.designerFileN
f850: 61 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 46 69  ame = designerFi
f860: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
f870: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65           this.re
f880: 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20  gistryVersion = 
f890: 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b  registryVersion;
f8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f8b0: 20 20 74 68 69 73 2e 63 6f 6e 66 69 67 56 65 72    this.configVer
f8c0: 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65 72  sion = configVer
f8d0: 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
f8e0: 20 20 20 20 20 20 20 74 68 69 73 2e 76 73 56 65         this.vsVe
f8f0: 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 73  rsionSuffix = vs
f900: 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a  VersionSuffix;..
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f920: 74 68 69 73 2e 64 65 62 75 67 46 6f 72 6d 61 74  this.debugFormat
f930: 20 3d 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d   = debugFormat;.
f940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f950: 20 74 68 69 73 2e 74 72 61 63 65 46 6f 72 6d 61   this.traceForma
f960: 74 20 3d 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  t = traceFormat;
f970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f980: 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 46 6c    this.installFl
f990: 61 67 73 20 3d 20 69 6e 73 74 61 6c 6c 46 6c 61  ags = installFla
f9a0: 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs;..           
f9b0: 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 50       this.debugP
f9c0: 72 69 6f 72 69 74 79 20 3d 20 64 65 62 75 67 50  riority = debugP
f9d0: 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
f9e0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74            this.t
f9f0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 74  racePriority = t
fa00: 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20  racePriority;.. 
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fa20: 68 69 73 2e 70 65 72 55 73 65 72 20 3d 20 70 65  his.perUser = pe
fa30: 72 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  rUser;..        
fa40: 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73          this.ins
fa50: 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c 6c 3b 0d  tall = install;.
fa60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fa70: 20 74 68 69 73 2e 77 6f 77 36 34 20 3d 20 77 6f   this.wow64 = wo
fa80: 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  w64;..          
fa90: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 52 75 6e        this.noRun
faa0: 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 6e 6f  timeVersion = no
fab0: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d  RuntimeVersion;.
fac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fad0: 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74 6f 70 20   this.noDesktop 
fae0: 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20  = noDesktop;..  
faf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fb00: 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 6e  is.noCompact = n
fb10: 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20  oCompact;..     
fb20: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fb30: 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e 6f 4e 65  noNetFx20 = noNe
fb40: 74 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20  tFx20;..        
fb50: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
fb60: 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74 46 78  etFx40 = noNetFx
fb70: 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40;..           
fb80: 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
fb90: 78 34 35 20 3d 20 6e 6f 4e 65 74 46 78 34 35 3b  x45 = noNetFx45;
fba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fbb0: 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 35 20    this.noVs2005 
fbc0: 3d 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20  = noVs2005;..   
fbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fbe0: 73 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56  s.noVs2008 = noV
fbf0: 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20  s2008;..        
fc00: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
fc10: 73 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30  s2010 = noVs2010
fc20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fc30: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 32     this.noVs2012
fc40: 20 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20   = noVs2012;..  
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fc60: 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54  is.noTrace = noT
fc70: 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  race;..         
fc80: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f         this.noCo
fc90: 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c  nsole = noConsol
fca0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
fcb0: 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d      this.noLog =
fcc0: 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20   noLog;..       
fcd0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 68           this.th
fce0: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74  rowOnMissing = t
fcf0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a  hrowOnMissing;..
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd10: 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68  this.whatIf = wh
fd20: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
fd30: 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75         this.debu
fd40: 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20 20 20  g = debug;..    
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fd60: 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72 62 6f  .verbose = verbo
fd70: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
fd80: 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 72       this.confir
fd90: 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  m = confirm;..  
fda0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
fdb0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
fdc0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
fdd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
fde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe10: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
fe20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
fe30: 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65 74  ivate Static Met
fe40: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
fe50: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
fe60: 20 76 6f 69 64 20 47 65 74 44 65 66 61 75 6c 74   void GetDefault
fe70: 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20  FileNames(..    
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
fe90: 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
fea0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
feb0: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f     ref string co
fec0: 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  reFileName,..   
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
fee0: 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
fef0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
ff00: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
ff10: 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
ff20: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
ff30: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
ff40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ff50: 20 20 20 20 20 20 69 66 20 28 74 68 69 73 41 73        if (thisAs
ff60: 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d  sembly == null).
ff70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff80: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
ff90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffa0: 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68  directory = Path
ffb0: 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d  .GetDirectoryNam
ffc0: 65 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c  e(thisAssembly.L
ffd0: 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  ocation);....   
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
fff0: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
10000 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
10010 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10020 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
10030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10040 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d    coreFileName =
10050 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
10060 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
10080 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65  staller.CoreFile
10090 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
100a0 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
100b0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
100c0 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
100d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
100e0 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
100f0 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  LinqFileName);..
10100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10110 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
10120 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
10130 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  e(directory,..  
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69    Installer.Desi
10160 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
10170 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
10180 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
10190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
101e0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
101f0 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28  ool CheckOption(
10200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10210 20 20 72 65 66 20 73 74 72 69 6e 67 20 61 72 67    ref string arg
10220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10230 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
10240 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10250 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
10260 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20  t = arg;....    
10270 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10280 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
10290 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d 0a  Empty(result))..
102a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
102c0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
102e0 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61  / NOTE: Remove a
102f0 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74 63  ll leading switc
10300 68 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20 20  h chars...      
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10330 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 72        result = r
10340 65 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74 28  esult.TrimStart(
10350 53 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d  SwitchChars);...
10360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10370 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10390 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63  NOTE: How many c
103a0 68 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76 65  hars were remove
103b0 64 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d?..            
103c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103e0 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e  int count = arg.
103f0 4c 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74 2e  Length - result.
10400 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10420 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10430 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
10440 57 61 73 20 74 68 65 72 65 20 61 74 20 6c 65 61  Was there at lea
10450 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20  st one?..       
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 69 66 20 28 63 6f 75 6e 74 20 3e       if (count >
10490 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
104a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
104d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104e0 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70  // NOTE: Ok, rep
104f0 6c 61 63 65 20 74 68 65 69 72 20 6f 72 69 67 69  lace their origi
10500 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nal..           
10510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10520 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d        argument..
10530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10540 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
10550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10560 20 20 20 20 20 61 72 67 20 3d 20 72 65 73 75 6c       arg = resul
10570 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
105a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
105b0 45 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73 20  E: Yes, this is 
105c0 61 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20 20  a switch...     
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
105f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10600 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10620 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
10630 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10640 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10650 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
10660 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10670 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
10680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
106c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
106d0 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63  static bool Matc
106e0 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  hOption(..      
106f0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10700 20 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20   arg,..         
10710 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f 70         string op
10720 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..          
10730 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
10740 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10750 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67          if ((arg
10760 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70   == null) || (op
10770 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  tion == null))..
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10790 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
107a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
107b0 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
107c0 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c 20  ng.Compare(arg, 
107d0 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20  0, option, 0,.. 
107e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107f0 20 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53     arg.Length, S
10800 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
10810 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
10820 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20  e) == 0;..      
10830 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10840 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
10850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10890 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
108a0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50  e static bool? P
108b0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20  arseBoolean(..  
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
108d0 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20  ring text..     
108e0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
108f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10900 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10910 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
10920 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20  rEmpty(text)).. 
10930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
10940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10950 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65        bool value
10960 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10970 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f           if (boo
10980 6c 2e 54 72 79 50 61 72 73 65 28 74 65 78 74 2c  l.TryParse(text,
10990 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20   out value))..  
109a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
109c0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
109d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
109e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
109f0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
10a00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10a10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
10a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a50 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
10a60 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
10a70 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50 61  static object Pa
10a80 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
10a90 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 65            Type e
10aa0 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20 20  numType,..      
10ab0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10ac0 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20   text,..        
10ad0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43          bool noC
10ae0 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ase..           
10af0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
10b00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10b10 20 20 20 20 20 20 20 69 66 20 28 28 65 6e 75 6d         if ((enum
10b20 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  Type == null) ||
10b30 20 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75   !enumType.IsEnu
10b40 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
10b50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
10b60 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
10b70 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
10b80 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
10b90 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  y(text))..      
10ba0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bc0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
10bd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bf0 20 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d       return Enum
10c00 2e 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65 2c  .Parse(enumType,
10c10 20 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d   text, noCase);.
10c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10c40 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
10c50 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
10c60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c80 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
10c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10ca0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10cb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10cd0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
10ce0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
10cf0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
10d00 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
10d10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
10d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d50 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
10d60 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
10d70 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  ic Static Method
10d80 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
10d90 75 62 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e  ublic static Con
10da0 66 69 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74  figuration Creat
10db0 65 44 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20  eDefault()..    
10dc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10dd0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10de0 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75  g directory = nu
10df0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
10e00 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
10e10 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  FileName = null;
10e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10e30 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c    string linqFil
10e40 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  eName = null;.. 
10e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
10e60 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
10e70 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
10e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10e90 20 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65    GetDefaultFile
10ea0 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
10ec0 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20 63  directory, ref c
10ed0 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66  oreFileName, ref
10ee0 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a   linqFileName,..
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f00 20 20 20 20 72 65 66 20 64 65 73 69 67 6e 65 72      ref designer
10f10 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
10f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10f30 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67 75  turn new Configu
10f40 72 61 74 69 6f 6e 28 74 68 69 73 41 73 73 65 6d  ration(thisAssem
10f50 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63  bly, null, direc
10f60 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
10f70 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
10f80 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46 69 6c  ileName, linqFil
10f90 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65 72 46  eName, designerF
10fa0 69 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e  ileName, null, n
10fb0 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
10fc0 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
10fd0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f  TraceOps.DebugFo
10fe0 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 54  rmat, TraceOps.T
10ff0 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  raceFormat,..   
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11010 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44 65   InstallFlags.De
11020 66 61 75 6c 74 2c 20 54 72 61 63 65 50 72 69 6f  fault, TracePrio
11030 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 0d 0a 20  rity.Default,.. 
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11050 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
11060 2e 44 65 66 61 75 6c 74 2c 20 66 61 6c 73 65 2c  .Default, false,
11070 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61   true, false, fa
11080 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20  lse, false,..   
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
110b0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
110c0 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
110d0 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20  , false,..      
110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
110f0 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
11100 65 2c 20 74 72 75 65 2c 20 74 72 75 65 2c 20 66  e, true, true, f
11110 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
11120 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
11130 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
11140 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
11150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11180 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
11190 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
111a0 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
111b0 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
111c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
111d0 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c  blic static bool
111e0 20 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20   FromArgs(..    
111f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
11200 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20  ng[] args,..    
11210 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
11220 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20   strict,..      
11230 20 20 20 20 20 20 20 20 20 20 72 65 66 20 43 6f            ref Co
11240 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
11250 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
11260 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
11270 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
11290 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112b0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
112c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
112d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
112e0 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  args == null).. 
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11300 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
11310 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
11320 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
11330 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
11340 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11360 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43  onfiguration = C
11370 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65  onfiguration.Cre
11380 61 74 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d  ateDefault();...
11390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
113a0 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20       int length 
113b0 3d 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a  = args.Length;..
113c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
113d0 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
113e0 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20  ndex = 0; index 
113f0 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b  < length; index+
11400 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
11410 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11430 20 20 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20     string arg = 
11440 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a  args[index];....
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11460 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11480 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69      // NOTE: Ski
11490 70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 74  p any argument t
114a0 68 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29 20  hat is null (?) 
114b0 6f 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20  or an empty..   
114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114d0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74       //       st
114e0 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  ring...         
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11500 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
11510 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
11520 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
11530 70 74 79 28 61 72 67 29 29 0d 0a 20 20 20 20 20  pty(arg))..     
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11550 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
11560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11590 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
115a0 20 57 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f   We are going to
115b0 20 6d 6f 64 69 66 79 20 74 68 65 20 6f 72 69 67   modify the orig
115c0 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a 20  inal argument.. 
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
115f0 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20  by removing any 
11600 6c 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20 63  leading option c
11610 68 61 72 61 63 74 65 72 73 3b 0d 0a 20 20 20 20  haracters;..    
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11630 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
11640 72 65 66 6f 72 65 2c 20 77 65 20 75 73 65 20 61  refore, we use a
11650 20 6e 65 77 20 73 74 72 69 6e 67 20 74 6f 20 68   new string to h
11660 6f 6c 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20  old the..       
11670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11680 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69 66 69   //       modifi
11690 65 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20  ed argument...  
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116d0 20 20 73 74 72 69 6e 67 20 6e 65 77 41 72 67 20    string newArg 
116e0 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20  = arg;....      
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11700 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11720 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73   NOTE: All the s
11730 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64  upported command
11740 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75   line options mu
11750 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..            
11760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
11770 20 20 20 20 20 62 65 67 69 6e 20 77 69 74 68 20       begin with 
11780 61 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63  an option charac
11790 74 65 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e 75  ter (e.g. a minu
117a0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
117b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
117c0 20 20 20 20 6f 72 20 66 6f 72 77 61 72 64 20 73      or forward s
117d0 6c 61 73 68 29 3b 20 61 74 74 65 6d 70 74 20 74  lash); attempt t
117e0 6f 20 76 61 6c 69 64 61 74 65 20 74 68 61 74 0d  o validate that.
117f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11800 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11810 20 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61    now.  If we fa
11820 69 6c 20 69 6e 20 73 74 72 69 63 74 20 6d 6f 64  il in strict mod
11830 65 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 3b 0d  e, we are done;.
11840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11850 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11860 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73    otherwise, jus
11870 74 20 73 6b 69 70 20 74 68 69 73 20 61 72 67 75  t skip this argu
11880 6d 65 6e 74 20 61 6e 64 20 61 64 76 61 6e 63 65  ment and advance
11890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
118a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
118b0 20 20 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6f     to the next o
118c0 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne...           
118d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
118e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
118f0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 43 68           if (!Ch
11900 65 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65  eckOption(ref ne
11910 77 41 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20  wArg))..        
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11930 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
11950 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
11960 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11990 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
119a0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
119b0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
119c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
119e0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
119f0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a10 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65       "Unsupporte
11a20 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61  d command line a
11a30 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a  rgument: {0}",..
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a60 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29  ForDisplay(arg))
11a70 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
11a80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
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 20 20 20 20 72 65                re
11ad0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
11b00 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11b20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11b30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
11b60 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65  All the supporte
11b70 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  d command line o
11b80 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20  ptions must..   
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 20 20 20 20 20 20 20 68 61       //       ha
11bb0 76 65 20 61 20 76 61 6c 75 65 3b 20 74 68 65 72  ve a value; ther
11bc0 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74 20 74  efore, attempt t
11bd0 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20  o advance..     
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bf0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69     //       to i
11c00 74 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61  t now.  If we fa
11c10 69 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 2e  il, we are done.
11c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11c30 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c50 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a        index++;..
11c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11c70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
11c80 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a  dex >= length)..
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ca0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cc0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
11cd0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
11ce0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d00 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
11d10 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
11d20 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
11d50 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
11d60 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
11d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4d 69               "Mi
11d90 73 73 69 6e 67 20 76 61 6c 75 65 20 66 6f 72 20  ssing value for 
11da0 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20  option: {0}",.. 
11db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
11dd0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c  orDisplay(arg)),
11de0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
11df0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e10 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
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 20 20 20 20 72 65 74               ret
11e40 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e60 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
11e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11e80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
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 2f 2f 0d 0a 20 20 20 20 20         //..     
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ec0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
11ed0 20 74 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c   the textual val
11ee0 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61  ue of this comma
11ef0 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20  nd line..       
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f10 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e   //       option
11f20 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11f30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f50 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65         string te
11f60 78 74 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d  xt = args[index]
11f70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
11f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11fa0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
11fb0 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 69  : Figure out whi
11fc0 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ch command line 
11fd0 6f 70 74 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a  option this is..
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 20 2f 2f 20 20 20 20 20 20          //      
12000 20 28 62 61 73 65 64 20 6f 6e 20 61 20 70 61 72   (based on a par
12010 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68 29  tial name match)
12020 20 61 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a 20   and then try.. 
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
12050 74 6f 20 69 6e 74 65 72 70 72 65 74 20 74 68 65  to interpret the
12060 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61   textual value a
12070 73 20 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20  s the correct.. 
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12090 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
120a0 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  type...         
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
120c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
120d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4d             if (M
120e0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
120f0 67 2c 20 22 63 6f 6e 66 69 67 56 65 72 73 69 6f  g, "configVersio
12100 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n"))..          
12110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
12120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
12140 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69  figuration.confi
12150 67 56 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b  gVersion = text;
12160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12170 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12190 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
121a0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
121b0 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29 0d 0a 20  , "confirm")).. 
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121f0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
12200 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
12210 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12230 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
12240 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12260 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12280 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
12290 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
122a0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
122b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
122d0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
122e0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
122f0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
12300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12310 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
12320 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
12330 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12350 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
12360 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
12370 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123a0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
123b0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
123c0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
123f0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12420 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
12430 20 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
12460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12480 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
124b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124c0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
124d0 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d  ration.confirm =
124e0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12500 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12520 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
12530 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
12540 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d  coreFileName")).
12550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12560 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12580 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
12590 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61  ation.coreFileNa
125a0 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  me = text;..    
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
125d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
125e0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
125f0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62  ion(newArg, "deb
12600 75 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ug"))..         
12610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
12640 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
12650 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
12660 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12680 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
12690 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
126a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
126b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
126e0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
126f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
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 54 72 61 63 65 50 72 69 6f         TracePrio
12720 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
12730 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12760 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
12770 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127a0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
127b0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
127c0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127e0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
127f0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
12800 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12830 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
12840 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12860 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
12870 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
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 72 65 74 75 72 6e 20 66          return f
128a0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
128b0 20 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 63 6f 6e 74 69 6e 75           continu
128d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12910 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
12920 65 62 75 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  ebug = (bool)val
12930 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12960 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
12970 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
12980 41 72 67 2c 20 22 64 65 62 75 67 46 6f 72 6d 61  Arg, "debugForma
12990 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
129b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
129d0 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
129e0 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a  Format = text;..
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
12a10 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74  eOps.DebugFormat
12a20 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
12a30 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20  .debugFormat;.. 
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a70 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
12a80 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
12a90 64 65 62 75 67 50 72 69 6f 72 69 74 79 22 29 29  debugPriority"))
12aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12ab0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ad0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
12ae0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75  value = ParseEnu
12af0 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m(..            
12b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b10 20 20 20 20 74 79 70 65 6f 66 28 54 72 61 63 65      typeof(Trace
12b20 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c  Priority), text,
12b30 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   true);....     
12b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b50 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
12b60 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
12b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ba0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
12bb0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
12bc0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
12bf0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
12c00 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
12c10 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
12c40 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
12c50 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
12c80 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20  alid {0} value: 
12c90 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cb0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
12cc0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
12cd0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d00 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
12d10 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d30 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
12d40 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
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 72 65 74 75 72 6e 20 66          return f
12d70 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
12d80 20 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 63 6f 6e 74 69 6e 75           continu
12da0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12de0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
12df0 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 28  ebugPriority = (
12e00 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 76 61  TracePriority)va
12e10 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e30 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
12e40 50 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69  Priority = 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 3b 0d 0a 20 20 20 20 20 20 20  iority;..       
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e80 20 7d 0d 0a 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 65 6c 73 65              else
12ea0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
12eb0 28 6e 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e  (newArg, "design
12ec0 65 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20  erFileName")).. 
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 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 63 6f 6e 66 69 67 75 72 61 74        configurat
12f10 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65  ion.designerFile
12f20 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20  Name = text;..  
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
12f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f60 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
12f70 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
12f80 69 72 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20  irectory"))..   
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fa0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fc0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
12fd0 6e 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 74 65  n.directory = te
12fe0 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  xt;....         
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13000 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13020 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45     // NOTE: *SPE
13030 43 49 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65  CIAL* Must refre
13040 73 68 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65  sh the file name
13050 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13070 2f 20 20 20 20 20 20 20 68 65 72 65 20 62 65 63  /       here bec
13080 61 75 73 65 20 74 68 65 20 75 6e 64 65 72 6c 79  ause the underly
13090 69 6e 67 20 64 69 72 65 63 74 6f 72 79 0d 0a 20  ing directory.. 
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
130c0 20 20 20 20 68 61 73 20 63 68 61 6e 67 65 64 2e      has changed.
130d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
130f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
13110 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d  ring coreFileNam
13120 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
13130 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d  n.coreFileName;.
13140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13160 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
13170 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c  lOrEmpty(coreFil
13180 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
13190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131a0 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c           coreFil
131b0 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
131c0 46 69 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c  FileName(coreFil
131d0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131f0 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
13200 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
13210 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  coreFileName))..
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49  coreFileName = I
13250 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c  nstaller.CoreFil
13260 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13280 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13290 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.coreFileName
132a0 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
132b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
132e0 64 69 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46  directory, coreF
132f0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13310 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
13320 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 63  linqFileName = c
13330 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e  onfiguration.lin
13340 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  qFileName;....  
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
13370 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
13380 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  pty(linqFileName
13390 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133b0 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65      linqFileName
133c0 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e   = Path.GetFileN
133d0 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ame(linqFileName
133e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13400 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
13410 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46  ullOrEmpty(linqF
13420 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13440 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46             linqF
13450 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c  ileName = Instal
13460 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ler.LinqFileName
13470 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13490 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
134a0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  inqFileName = Pa
134b0 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20  th.Combine(..   
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
134e0 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63  figuration.direc
134f0 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61  tory, linqFileNa
13500 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67      string desig
13530 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f  nerFileName = co
13540 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69  nfiguration.desi
13550 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  gnerFileName;...
13560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13570 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13580 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
13590 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46  rEmpty(designerF
135a0 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67             desig
135d0 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  nerFileName = Pa
135e0 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64  th.GetFileName(d
135f0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
13600 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13620 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
13630 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
13640 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
13670 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
13680 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67   Installer.Desig
13690 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  nerFileName;....
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
136c0 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
136d0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
136e0 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20  h.Combine(..    
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13700 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
13710 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74  iguration.direct
13720 6f 72 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c  ory, designerFil
13730 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  eName);..       
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13750 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
13760 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
13770 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
13780 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c  (newArg, "instal
13790 6c 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  l"))..          
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
137b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
137d0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
137e0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
137f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13810 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
13820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13860 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
13870 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
13880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
138b0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
138c0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
13900 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13930 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
13940 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
13950 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
13960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13970 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
13980 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
13990 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
139d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13a00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
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 72 65 74 75 72 6e 20 66 61         return fa
13a30 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
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 63 6f 6e 74 69 6e 75 65          continue
13a60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13a80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13aa0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e  configuration.in
13ab0 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76 61  stall = (bool)va
13ac0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13af0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
13b00 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
13b10 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c  wArg, "installFl
13b20 61 67 73 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ags"))..        
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
13b60 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61  bject value = Pa
13b70 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b90 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
13ba0 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20  (InstallFlags), 
13bb0 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a  text, true);....
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13be0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13c30 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
13c40 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
13c80 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
13c90 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13cc0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
13cd0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d00 20 22 49 6e 76 61 6c 69 64 20 69 6e 73 74 61 6c   "Invalid instal
13d10 6c 20 66 6c 61 67 73 20 76 61 6c 75 65 3a 20 7b  l flags value: {
13d20 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d40 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
13d50 70 6c 61 79 28 74 65 78 74 29 29 2c 20 74 72 61  play(text)), tra
13d60 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d90 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
13dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13df0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
13e40 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46  uration.installF
13e50 6c 61 67 73 20 3d 20 28 49 6e 73 74 61 6c 6c 46  lags = (InstallF
13e60 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a 20 20 20  lags)value;..   
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e80 20 20 20 20 20 7d 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
13eb0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69  tion(newArg, "li
13ec0 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20  nqFileName")).. 
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f00 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13f10 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.linqFileName
13f20 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
13f60 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
13f70 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46 69  n(newArg, "logFi
13f80 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20  leName"))..     
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
13fd0 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65  logFileName = te
13fe0 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14010 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
14020 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
14030 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22  Arg, "noCompact"
14040 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
14050 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14070 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
14080 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
14090 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
140c0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14110 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
14120 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
14160 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
14170 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
14180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
141a0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
141b0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141e0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
141f0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
14200 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14220 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
14230 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
14240 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
14280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142a0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
142b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142d0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
142e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
14310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14350 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f  nfiguration.noCo
14360 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61  mpact = (bool)va
14370 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
143a0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
143b0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
143c0 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f 6c 65  wArg, "noConsole
143d0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
14410 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
14420 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
14430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
14450 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
14460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
144b0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
144c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
144f0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
14500 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14530 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
14540 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
14580 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
14590 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145b0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
145c0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
145d0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14600 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
14610 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
14640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14660 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
14670 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
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 63 6f 6e 74 69 6e 75 65 3b         continue;
146a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
146c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
146e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43  onfiguration.noC
146f0 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76  onsole = (bool)v
14700 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14730 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
14740 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
14750 65 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f  ewArg, "noDeskto
14760 70 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  p"))..          
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
14780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
147a0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
147b0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
147c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
147e0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
147f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
14810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14830 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
14840 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
14850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
14880 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
14890 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
148d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14900 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
14910 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
14920 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
14950 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
14960 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
149a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
149d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
14a00 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
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 63 6f 6e 74 69 6e 75 65          continue
14a30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
14a80 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c 29  Desktop = (bool)
14a90 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
14ac0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
14ad0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
14ae0 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f 67 22 29  newArg, "noLog")
14af0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14b00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
14b30 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
14b40 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
14b70 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
14bc0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
14bd0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
14c10 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
14c20 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14c50 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
14c60 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
14ca0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
14cb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
14ce0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
14cf0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
14d30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
14d90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
14de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
14e00 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67  figuration.noLog
14e10 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
14e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14e30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
14e60 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
14e70 20 22 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d 0a   "noNetFx20"))..
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
14ec0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
14ed0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ef0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
14f00 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
14f50 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
14f60 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f90 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
14fa0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
14fb0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
14fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fd0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14fe0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
14ff0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
15020 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
15030 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15060 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
15070 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
15080 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
150b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
150f0 20 20 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
15120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15140 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
15150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15160 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15180 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
15190 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32  uration.noNetFx2
151a0 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  0 = (bool)value;
151b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
151c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
151d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151e0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
151f0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
15200 2c 20 22 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d  , "noNetFx40")).
15210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15220 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15240 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
15250 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
15260 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
15270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15280 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
15290 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152d0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
152e0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
152f0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
15300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15320 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
15330 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
15340 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
15350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15360 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
15370 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
15380 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
153b0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
153c0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
153d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
153e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153f0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
15400 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
15410 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
15440 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
15450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
15480 20 20 20 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
154b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154d0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
154e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15510 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
15520 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
15530 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  40 = (bool)value
15540 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15550 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
15560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15570 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
15580 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
15590 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35 22 29 29  g, "noNetFx45"))
155a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
155b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
155e0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
155f0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
15600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15610 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
15620 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
15670 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
15680 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
156c0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
156d0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
156e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
15700 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
15710 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15740 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
15750 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
15760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15780 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
15790 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
157a0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
157d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
157e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
15810 20 20 20 20 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
15840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15860 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15880 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
15890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
158b0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
158c0 78 34 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  x45 = (bool)valu
158d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
158e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15900 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
15910 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
15920 72 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65  rg, "noRuntimeVe
15930 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20  rsion"))..      
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15970 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
15980 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
15990 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
159c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a00 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
15a10 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
15a20 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a40 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
15a50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
15a60 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a90 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
15aa0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
15ab0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ad0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
15ae0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
15af0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
15b20 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
15b30 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
15b40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b60 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
15b70 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
15ba0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15bd0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
15c00 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15c50 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  n.noRuntimeVersi
15c60 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  on = (bool)value
15c70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15c80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d        else if (M
15cb0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
15cc0 67 2c 20 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a  g, "noTrace"))..
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 20 7b 0d 0a 20 20 20 20 20          {..     
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
15d10 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
15d20 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d40 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
15d50 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d90 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
15da0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
15db0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15de0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
15df0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
15e00 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
15e30 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
15e40 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
15e70 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
15e80 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
15ec0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
15ed0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15f00 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f30 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f60 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
15f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f90 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
15fe0 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20  uration.noTrace 
15ff0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16030 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
16040 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
16050 22 6e 6f 56 73 32 30 30 35 22 29 29 0d 0a 20 20  "noVs2005"))..  
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16070 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16090 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
160a0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
160b0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
160e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16120 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
16130 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
16140 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16170 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
16180 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16190 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
161a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
161c0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
161d0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
16200 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
16210 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16240 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
16250 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
16260 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16290 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
162c0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
162f0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16320 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16360 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
16370 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d  ation.noVs2005 =
16380 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
163b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163c0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
163d0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
163e0 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20  noVs2008"))..   
163f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16400 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16420 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
16430 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
16440 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
16470 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16490 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
164c0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
164d0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
16500 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
16510 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
16520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16540 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
16550 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
16560 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16580 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
16590 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
165a0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165d0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
165e0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
165f0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16620 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16650 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16680 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
166b0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
166e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166f0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
16700 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20  tion.noVs2008 = 
16710 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16730 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16750 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
16760 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
16770 6f 56 73 32 30 31 30 22 29 29 0d 0a 20 20 20 20  oVs2010"))..    
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16790 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167b0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
167c0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
167d0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
16800 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16820 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16840 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
16850 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
16860 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
16890 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
168a0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
168b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
168c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
168e0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
168f0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
16920 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
16930 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16960 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
16970 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
16980 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
169b0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
169e0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
16a10 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16a40 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
16a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a80 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
16a90 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28  ion.noVs2010 = (
16aa0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ac0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ae0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
16af0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
16b00 56 73 32 30 31 32 22 29 29 0d 0a 20 20 20 20 20  Vs2012"))..     
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b40 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
16b50 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
16b60 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b80 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
16b90 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bd0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
16be0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
16bf0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
16c00 20 20 20 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 54 72 61 63 65             Trace
16c20 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
16c30 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
16c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
16c70 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
16c80 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
16cb0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
16cc0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
16cf0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
16d00 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
16d10 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d30 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
16d40 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
16d70 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 72 65 74 75              retu
16da0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
16dd0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e10 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
16e20 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 28 62  on.noVs2012 = (b
16e30 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
16e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
16e70 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
16e80 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 70 65 72  ion(newArg, "per
16e90 55 73 65 72 22 29 29 0d 0a 20 20 20 20 20 20 20  User"))..       
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16eb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ed0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
16ee0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
16ef0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f10 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
16f20 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f60 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
16f70 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
16f80 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
16f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fa0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
16fb0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
16fc0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ff0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
17000 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
17010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
17040 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
17050 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
17080 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
17090 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
170a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
170d0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170f0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
17100 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 72 65 74 75 72 6e            return
17130 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
17160 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17180 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171a0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
171b0 2e 70 65 72 55 73 65 72 20 3d 20 28 62 6f 6f 6c  .perUser = (bool
171c0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
171f0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
17200 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
17210 28 6e 65 77 41 72 67 2c 20 22 72 65 67 69 73 74  (newArg, "regist
17220 72 79 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20  ryVersion"))..  
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17240 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
17270 6f 6e 2e 72 65 67 69 73 74 72 79 56 65 72 73 69  on.registryVersi
17280 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  on = text;..    
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
172b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
172c0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
172d0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72  ion(newArg, "str
172e0 69 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ict"))..        
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
17320 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
17330 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
17340 0d 0a 0d 0a 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 20                  
17360 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
17370 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17390 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173b0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
173c0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
173d0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173f0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
17400 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
17410 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17440 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
17450 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
17460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17480 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
17490 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
174a0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174c0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
174d0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
174e0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
174f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17510 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
17520 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17540 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
17550 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
17580 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
175b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
175e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175f0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17610 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77    // NOTE: Allow
17620 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
17630 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a  e arguments to..
17640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
17660 20 20 20 20 20 6f 76 65 72 72 69 64 65 20 74 68       override th
17670 65 20 22 73 74 72 69 63 74 6e 65 73 73 22 20 73  e "strictness" s
17680 65 74 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  etting..        
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f      //       pro
176b0 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
176c0 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ler...          
176d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176e0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17700 20 20 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c    strict = (bool
17710 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17730 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17740 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
17750 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
17760 28 6e 65 77 41 72 67 2c 20 22 74 68 72 6f 77 4f  (newArg, "throwO
17770 6e 4d 69 73 73 69 6e 67 22 29 29 0d 0a 20 20 20  nMissing"))..   
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17790 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
177c0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
177d0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
17800 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17820 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
17850 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
17860 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
17890 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
178a0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
178b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
178c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
178e0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
178f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
17920 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
17930 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17960 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
17970 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
17980 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
179b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
179e0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
179f0 20 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 20 72 65                re
17a10 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
17a40 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a80 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
17a90 74 69 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73  tion.throwOnMiss
17aa0 69 6e 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ing = (bool)valu
17ab0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17ac0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ae0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
17af0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
17b00 72 67 2c 20 22 74 72 61 63 65 46 6f 72 6d 61 74  rg, "traceFormat
17b10 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 20 20 20 20 20 63 6f 6e 66              conf
17b50 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46  iguration.traceF
17b60 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20  ormat = text;.. 
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
17b90 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20  Ops.TraceFormat 
17ba0 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
17bb0 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20  traceFormat;..  
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 20 20 20 20 20 7d 0d 0a 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 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
17c00 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74  ption(newArg, "t
17c10 72 61 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d  racePriority")).
17c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17c30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c50 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
17c60 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d  alue = ParseEnum
17c70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c90 20 20 20 74 79 70 65 6f 66 28 54 72 61 63 65 50     typeof(TraceP
17ca0 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20  riority), text, 
17cb0 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cd0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
17ce0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
17d30 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
17d40 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
17d70 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
17d80 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
17d90 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
17dc0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
17dd0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
17e00 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b  lid {0} value: {
17e10 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
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 46 6f 72 44 69 73            ForDis
17e40 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
17e50 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e80 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17e90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17eb0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
17ec0 29 0d 0a 20 20 20 20 20 20 20 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 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
17ef0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f10 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
17f20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17f40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
17f70 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54  acePriority = (T
17f80 72 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c  racePriority)val
17f90 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fb0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50   TraceOps.TraceP
17fc0 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67  riority = config
17fd0 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69  uration.tracePri
17fe0 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18000 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18010 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
18020 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
18030 6e 65 77 41 72 67 2c 20 22 76 65 72 62 6f 73 65  newArg, "verbose
18040 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18070 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
18080 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
18090 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
180a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
180c0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
180d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18110 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
18120 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
18130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
18160 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
18170 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
181a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
181b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181e0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
181f0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
18200 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
18210 20 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 46 6f 72 44 69 73 70           ForDisp
18230 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
18240 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
18280 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182a0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
182b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
182e0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
18310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18330 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18350 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72  onfiguration.ver
18360 62 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  bose = (bool)val
18370 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
18380 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
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 65 6c 73 65 20 69 66 20          else if 
183b0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
183c0 41 72 67 2c 20 22 76 73 56 65 72 73 69 6f 6e 53  Arg, "vsVersionS
183d0 75 66 66 69 78 22 29 29 0d 0a 20 20 20 20 20 20  uffix"))..      
183e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18410 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76   configuration.v
18420 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d  sVersionSuffix =
18430 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18450 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18460 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
18470 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
18480 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49 66 22  newArg, "whatIf"
18490 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
184a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
184d0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
184e0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
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 20 69 66 20 28              if (
18510 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
18560 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
18570 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
185b0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
185c0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
185f0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
18600 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18630 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
18640 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
18650 22 2c 0d 0a 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 20 20 20                  
18670 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
18680 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
18690 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
186d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
18700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18720 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
18730 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
18760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
187a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74  nfiguration.what
187b0 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  If = (bool)value
187c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
187d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
18800 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
18810 67 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20  g, "wow64"))..  
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18830 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18850 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
18860 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
18870 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18890 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
188a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
188f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
18900 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
18930 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
18940 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
18950 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18970 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
18980 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
18990 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189b0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
189c0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
189d0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a00 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
18a10 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
18a20 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
18a50 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18a80 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18ab0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
18b30 61 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62  ation.wow64 = (b
18b40 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
18b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
18b80 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
18bc0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
18bd0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
18c00 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
18c10 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
18c20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
18c50 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
18c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63    "Unsupported c
18c90 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
18ca0 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  on: {0}",..     
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
18cd0 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61  splay(arg)), tra
18ce0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
18cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18d10 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
18d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18d40 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18d70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18dc0 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
18dd0 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
18de0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
18e00 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
18e10 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
18e20 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
18e50 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
18e60 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f  , e, traceCatego
18e70 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
18e80 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
18e90 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d  r = "Failed to m
18ea0 6f 64 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74  odify configurat
18eb0 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
18ec0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18ee0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
18ef0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18f00 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
18f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18f50 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
18f60 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
18f70 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
18f80 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
18f90 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
18fa0 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d  c bool Process(.
18fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18fc0 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d   string[] args,.
18fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18fe0 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
18ff0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
19010 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20  ool strict,..   
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
19030 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
19050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19070 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
19080 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19090 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
190a0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
190b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
190f0 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75  "Invalid configu
19100 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ration.";..     
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19120 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
19130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19140 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
19160 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
19170 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
19180 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20  .assembly;....  
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d    if (assembly =
191b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
191f0 22 49 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c  "Invalid assembl
19200 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y.";..          
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19220 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19250 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
19260 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54  onfiguration.noT
19270 72 61 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20  race)..         
19280 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192a0 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
192b0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26  guration.noLog &
192c0 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
192e0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
192f0 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  pty(configuratio
19300 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d  n.logFileName)).
19310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19320 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19340 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19360 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
19370 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   Use the default
19380 20 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d   log file name..
19390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
193b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
193d0 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
193e0 6c 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46  leName = GetLogF
193f0 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  ileName(..      
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 20 20 20 20 20 20 20 20 20 20 22 74 72 61 63 65            "trace
19420 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19450 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
19460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19490 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
194b0 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
194c0 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20  noConsole)..    
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19520 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76     // NOTE: In v
19530 65 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62  erbose mode, deb
19540 75 67 20 6f 75 74 70 75 74 20 28 74 68 61 74 20  ug output (that 
19550 6d 65 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20  meets..         
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19570 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
19580 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72  configured prior
19590 69 74 79 20 63 72 69 74 65 72 69 61 29 20 77 69  ity criteria) wi
195a0 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20  ll be..         
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195c0 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70     //       disp
195d0 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e  layed to the con
195e0 73 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c  sole; otherwise,
195f0 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74      //       out
19620 70 75 74 20 28 74 68 61 74 20 6d 65 65 74 73 20  put (that meets 
19630 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70  the configured p
19640 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72       //       cr
19670 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20  iteria) will be 
19680 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65  displayed to the
19690 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20   console...     
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
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 69 66 20 28 63 6f 6e 66 69         if (confi
196e0 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d  guration.debug).
196f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19750 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64      // NOTE: Add
19760 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61   the console tra
19770 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74  ce listener to t
19780 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73      //       lis
197b0 74 20 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65  t of trace liste
197c0 6e 65 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20  ners maintained 
197d0 62 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  by..            
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
19800 20 54 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20   TraceOps class 
19810 28 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61  (i.e. only messa
19820 67 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ges..           
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19840 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
19850 61 74 20 6d 65 65 74 20 74 68 65 20 64 65 62 75  at meet the debu
19860 67 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20  g priority will 
19870 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19890 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65      //       see
198a0 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65  n on the console
198b0 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198f0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
19900 2e 53 65 74 75 70 44 65 62 75 67 4c 69 73 74 65  .SetupDebugListe
19910 6e 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  ners();..       
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19950 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19970 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19990 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
199a0 20 20 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 2f 2f 20               // 
199c0 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f  NOTE: Add the co
199d0 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74  nsole trace list
199e0 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20  ener to the..   
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
19a10 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75        list of bu
19a20 69 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73  ilt-in trace lis
19a30 74 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20  teners (i.e...  
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19a60 20 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73         only mess
19a70 61 67 65 73 20 74 68 61 74 20 6d 65 65 74 20 74  ages that meet t
19a80 68 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  he trace..      
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
19ab0 20 20 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c     priority will
19ac0 20 62 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20   be seen on the 
19ad0 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20  console)...     
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
19b20 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41  race.Listeners.A
19b30 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72  dd(new ConsoleTr
19b40 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d  aceListener());.
19b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ba0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
19bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bf0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
19c00 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67  figuration.noLog
19c10 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
19c40 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61  rEmpty(configura
19c50 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  tion.logFileName
19c60 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
19c70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
19ca0 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e  .Listeners.Add(n
19cb0 65 77 20 54 65 78 74 57 72 69 74 65 72 54 72 61  ew TextWriterTra
19cc0 63 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20  ceListener(..   
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19cf0 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
19d00 6c 65 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20  leName));....   
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d40 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
19d50 3a 20 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77  : Technically, w
19d60 65 20 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f  e created the lo
19d70 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  g file...       
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d90 20 20 20 20 20 2f 2f 0d 0a 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 66 69 6c 65 73 43 72 65 61 74 65       filesCreate
19dc0 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d++;..          
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19df0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19e20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44        // NOTE: D
19e30 75 6d 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ump the configur
19e40 61 74 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73  ation now in cas
19e50 65 20 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20  e we need to..  
19e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e70 20 20 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62    //       troub
19e80 6c 65 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75  leshoot any issu
19e90 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es...           
19ea0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ec0 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
19ed0 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79  on.debugPriority
19ee0 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74   <= TracePriorit
19ef0 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20  y.Medium)..     
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
19f20 2e 44 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62  .Dump(debugCallb
19f30 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ack);....       
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19f50 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74  (configuration.t
19f60 72 61 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20  racePriority <= 
19f70 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
19f80 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20  dium)..         
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19fa0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d  onfiguration.Dum
19fb0 70 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29  p(traceCallback)
19fc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19fd0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ff0 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77   // NOTE: Show w
1a000 68 65 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e  here we are runn
1a010 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77  ing from and how
1a020 20 77 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20   we were..      
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a040 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d         invoked..
1a050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a060 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1a070 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1a080 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61  ing location = a
1a090 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e  ssembly.Location
1a0a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a0b0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1a0c0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1a0d0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1a0e0 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  diumLow,..      
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a100 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1a110 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1a120 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a140 20 20 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67          "Running
1a150 20 65 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20   executable is: 
1a160 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {0}", ForDisplay
1a170 28 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20  (location)),..  
1a180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a190 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1a1a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1a1c0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1a1d0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1a1e0 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20  y.MediumLow,..  
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a200 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1a210 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1a220 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1a230 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1a240 20 20 20 20 20 20 20 20 20 20 20 20 22 4f 72 69              "Ori
1a250 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69  ginal command li
1a260 6e 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ne is: {0}",..  
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a280 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e        Environmen
1a290 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20  t.CommandLine), 
1a2a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1a2b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a2c0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1a2d0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1a2e0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1a2f0 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1a320 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1a330 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a350 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70        "Running p
1a360 72 6f 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c  rocess is {0}.",
1a370 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28   Is64BitProcess(
1a380 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3a0 20 22 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d   "64-bit" : "32-
1a3b0 62 69 74 22 29 2c 20 74 72 61 63 65 43 61 74 65  bit"), traceCate
1a3c0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a3e0 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
1a3f0 2e 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .whatIf)..      
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1a410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a420 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1a430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a440 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
1a450 20 74 68 65 20 64 65 62 75 67 67 65 72 20 69 73   the debugger is
1a460 20 61 74 74 61 63 68 65 64 20 61 6e 64 20 57 68   attached and Wh
1a470 61 74 2d 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20  at-If mode..    
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a490 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20      //       is 
1a4a0 5b 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20  [now] disabled, 
1a4b0 69 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e  issue a warning.
1a4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a4d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4f0 20 20 20 20 20 20 69 66 20 28 44 65 62 75 67 67        if (Debugg
1a500 65 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a  er.IsAttached)..
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a520 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1a530 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1a540 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1a550 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1a580 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1a590 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f               "Fo
1a5c0 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20  rced to disable 
1a5d0 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65  \"what-if\" mode
1a5e0 20 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20   with " +..     
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75             "debu
1a610 67 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c  gger attached.",
1a620 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1a630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a640 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1a660 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1a670 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a690 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1a6a0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1a6b0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
1a6c0 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6e0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1a6f0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 20 61             "No a
1a720 63 74 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69  ctual changes wi
1a730 6c 6c 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68  ll be made to th
1a740 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  is " +..        
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 20 20 20 22 73 79 73 74 65 6d 20 62 65 63 61      "system beca
1a770 75 73 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20  use \"what-if\" 
1a780 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e  mode is enabled.
1a790 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7b0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1a7c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a7d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a800 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
1a810 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  f the command li
1a820 6e 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20  ne has not been 
1a830 6d 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20  manually..      
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a850 20 20 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64         confirmed
1a860 20 28 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65   (i.e. via the e
1a870 78 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20  xplicit command 
1a880 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20  line..          
1a890 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1a8a0 20 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e     option), then
1a8b0 20 73 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67   stop processing
1a8c0 20 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63   now.  We enforc
1a8d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1a8e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1a8f0 74 68 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61  this rule so tha
1a900 74 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d  t simply double-
1a910 63 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20  clicking the..  
1a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a930 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75    //       execu
1a940 74 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72  table will not r
1a950 65 73 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61  esult in any cha
1a960 6e 67 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20  nges being..    
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 2f 2f 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f  //       made to
1a990 20 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20   the system...  
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9b0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a9c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
1a9d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
1a9e0 66 69 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20  firm)..         
1a9f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa10 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43        error = "C
1aa20 61 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20  annot continue, 
1aa30 74 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20  the \"confirm\" 
1aa40 6f 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20  option is " +.. 
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20             "not 
1aa70 65 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20  enabled.";....  
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa90 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1aaa0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1aab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aad0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1ab00 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1ab10 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
1ab20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1ab40 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1ab50 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1ab60 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1ab90 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1aba0 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65  ck, e, traceCate
1abb0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1abd0 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f  ror = "Failed to
1abe0 20 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75   process configu
1abf0 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ration.";..     
1ac00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1ac30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1ac50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1ac90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
1aca0 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
1acb0 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
1acc0 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
1acd0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1ace0 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52  atic bool CheckR
1acf0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad10 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
1ad20 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
1ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1ad40 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1ad60 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
1ad80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ada0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1adb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1add0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
1ade0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1ae20 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72  Invalid configur
1ae30 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1ae60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ae70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ae90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aea0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
1aeb0 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  hat version of t
1aec0 68 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74  he runtime was t
1aed0 68 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79  he core (primary
1aee0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1aef0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1af00 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
1af10 64 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20  d against (e.g. 
1af20 22 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d  "v2.0.50727" or.
1af30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1af40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76       //       "v
1af50 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20  4.0.30319")...  
1af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af70 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1af80 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1af90 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
1afa0 65 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d  eVersion = GetIm
1afb0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1afc0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1afe0 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
1aff0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1b020 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1b030 20 57 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63   We allow the ac
1b040 74 75 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69  tual image runti
1b050 6d 65 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62  me checking to b
1b060 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1b070 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1b080 62 79 70 61 73 73 65 64 20 76 69 61 20 74 68 65  bypassed via the
1b090 20 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   "-noRuntimeVers
1b0a0 69 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  ion" command lin
1b0b0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1b0c0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1b0d0 6f 70 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d  option.  The com
1b0e0 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
1b0f0 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
1b100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b110 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65        //       e
1b120 78 70 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d  xpert use only..
1b130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b140 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1b160 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  (configuration.n
1b170 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  oRuntimeVersion)
1b180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b190 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1b1c0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1b1d0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20  ority.Medium,.. 
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1b200 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1b210 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1b220 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b240 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69       "Assembly i
1b250 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74  s compiled for t
1b260 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
1b270 6b 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20  k {0}; " +..    
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b290 20 20 20 20 20 20 20 20 22 68 6f 77 65 76 65 72          "however
1b2a0 2c 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72  , installation r
1b2b0 65 73 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65  estrictions base
1b2c0 64 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20  d on this " +.. 
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 20 20 20 20 20 20 20 20 22 66 61 63 74             "fact
1b2f0 20 68 61 76 65 20 62 65 65 6e 20 64 69 73 61 62   have been disab
1b300 6c 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d  led via the comm
1b310 61 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20  and line.",..   
1b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b330 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61           coreIma
1b340 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1b350 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
1b360 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1b380 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1b3b0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3d0 20 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69   // TODO: Restri
1b3e0 63 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  ct the configura
1b3f0 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68  tion based on wh
1b400 69 63 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20  ich image..     
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b420 2f 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20  /       runtime 
1b430 76 65 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20  versions (which 
1b440 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72  more-or-less cor
1b450 72 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20  respond..       
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1b470 20 20 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72        to .NET Fr
1b480 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
1b490 29 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  ) are supported 
1b4a0 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1b4c0 20 20 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66       versions of
1b4d0 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74   Visual Studio t
1b4e0 68 61 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65  hat are installe
1b4f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
1b500 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b520 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
1b530 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61  lOrEmpty(coreIma
1b540 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1b550 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1b560 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b580 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
1b590 6c 69 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d  lid core file im
1b5a0 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73  age runtime vers
1b5b0 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
1b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b5d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1b600 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1b610 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28   (String.Equals(
1b620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1b640 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
1b650 72 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67  rsion, CLRv2Imag
1b660 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
1b670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1b690 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
1b6a0 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20  rdinal))..      
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1b6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b6d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6f0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
1b700 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72  r the CLR v2.0 r
1b710 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  untime, make sur
1b720 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20  e we disable..  
1b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b740 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1b750 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73  ny attempt to us
1b760 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20  e it for things 
1b770 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20  that require..  
1b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b790 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1b7a0 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69  n assembly compi
1b7b0 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20  led for the CLR 
1b7c0 76 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20  v4.0.  It is..  
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7e0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75        //       u
1b7f0 6e 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73  ncertain if this
1b800 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70   is actually a p
1b810 72 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20  roblem in..     
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b830 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63     //       prac
1b840 74 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20  tice as the CLR 
1b850 76 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e  v4.0 can load an
1b860 64 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20  d use an..      
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b880 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
1b890 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  bly compiled wit
1b8a0 68 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20  h the CLR v2.0; 
1b8b0 68 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20  however,..      
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8d0 20 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65    //       since
1b8e0 20 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66   this project of
1b8f0 66 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67  fers both config
1b900 75 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20  urations,..     
1b910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b920 20 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63     //       we c
1b930 75 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f  urrently disallo
1b940 77 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e  w this mismatch.
1b950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b960 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1b990 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  ion.noNetFx40 = 
1b9a0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b9c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
1b9d0 65 74 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a  etFx45 = true;..
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9f0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1ba00 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d  ation.noVs2010 =
1ba10 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1ba40 56 73 32 30 31 32 20 3d 20 74 72 75 65 3b 0d 0a  Vs2012 = true;..
1ba50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ba60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1ba70 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1ba80 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1ba90 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bab0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1bac0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1bad0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1bae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1bb00 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
1bb10 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
1bb20 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20   Framework {0}, 
1bb30 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb50 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e   "support for .N
1bb60 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d  ET Framework {1}
1bb70 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64   is now disabled
1bb80 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69   CLRv2ImageRunti
1bbb0 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34  meVersion, CLRv4
1bbc0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1bbd0 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1bc00 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1bc10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1bc30 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45  lse if (String.E
1bc40 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20  quals(..        
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc60 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e      coreImageRun
1bc70 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52  timeVersion, CLR
1bc80 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
1bc90 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcb0 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
1bcc0 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bce0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bd00 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1bd10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1bd20 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20  TE: For the CLR 
1bd30 76 34 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61  v4.0 runtime, ma
1bd40 6b 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62  ke sure we disab
1bd50 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
1bd60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1bd70 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74       any attempt
1bd80 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74   to use it for t
1bd90 68 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69  hings that requi
1bda0 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1bdc0 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79       an assembly
1bdd0 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
1bde0 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20  e CLR v2.0...   
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be00 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1be30 6f 4e 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b  oNetFx20 = true;
1be40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be50 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1be60 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35  uration.noVs2005
1be70 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be90 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1bea0 6e 6f 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b  noVs2008 = true;
1beb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1bed0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1bee0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1bef0 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20  .Medium,..      
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf10 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1bf20 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1bf30 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1bf40 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf60 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d  "Assembly is com
1bf70 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e  piled for the .N
1bf80 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
1bf90 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfb0 20 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20     "support for 
1bfc0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
1bfd0 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c  1} is now disabl
1bfe0 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ed.",..         
1bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c000 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c     ForDisplay(CL
1c010 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv4ImageRuntimeV
1c020 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c040 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1c050 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69  (CLRv2ImageRunti
1c060 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20  meVersion)),..  
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c080 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c090 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0c0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c0f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1c100 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
1c110 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c130 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 72 65  unsupported core
1c140 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74   file image runt
1c150 69 6d 65 20 76 65 72 73 69 6f 6e 20 22 20 2b 0d  ime version " +.
1c160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c170 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
1c180 7d 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d 20 6f  }, must be {1} o
1c190 72 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20  r {2}",..       
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1b0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1c1c0 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
1c1d0 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1f0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1c200 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74  y(CLRv2ImageRunt
1c210 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  imeVersion),..  
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c230 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1c240 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52  play(CLRv4ImageR
1c250 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 3b  untimeVersion));
1c260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c270 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1c280 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c2a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c2b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1c2c0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1c2d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1c2e0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
1c2f0 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1c310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c320 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1c330 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1c340 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
1c350 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1c360 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1c370 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1c380 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61  Callback, e, tra
1c390 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3b0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69      error = "Fai
1c3c0 6c 65 64 20 74 6f 20 63 68 65 63 6b 20 69 6d 61  led to check ima
1c3d0 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69  ge runtime versi
1c3e0 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  on.";..         
1c3f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c400 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1c410 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1c420 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1c430 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1c440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c490 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1c4a0 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
1c4b0 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
1c4c0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1c4d0 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20  ol HasFlags(..  
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
1c4f0 73 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c  stallFlags hasFl
1c500 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ags,..          
1c510 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a        bool all..
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c530 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1c540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c550 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20    if (all)..    
1c560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c570 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c  return ((install
1c580 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73  Flags & hasFlags
1c590 29 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d  ) == hasFlags);.
1c5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c5b0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1c5c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1c5d0 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73  n ((installFlags
1c5e0 20 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20   & hasFlags) != 
1c5f0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e  InstallFlags.Non
1c600 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
1c610 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1c620 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1c630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c660 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1c670 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
1c680 20 44 75 6d 70 28 0d 0a 20 20 20 20 20 20 20 20   Dump(..        
1c690 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
1c6a0 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
1c6b0 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ack..           
1c6c0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1c6d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c6e0 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65         if (trace
1c6f0 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c  Callback != null
1c700 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c710 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c720 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c730 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1c740 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1c750 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c770 20 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46     "Assembly", F
1c780 6f 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62  orDisplay(assemb
1c790 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ly)),..         
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c7b0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1c7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c7d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1c7e0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1c7f0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1c800 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c820 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  LogFileName", Fo
1c830 72 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65  rDisplay(logFile
1c840 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
1c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c860 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1c870 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c880 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1c890 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1c8a0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1c8b0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8d0 20 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f   "Directory", Fo
1c8e0 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f  rDisplay(directo
1c8f0 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ry)),..         
1c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c910 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1c920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c930 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1c940 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1c950 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1c960 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c980 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46  CoreFileName", F
1c990 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69  orDisplay(coreFi
1c9a0 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1c9d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c9e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c9f0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1ca00 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1ca10 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca30 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65     "LinqFileName
1ca40 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69  ", ForDisplay(li
1ca50 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  nqFileName)),.. 
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca70 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1ca80 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1caa0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1cab0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1cac0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 20 20 20 20 20 20 20 22 44 65 73 69 67 6e 65 72         "Designer
1caf0 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
1cb00 73 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69  splay(designerFi
1cb10 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1cb40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1cb50 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1cb60 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1cb70 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1cb80 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cba0 20 20 20 22 52 65 67 69 73 74 72 79 56 65 72 73     "RegistryVers
1cbb0 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion", ForDisplay
1cbc0 28 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  (registryVersion
1cbd0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1cbf0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc10 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1cc20 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1cc30 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1cc40 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f               "Co
1cc60 6e 66 69 67 56 65 72 73 69 6f 6e 22 2c 20 46 6f  nfigVersion", Fo
1cc70 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 56  rDisplay(configV
1cc80 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
1cc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cca0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1ccb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1ccc0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1ccd0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1cce0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1ccf0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd10 20 20 20 22 56 73 56 65 72 73 69 6f 6e 53 75 66     "VsVersionSuf
1cd20 66 69 78 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  fix", ForDisplay
1cd30 28 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78  (vsVersionSuffix
1cd40 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1cd60 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd80 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1cd90 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1cda0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1cdb0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
1cdd0 62 75 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44  bugFormat", ForD
1cde0 69 73 70 6c 61 79 28 64 65 62 75 67 46 6f 72 6d  isplay(debugForm
1cdf0 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  at)),..         
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ce10 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1ce20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ce30 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ce40 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1ce50 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1ce60 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ce80 54 72 61 63 65 46 6f 72 6d 61 74 22 2c 20 46 6f  TraceFormat", Fo
1ce90 72 44 69 73 70 6c 61 79 28 74 72 61 63 65 46 6f  rDisplay(traceFo
1cea0 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  rmat)),..       
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cec0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1ced0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cee0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1cef0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1cf00 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1cf10 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf30 20 22 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22 2c   "InstallFlags",
1cf40 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74   ForDisplay(inst
1cf50 61 6c 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20  allFlags)),..   
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf70 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1cf80 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1cf90 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1cfa0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1cfb0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1cfc0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfe0 20 20 20 20 20 22 44 65 62 75 67 50 72 69 6f 72       "DebugPrior
1cff0 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ity", ForDisplay
1d000 28 64 65 62 75 67 50 72 69 6f 72 69 74 79 29 29  (debugPriority))
1d010 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d020 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d030 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1d040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d050 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1d060 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1d070 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1d080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d090 20 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63             "Trac
1d0a0 65 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44  ePriority", ForD
1d0b0 69 73 70 6c 61 79 28 74 72 61 63 65 50 72 69 6f  isplay(tracePrio
1d0c0 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  rity)),..       
1d0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d0f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d100 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d110 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d120 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d130 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d150 20 22 50 65 72 55 73 65 72 22 2c 20 46 6f 72 44   "PerUser", ForD
1d160 69 73 70 6c 61 79 28 70 65 72 55 73 65 72 29 29  isplay(perUser))
1d170 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d180 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d190 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1b0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1d1c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1d1d0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1d1e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d1f0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 74             "Inst
1d200 61 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  all", ForDisplay
1d210 28 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20 20  (install)),..   
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d230 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d240 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d250 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d260 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d270 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d280 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2a0 20 20 20 20 20 22 57 6f 77 36 34 22 2c 20 46 6f       "Wow64", Fo
1d2b0 72 44 69 73 70 6c 61 79 28 77 6f 77 36 34 29 29  rDisplay(wow64))
1d2c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d2d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d2e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d300 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1d310 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1d320 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1d330 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d340 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 52 75             "NoRu
1d350 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 2c 20 46  ntimeVersion", F
1d360 6f 72 44 69 73 70 6c 61 79 28 6e 6f 52 75 6e 74  orDisplay(noRunt
1d370 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  imeVersion)),.. 
1d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d390 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d3a0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d3c0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d3d0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d3e0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d400 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b 74 6f         "NoDeskto
1d410 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  p", ForDisplay(n
1d420 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20 20 20  oDesktop)),..   
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d440 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d450 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d460 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d470 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d480 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d490 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63 74 22       "NoCompact"
1d4c0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43  , ForDisplay(noC
1d4d0 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20 20 20  ompact)),..     
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4f0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d500 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d510 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d520 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1d530 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1d540 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d560 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22 2c 20     "NoNetFx20", 
1d570 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
1d580 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx20)),..       
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5a0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d5b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d5c0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d5d0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d5e0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d5f0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d610 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20 46 6f   "NoNetFx40", Fo
1d620 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
1d630 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  40)),..         
1d640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d650 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1d660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d670 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1d680 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1d690 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1d6a0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d6c0 4e 6f 4e 65 74 46 78 34 35 22 2c 20 46 6f 72 44  NoNetFx45", ForD
1d6d0 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35  isplay(noNetFx45
1d6e0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d700 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1d710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d720 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1d730 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1d740 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1d750 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1d760 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
1d770 56 73 32 30 30 35 22 2c 20 46 6f 72 44 69 73 70  Vs2005", ForDisp
1d780 6c 61 79 28 6e 6f 56 73 32 30 30 35 29 29 2c 0d  lay(noVs2005)),.
1d790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d7a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d7b0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7d0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1d7e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1d7f0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1d800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d810 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30           "NoVs20
1d820 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  08", ForDisplay(
1d830 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20 20 20  noVs2008)),..   
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d850 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d860 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d870 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d880 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d890 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d8a0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8c0 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30 22 2c       "NoVs2010",
1d8d0 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73   ForDisplay(noVs
1d8e0 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  2010)),..       
1d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d900 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d920 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d930 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d940 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d950 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d970 20 22 4e 6f 56 73 32 30 31 32 22 2c 20 46 6f 72   "NoVs2012", For
1d980 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 32  Display(noVs2012
1d990 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d9b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9d0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1d9e0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1d9f0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1da00 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
1da20 54 72 61 63 65 22 2c 20 46 6f 72 44 69 73 70 6c  Trace", ForDispl
1da30 61 79 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20  ay(noTrace)),.. 
1da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da50 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1da60 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1da80 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1da90 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1daa0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dac0 20 20 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c         "NoConsol
1dad0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  e", ForDisplay(n
1dae0 6f 43 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20  oConsole)),..   
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1db10 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1db20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1db30 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1db40 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1db50 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db70 20 20 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f       "NoLog", Fo
1db80 72 44 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29  rDisplay(noLog))
1db90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1dba0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1dbb0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbd0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1dbe0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1dbf0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1dc00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1dc10 20 20 20 20 20 20 20 20 20 20 20 22 54 68 72 6f             "Thro
1dc20 77 4f 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f 72  wOnMissing", For
1dc30 44 69 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e 4d  Display(throwOnM
1dc40 69 73 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20 20  issing)),..     
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 57 68 61 74 49 66 22 2c 20 46 6f 72     "WhatIf", For
1dce0 44 69 73 70 6c 61 79 28 77 68 61 74 49 66 29 29  Display(whatIf))
1dcf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1dd00 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1dd10 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd30 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1dd40 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1dd50 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1dd60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1dd70 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75             "Debu
1dd80 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  g", ForDisplay(d
1dd90 65 62 75 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  ebug)),..       
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddb0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1ddc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ddd0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1dde0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1ddf0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1de00 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de20 20 22 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44   "Verbose", ForD
1de30 69 73 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29  isplay(verbose))
1de40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1de50 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1de60 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1de90 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1dea0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1deb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1dec0 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66             "Conf
1ded0 69 72 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  irm", ForDisplay
1dee0 28 63 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20  (confirm)),..   
1def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df00 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1df10 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1df20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1df30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df60 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1df80 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e  f (assembly != n
1df90 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1dfa0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1dfd0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1dfe0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1dff0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e010 20 20 22 41 73 73 65 6d 62 6c 79 54 69 74 6c 65    "AssemblyTitle
1e020 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e040 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41 73  ForDisplay(GetAs
1e050 73 65 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 65  semblyTitle(asse
1e060 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20  mbly))),..      
1e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e080 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e090 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e0c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e0d0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1e100 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
1e110 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20  tion",..        
1e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e130 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47      ForDisplay(G
1e140 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67  etAssemblyConfig
1e150 75 72 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c 79  uration(assembly
1e160 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ))),..          
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e180 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e190 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1e1a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1e1b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1e1c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1e1d0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1e1e0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1e1f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e230 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e240 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1e250 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
1e260 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1e270 61 74 65 20 41 73 73 65 6d 62 6c 79 20 61 73 73  ate Assembly ass
1e280 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  embly;..        
1e290 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
1e2a0 62 6c 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20 20  bly Assembly..  
1e2b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1e2d0 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62   { return assemb
1e2e0 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
1e2f0 20 20 20 20 20 20 20 73 65 74 20 7b 20 61 73 73         set { ass
1e300 65 6d 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d  embly = value; }
1e310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1e330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e370 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1e380 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
1e390 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20   logFileName;.. 
1e3a0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1e3b0 63 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65  c string LogFile
1e3c0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
1e3d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e3e0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1e3f0 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 7d  n logFileName; }
1e400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e410 20 20 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65 4e    set { logFileN
1e420 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
1e430 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e440 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1e450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e4a0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64  private string d
1e4b0 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20  irectory;..     
1e4c0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1e4d0 72 69 6e 67 20 44 69 72 65 63 74 6f 72 79 0d 0a  ring Directory..
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1e500 65 74 20 7b 20 72 65 74 75 72 6e 20 64 69 72 65  et { return dire
1e510 63 74 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20  ctory; }..      
1e520 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1e530 64 69 72 65 63 74 6f 72 79 20 3d 20 76 61 6c 75  directory = valu
1e540 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1e550 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1e560 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1e570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1e5b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1e5c0 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d  ring coreFileNam
1e5d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1e5e0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f  public string Co
1e5f0 72 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  reFileName..    
1e600 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e610 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1e620 20 72 65 74 75 72 6e 20 63 6f 72 65 46 69 6c 65   return coreFile
1e630 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
1e640 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 63           set { c
1e650 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  oreFileName = va
1e660 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1e670 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1e680 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1e690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1e6d0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1e6e0 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e  string linqFileN
1e6f0 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
1e700 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1e710 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  LinqFileName..  
1e720 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1e740 20 7b 20 72 65 74 75 72 6e 20 6c 69 6e 71 46 69   { return linqFi
1e750 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  leName; }..     
1e760 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1e770 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
1e780 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1e790 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e7a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e7f0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1e800 65 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65  e string designe
1e810 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  rFileName;..    
1e820 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1e830 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69  tring DesignerFi
1e840 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
1e850 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e860 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1e870 75 72 6e 20 64 65 73 69 67 6e 65 72 46 69 6c 65  urn designerFile
1e880 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
1e890 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
1e8a0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
1e8b0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1e8c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e8d0 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e920 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1e930 61 74 65 20 73 74 72 69 6e 67 20 72 65 67 69 73  ate string regis
1e940 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  tryVersion;..   
1e950 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1e960 73 74 72 69 6e 67 20 52 65 67 69 73 74 72 79 56  string RegistryV
1e970 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ersion..        
1e980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e990 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1e9a0 75 72 6e 20 72 65 67 69 73 74 72 79 56 65 72 73  urn registryVers
1e9b0 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ion; }..        
1e9c0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 65          set { re
1e9d0 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20  gistryVersion = 
1e9e0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1e9f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ea00 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1ea50 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1ea60 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 56  e string configV
1ea70 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ersion;..       
1ea80 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1ea90 6e 67 20 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e  ng ConfigVersion
1eaa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1eab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eac0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f   get { return co
1ead0 6e 66 69 67 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a  nfigVersion; }..
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaf0 73 65 74 20 7b 20 63 6f 6e 66 69 67 56 65 72 73  set { configVers
1eb00 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ion = value; }..
1eb10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1eb20 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1eb80 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 76  private string v
1eb90 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d  sVersionSuffix;.
1eba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1ebb0 6c 69 63 20 73 74 72 69 6e 67 20 56 73 56 65 72  lic string VsVer
1ebc0 73 69 6f 6e 53 75 66 66 69 78 0d 0a 20 20 20 20  sionSuffix..    
1ebd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ebe0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1ebf0 20 72 65 74 75 72 6e 20 76 73 56 65 72 73 69 6f   return vsVersio
1ec00 6e 53 75 66 66 69 78 3b 20 7d 0d 0a 20 20 20 20  nSuffix; }..    
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1ec20 7b 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  { vsVersionSuffi
1ec30 78 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  x = value; }..  
1ec40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1ec50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1ec60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1eca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1ecb0 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 62  ivate string deb
1ecc0 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ugFormat;..     
1ecd0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1ece0 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74  ring DebugFormat
1ecf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ed00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ed10 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
1ed20 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20  bugFormat; }..  
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1ed40 74 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20  t { debugFormat 
1ed50 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1ed60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1ed70 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1edb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1edd0 61 74 65 20 73 74 72 69 6e 67 20 74 72 61 63 65  ate string trace
1ede0 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
1edf0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1ee00 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a  ng TraceFormat..
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1ee30 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63  et { return trac
1ee40 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20  eFormat; }..    
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1ee60 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  { traceFormat = 
1ee70 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1ee80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ee90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1eea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1eee0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1eef0 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69  e InstallFlags i
1ef00 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20  nstallFlags;..  
1ef10 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1ef20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 49 6e   InstallFlags In
1ef30 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20  stallFlags..    
1ef40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ef50 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1ef60 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 46   return installF
1ef70 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  lags; }..       
1ef80 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69           set { i
1ef90 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 76 61  nstallFlags = va
1efa0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1efb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1efc0 20 20 20 20 20 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 2f 2f  ////////////////
1efe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f000 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1f010 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1f020 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
1f030 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  bugPriority;..  
1f040 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1f050 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 44   TracePriority D
1f060 65 62 75 67 50 72 69 6f 72 69 74 79 0d 0a 20 20  ebugPriority..  
1f070 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1f090 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 50   { return debugP
1f0a0 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20  riority; }..    
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1f0c0 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  { debugPriority 
1f0d0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1f0e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f0f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1f100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f140 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1f150 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 74  ate TracePriorit
1f160 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  y tracePriority;
1f170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1f180 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 69  blic TracePriori
1f190 74 79 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ty TracePriority
1f1a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1f1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f1c0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72   get { return tr
1f1d0 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a  acePriority; }..
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1f0 73 65 74 20 7b 20 74 72 61 63 65 50 72 69 6f 72  set { tracePrior
1f200 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ity = value; }..
1f210 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f220 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1f230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f280 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 70 65 72  private bool per
1f290 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
1f2a0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50     public bool P
1f2b0 65 72 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20  erUser..        
1f2c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f2d0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1f2e0 75 72 6e 20 70 65 72 55 73 65 72 3b 20 7d 0d 0a  urn perUser; }..
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f300 73 65 74 20 7b 20 70 65 72 55 73 65 72 20 3d 20  set { perUser = 
1f310 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1f320 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f330 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f380 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1f390 65 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d  e bool install;.
1f3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1f3b0 6c 69 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c  lic bool Install
1f3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1f3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f3e0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e   get { return in
1f3f0 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20  stall; }..      
1f400 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1f410 69 6e 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b  install = value;
1f420 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f430 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f440 20 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 2f 2f  ////////////////
1f480 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f490 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1f4a0 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20   wow64;..       
1f4b0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1f4c0 20 57 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   Wow64..        
1f4d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f4e0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1f4f0 75 72 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a 20 20  urn wow64; }..  
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1f510 74 20 7b 20 77 6f 77 36 34 20 3d 20 76 61 6c 75  t { wow64 = valu
1f520 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1f530 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f540 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f550 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1f590 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1f5a0 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  ol noRuntimeVers
1f5b0 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
1f5c0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
1f5d0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 0d 0a  RuntimeVersion..
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1f600 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 52 75  et { return noRu
1f610 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 20 7d 0d  ntimeVersion; }.
1f620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f630 20 73 65 74 20 7b 20 6e 6f 52 75 6e 74 69 6d 65   set { noRuntime
1f640 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b  Version = value;
1f650 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f660 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f670 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f680 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f6c0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1f6d0 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20   noDesktop;..   
1f6e0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1f6f0 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a  bool NoDesktop..
1f700 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1f720 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65  et { return noDe
1f730 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20  sktop; }..      
1f740 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1f750 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75  noDesktop = valu
1f760 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1f770 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f780 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1f7d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1f7e0 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20  ol noCompact;.. 
1f7f0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1f800 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74  c bool NoCompact
1f810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1f820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f830 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1f840 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20  Compact; }..    
1f850 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1f860 7b 20 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61  { noCompact = va
1f870 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1f880 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1f890 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1f8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1f8e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1f8f0 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d  bool noNetFx20;.
1f900 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1f910 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
1f920 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  20..            
1f930 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f940 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1f950 6e 6f 4e 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20  noNetFx20; }..  
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1f970 74 20 7b 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20  t { noNetFx20 = 
1f980 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1f990 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f9a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f9f0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1fa00 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30  e bool noNetFx40
1fa10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1fa20 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74  ublic bool NoNet
1fa30 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20  Fx40..          
1fa40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1fa50 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1fa60 6e 20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a  n noNetFx40; }..
1fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa80 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20  set { noNetFx40 
1fa90 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1faa0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1fab0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1fb10 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
1fb20 34 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  45;..           
1fb30 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
1fb40 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20  etFx45..        
1fb50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fb60 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1fb70 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d  urn noNetFx45; }
1fb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fb90 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34    set { noNetFx4
1fba0 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  5 = value; }..  
1fbb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1fbc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1fbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1fc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1fc20 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
1fc30 30 30 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  005;..          
1fc40 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
1fc50 56 73 32 30 30 35 0d 0a 20 20 20 20 20 20 20 20  Vs2005..        
1fc60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fc70 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1fc80 75 72 6e 20 6e 6f 56 73 32 30 30 35 3b 20 7d 0d  urn noVs2005; }.
1fc90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fca0 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 35 20   set { noVs2005 
1fcb0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1fcc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1fcd0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1fce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1fd20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1fd30 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30  ate bool noVs200
1fd40 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  8;..            
1fd50 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73  public bool NoVs
1fd60 32 30 30 38 0d 0a 20 20 20 20 20 20 20 20 20 20  2008..          
1fd70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1fd80 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1fd90 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d 0d 0a 20  n noVs2008; }.. 
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1fdb0 65 74 20 7b 20 6e 6f 56 73 32 30 30 38 20 3d 20  et { noVs2008 = 
1fdc0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1fdd0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fde0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1fdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1fe30 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1fe40 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 3b  e bool noVs2010;
1fe50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1fe60 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
1fe70 31 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  10..            
1fe80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1fe90 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1fea0 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a 20 20 20  noVs2010; }..   
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1fec0 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d 20 76 61   { noVs2010 = va
1fed0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1fee0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fef0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ff00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1ff40 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1ff50 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 3b 0d 0a  bool noVs2012;..
1ff60 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1ff70 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 32  ic bool NoVs2012
1ff80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ff90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ffa0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1ffb0 56 73 32 30 31 32 3b 20 7d 0d 0a 20 20 20 20 20  Vs2012; }..     
1ffc0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1ffd0 20 6e 6f 56 73 32 30 31 32 20 3d 20 76 61 6c 75   noVs2012 = valu
1ffe0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1fff0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20000 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20040 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20050 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
20060 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20  ol noTrace;..   
20070 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20080 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20  bool NoTrace..  
20090 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
200a0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
200b0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 63   { return noTrac
200c0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
200d0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 72        set { noTr
200e0 61 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ace = value; }..
200f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20100 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20160 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43  private bool noC
20170 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20  onsole;..       
20180 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
20190 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20   NoConsole..    
201a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
201b0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
201c0 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c   return noConsol
201d0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
201e0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f        set { noCo
201f0 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d  nsole = value; }
20200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20260 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
20270 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
20280 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  oLog;..         
20290 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
202a0 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20  oLog..          
202b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
202c0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
202d0 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20  n noLog; }..    
202e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
202f0 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b  { noLog = value;
20300 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20310 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20320 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20360 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20370 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
20380 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b   throwOnMissing;
20390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
203a0 62 6c 69 63 20 62 6f 6f 6c 20 54 68 72 6f 77 4f  blic bool ThrowO
203b0 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20  nMissing..      
203c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
203d0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
203e0 65 74 75 72 6e 20 74 68 72 6f 77 4f 6e 4d 69 73  eturn throwOnMis
203f0 73 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20  sing; }..       
20400 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74           set { t
20410 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20  hrowOnMissing = 
20420 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
20430 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20440 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20490 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
204a0 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a  e bool whatIf;..
204b0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
204c0 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a  ic bool WhatIf..
204d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
204e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
204f0 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68 61 74  et { return what
20500 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  If; }..         
20510 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 68 61         set { wha
20520 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  tIf = value; }..
20530 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20540 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
20550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
205a0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 65 62  private bool deb
205b0 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug;..           
205c0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 44 65 62   public bool Deb
205d0 75 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ug..            
205e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
205f0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
20600 64 65 62 75 67 3b 20 7d 0d 0a 20 20 20 20 20 20  debug; }..      
20610 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
20620 64 65 62 75 67 20 3d 20 76 61 6c 75 65 3b 20 7d  debug = value; }
20630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20640 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20690 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
206a0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 76    private bool v
206b0 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20  erbose;..       
206c0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
206d0 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   Verbose..      
206e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
206f0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
20700 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b 20 7d  eturn verbose; }
20710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20720 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73 65 20    set { verbose 
20730 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
20740 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
20750 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
20760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
207a0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
207b0 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d  ate bool confirm
207c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
207d0 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 69  ublic bool Confi
207e0 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..            
207f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20800 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
20810 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 20  confirm; }..    
20820 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
20830 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c 75  { confirm = valu
20840 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
20850 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
20860 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
20870 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
20880 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
20890 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
208a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
208e0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
208f0 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 43   FrameworkList C
20900 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
20910 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
20920 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ss FrameworkList
20930 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
20940 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
20950 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
20960 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
20970 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65 77 6f    public Framewo
20980 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  rkList()..      
20990 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
209a0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
209b0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
209c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
209d0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
209e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
209f0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20a40 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
20a50 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
20a60 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
20a70 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
20a80 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tKey;..         
20a90 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
20aa0 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65  gistryKey RootKe
20ab0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
20ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20ad0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72    get { return r
20ae0 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20  ootKey; }..     
20af0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20b00 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65   rootKey = value
20b10 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20b20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20b30 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20b80 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74 72       private Str
20b90 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d 0a  ingList names;..
20ba0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20bb0 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 4e 61  ic StringList Na
20bc0 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mes..           
20bd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20be0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20bf0 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20   names; }..     
20c00 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20c10 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20   names = value; 
20c20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20c30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f  ////////////////
20c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20c90 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73 69     private Versi
20ca0 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b 0d  onMap versions;.
20cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
20cc0 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 56  lic VersionMap V
20cd0 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  ersions..       
20ce0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20cf0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
20d00 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d  turn versions; }
20d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20d20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73    set { versions
20d30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
20d40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20d50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20db0 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20  vate StringList 
20dc0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a  platformNames;..
20dd0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20de0 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 50 6c  ic StringList Pl
20df0 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 20  atformNames..   
20e00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20e10 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
20e20 7b 20 72 65 74 75 72 6e 20 70 6c 61 74 66 6f 72  { return platfor
20e30 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20  mNames; }..     
20e40 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20e50 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d   platformNames =
20e60 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20e70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
20e80 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
20e90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
20ea0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
20eb0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
20ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
20f10 65 67 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c 61  egion VsList Cla
20f20 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
20f30 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
20f40 20 56 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20   VsList..       
20f50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20f60 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
20f70 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
20f80 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20f90 56 73 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  VsList()..      
20fa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20fb0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
20fc0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
20fd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
20fe0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
20ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21040 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
21050 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
21060 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
21070 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21080 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
21090 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20  rootKey;..      
210a0 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
210b0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f  kRegistryKey Roo
210c0 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tKey..          
210d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
210e0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
210f0 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20  n rootKey; }..  
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
21110 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61  t { rootKey = va
21120 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
21130 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21140 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21180 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21190 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
211a0 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65 72 73  VersionList vers
211b0 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ions;..         
211c0 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
211d0 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73 0d 0a  nList Versions..
211e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
21200 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73  et { return vers
21210 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ions; }..       
21220 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76           set { v
21230 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b  ersions = value;
21240 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21250 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
21260 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
21270 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
21280 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
21290 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
212a0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
212b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
212f0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
21300 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
21310 61 6e 74 20 44 61 74 61 0d 0a 20 20 20 20 20 20  ant Data..      
21320 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
21330 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e  string CoreFileN
21340 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
21350 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d  ta.SQLite.dll";.
21360 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
21370 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 69   const string Li
21380 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79  nqFileName = "Sy
21390 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
213a0 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20  .Linq.dll";..   
213b0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
213c0 73 74 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e  st string Design
213d0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 51  erFileName = "SQ
213e0 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c  Lite.Designer.dl
213f0 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  l";..        pri
21400 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
21410 67 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 20 3d  g ProviderName =
21420 20 22 53 51 4c 69 74 65 20 44 61 74 61 20 50 72   "SQLite Data Pr
21430 6f 76 69 64 65 72 22 3b 0d 0a 20 20 20 20 20 20  ovider";..      
21440 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
21450 73 74 72 69 6e 67 20 50 72 6f 6a 65 63 74 4e 61  string ProjectNa
21460 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
21470 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20  a.SQLite";..    
21480 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
21490 74 20 73 74 72 69 6e 67 20 4c 65 67 61 63 79 50  t string LegacyP
214a0 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 51  rojectName = "SQ
214b0 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
214c0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
214d0 72 69 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e 61  ring InvariantNa
214e0 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
214f0 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20  a.SQLite";..    
21500 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
21510 74 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72 79  t string Factory
21520 54 79 70 65 4e 61 6d 65 20 3d 20 22 53 79 73 74  TypeName = "Syst
21530 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
21540 51 4c 69 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a  QLiteFactory";..
21550 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21560 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73  const string Des
21570 63 72 69 70 74 69 6f 6e 20 3d 20 22 2e 4e 45 54  cription = ".NET
21580 20 46 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 20   Framework Data 
21590 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c  Provider for SQL
215a0 69 74 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ite";....       
215b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
215c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21600 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
21610 74 20 73 74 72 69 6e 67 20 43 4c 52 76 32 49 6d  t string CLRv2Im
21620 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
21630 6e 20 3d 20 22 76 32 2e 30 2e 35 30 37 32 37 22  n = "v2.0.50727"
21640 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
21650 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
21660 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv4ImageRuntim
21670 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e 30  eVersion = "v4.0
21680 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 20  .30319";....    
21690 20 20 20 20 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 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
216e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
216f0 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e 61 6d 65  onst string Name
21700 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 20 3d  AndValueFormat =
21710 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20   "{0}: {1}";..  
21720 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
21730 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f 67 46 69  nst string LogFi
21740 6c 65 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f 67  leSuffix = ".log
21750 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
21760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
217b0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
217c0 74 72 69 6e 67 20 52 6f 6f 74 4b 65 79 4e 61 6d  tring RootKeyNam
217d0 65 20 3d 20 22 53 6f 66 74 77 61 72 65 22 3b 0d  e = "Software";.
217e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
217f0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 57 6f   const string Wo
21800 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3d 20  w64SubKeyName = 
21810 22 57 6f 77 36 34 33 32 4e 6f 64 65 22 3b 0d 0a  "Wow6432Node";..
21820 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
21830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21870 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  /....        //.
21880 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
21890 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  : The .NET Frame
218a0 77 6f 72 6b 20 68 61 73 20 62 6f 74 68 20 33 32  work has both 32
218b0 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 20  -bit and 64-bit 
218c0 65 64 69 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20  editions...     
218d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70     //..        p
218e0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
218f0 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74 46  adonly bool NetF
21900 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 66  xIs32BitOnly = f
21910 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
21920 20 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 2f 2f 2f 2f  ////////////////
21960 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21970 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
21980 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77  // NOTE: For now
21990 2c 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  , Visual Studio 
219a0 69 73 20 61 6c 77 61 79 73 20 61 20 33 32 2d 62  is always a 32-b
219b0 69 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d  it application..
219c0 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
219d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
219e0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f  tic readonly boo
219f0 6c 20 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 20  l VsIs32BitOnly 
21a00 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
21a10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21a60 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
21a70 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
21a80 72 69 6e 67 20 56 73 49 64 46 6f 72 6d 61 74 20  ring VsIdFormat 
21a90 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  = "B";....      
21aa0 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21af0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
21b00 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
21b10 69 6e 67 20 58 50 61 74 68 46 6f 72 41 64 64 45  ing XPathForAddE
21b20 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20  lement =..      
21b30 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61        "configura
21b40 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61  tion/system.data
21b50 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  /DbProviderFacto
21b60 72 69 65 73 2f 61 64 64 5b 40 69 6e 76 61 72 69  ries/add[@invari
21b70 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a  ant=\"{0}\"]";..
21b80 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21b90 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
21ba0 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f  y string XPathFo
21bb0 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d  rRemoveElement =
21bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 63  ..            "c
21bd0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73  onfiguration/sys
21be0 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69  tem.data/DbProvi
21bf0 64 65 72 46 61 63 74 6f 72 69 65 73 2f 72 65 6d  derFactories/rem
21c00 6f 76 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c  ove[@invariant=\
21c10 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20 20  "{0}\"]";..     
21c20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
21c30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
21c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
21c90 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74  ion Private Stat
21ca0 69 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  ic Data..       
21cb0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
21cc0 41 73 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73  Assembly thisAss
21cd0 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79  embly = Assembly
21ce0 2e 47 65 74 45 78 65 63 75 74 69 6e 67 41 73 73  .GetExecutingAss
21cf0 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  embly();....    
21d00 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
21d10 69 63 20 73 74 72 69 6e 67 20 74 72 61 63 65 43  ic string traceC
21d20 61 74 65 67 6f 72 79 20 3d 20 50 61 74 68 2e 47  ategory = Path.G
21d30 65 74 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20  etFileName(..   
21d40 20 20 20 20 20 20 20 20 20 74 68 69 73 41 73 73           thisAss
21d50 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b  embly.Location);
21d60 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 6d 65 20 66   /* NOTE: Same f
21d70 6f 72 20 64 65 62 75 67 20 61 6e 64 20 74 72 61  or debug and tra
21d80 63 65 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  ce. */....      
21d90 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
21da0 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64   TraceCallback d
21db0 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20 41  ebugCallback = A
21dc0 70 70 44 65 62 75 67 3b 0d 0a 20 20 20 20 20 20  ppDebug;..      
21dd0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
21de0 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
21df0 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41  raceCallback = A
21e00 70 70 54 72 61 63 65 3b 0d 0a 0d 0a 20 20 20 20  ppTrace;....    
21e10 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21e60 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
21e70 74 61 74 69 63 20 73 74 72 69 6e 67 20 73 79 73  tatic string sys
21e80 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 6e  temDirectory = n
21e90 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e 44  ull;....#if WIND
21ea0 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 70 72 69  OWS..        pri
21eb0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
21ec0 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f  ng systemDirecto
21ed0 72 79 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b 0d  ryWow64 = null;.
21ee0 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
21ef0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21f40 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
21f50 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73 43 72  atic int filesCr
21f60 65 61 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  eated = 0;..    
21f70 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
21f80 69 63 20 69 6e 74 20 66 69 6c 65 73 4d 6f 64 69  ic int filesModi
21f90 66 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  fied = 0;..     
21fa0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
21fb0 63 20 69 6e 74 20 66 69 6c 65 73 44 65 6c 65 74  c int filesDelet
21fc0 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ed = 0;..       
21fd0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
21fe0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
22030 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
22040 6e 20 54 72 61 63 65 20 48 61 6e 64 6c 69 6e 67  n Trace Handling
22050 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22060 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
22070 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d  GetLogFileName(.
22080 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
22090 69 6e 67 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20  ing typeName..  
220a0 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74            ) /* t
220b0 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
220c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
220d0 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20  string fileName 
220e0 3d 20 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69  = Path.GetTempFi
220f0 6c 65 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20  leName();..     
22100 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
22110 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47  rectory = Path.G
22120 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28  etDirectoryName(
22130 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  fileName);..    
22140 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
22150 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61  ileNameOnly = Pa
22160 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57 69  th.GetFileNameWi
22170 74 68 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28 66  thoutExtension(f
22180 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
22190 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
221a0 6e 65 77 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  newFileName = Pa
221b0 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
221c0 74 6f 72 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72  tory, String.For
221d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
221e0 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d        "{0}{1}{2}
221f0 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ", traceCategory
22200 2c 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  , !String.IsNull
22210 4f 72 45 6d 70 74 79 28 74 79 70 65 4e 61 6d 65  OrEmpty(typeName
22220 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
22230 20 20 20 20 20 20 20 20 20 22 2e 22 20 2b 20 74           "." + t
22240 79 70 65 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67  ypeName : String
22250 2e 45 6d 70 74 79 2c 20 22 2e 22 20 2b 20 66 69  .Empty, "." + fi
22260 6c 65 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20  leNameOnly +..  
22270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22280 20 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29    LogFileSuffix)
22290 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
222a0 20 20 46 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65    File.Move(file
222b0 4e 61 6d 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d  Name, newFileNam
222c0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
222d0 20 20 20 72 65 74 75 72 6e 20 6e 65 77 46 69 6c     return newFil
222e0 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
222f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
22300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22340 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22350 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
22360 6f 69 64 20 41 70 70 44 65 62 75 67 28 0d 0a 20  oid AppDebug(.. 
22370 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
22380 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20  g message,..    
22390 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
223a0 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
223b0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
223c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  {..            T
223d0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 43 6f 72  raceOps.DebugCor
223e0 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
223f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22400 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
22410 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73  Format, TraceOps
22420 2e 4e 65 78 74 44 65 62 75 67 49 64 28 29 2c 0d  .NextDebugId(),.
22430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22440 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74   TraceOps.TimeSt
22450 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63  amp(DateTime.Utc
22460 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20  Now), message), 
22470 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  category);..    
22480 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22490 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
224a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
224e0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
224f0 69 63 20 76 6f 69 64 20 41 70 70 54 72 61 63 65  ic void AppTrace
22500 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
22510 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a  tring message,..
22520 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
22530 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20  ng category..   
22540 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
22550 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22560 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
22570 65 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72  eCore(String.For
22580 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
22590 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
225a0 72 61 63 65 46 6f 72 6d 61 74 2c 20 54 72 61 63  raceFormat, Trac
225b0 65 4f 70 73 2e 4e 65 78 74 54 72 61 63 65 49 64  eOps.NextTraceId
225c0 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  (),..           
225d0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69       TraceOps.Ti
225e0 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65  meStamp(DateTime
225f0 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67  .UtcNow), messag
22600 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  e), category);..
22610 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22620 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
22630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
22640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
22690 69 6f 6e 20 47 65 6e 65 72 69 63 20 50 6c 61 74  ion Generic Plat
226a0 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  form Handling.. 
226b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
226c0 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 36 34 42  tatic bool Is64B
226d0 69 74 50 72 6f 63 65 73 73 28 29 0d 0a 20 20 20  itProcess()..   
226e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
226f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
22700 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74      // NOTE: Ret
22710 75 72 6e 73 20 74 72 75 65 20 69 66 20 74 68 65  urns true if the
22720 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
22730 20 69 73 20 36 34 2d 62 69 74 2e 20 20 49 66 20   is 64-bit.  If 
22740 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  this..          
22750 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 74 72    //       is tr
22760 75 65 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20 74 68  ue, we *know* th
22770 61 74 20 77 65 20 6d 75 73 74 20 62 65 20 72 75  at we must be ru
22780 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69  nning on a 64-bi
22790 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  t..            /
227a0 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e  /       operatin
227b0 67 20 73 79 73 74 65 6d 20 61 73 20 77 65 6c 6c  g system as well
227c0 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74  .  However, if t
227d0 68 69 73 20 69 73 20 66 61 6c 73 65 2c 20 77 65  his is false, we
227e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
227f0 20 20 20 20 20 20 20 64 6f 20 6e 6f 74 20 6e 65         do not ne
22800 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 74  cessarily know t
22810 68 61 74 20 77 65 20 61 72 65 20 72 75 6e 6e 69  hat we are runni
22820 6e 67 20 6f 6e 20 61 20 33 32 2d 62 69 74 0d 0a  ng on a 32-bit..
22830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
22840 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73       operating s
22850 79 73 74 65 6d 2c 20 64 75 65 20 74 6f 20 57 6f  ystem, due to Wo
22860 57 36 34 20 28 57 69 6e 33 32 2d 6f 6e 2d 57 69  W64 (Win32-on-Wi
22870 6e 36 34 29 2c 20 65 74 63 2e 0d 0a 20 20 20 20  n64), etc...    
22880 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
22890 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
228a0 49 6e 74 50 74 72 2e 53 69 7a 65 20 3d 3d 20 73  IntPtr.Size == s
228b0 69 7a 65 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f 2f  izeof(long)); //
228c0 20 4e 4f 54 45 3a 20 50 6f 69 6e 74 65 72 20 69   NOTE: Pointer i
228d0 73 20 36 34 2d 62 69 74 73 3f 0d 0a 20 20 20 20  s 64-bits?..    
228e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
228f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22930 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22940 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
22950 69 63 20 62 6f 6f 6c 20 49 73 53 75 70 70 6f 72  ic bool IsSuppor
22960 74 65 64 52 6f 6f 74 4b 65 79 28 0d 0a 20 20 20  tedRootKey(..   
22970 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
22980 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d  istry registry,.
22990 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
229a0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
229b0 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tKey..          
229c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
229d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
229e0 72 6e 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65  rn Object.Refere
229f0 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
22a00 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75 72 72  y, registry.Curr
22a10 65 6e 74 55 73 65 72 29 20 7c 7c 0d 0a 20 20 20  entUser) ||..   
22a20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 62 6a               Obj
22a30 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75  ect.ReferenceEqu
22a40 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67  als(rootKey, reg
22a50 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69  istry.LocalMachi
22a60 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ne);..        }.
22a70 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
22a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ac0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
22ad0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
22ae0 69 6e 67 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61  ing GetRootKeyNa
22af0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
22b00 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
22b10 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
22b20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22b30 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
22b40 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22  .Format("{0}{1}"
22b50 2c 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a  , RootKeyName,..
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b70 77 6f 77 36 34 20 26 26 20 49 73 36 34 42 69 74  wow64 && Is64Bit
22b80 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 20  Process() ?..   
22b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ba0 20 22 5c 5c 22 20 2b 20 57 6f 77 36 34 53 75 62   "\\" + Wow64Sub
22bb0 4b 65 79 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67  KeyName : String
22bc0 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20  .Empty);..      
22bd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
22be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c20 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22c30 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
22c40 20 73 74 72 69 6e 67 20 47 65 74 53 79 73 74 65   string GetSyste
22c50 6d 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20  mDirectory(..   
22c60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
22c70 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
22c80 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23   )..        {..#
22c90 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20  if WINDOWS..    
22ca0 20 20 20 20 20 20 20 20 69 66 20 28 77 6f 77 36          if (wow6
22cb0 34 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4)..            
22cc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22cd0 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69 72     if (systemDir
22ce0 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 3d 20 6e  ectoryWow64 == n
22cf0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
22d00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73               sys
22d20 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
22d30 34 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4 =..           
22d40 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
22d50 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
22d60 2e 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74  .GetSystemDirect
22d70 6f 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ory();..        
22d80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
22da0 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74  urn systemDirect
22db0 6f 72 79 57 6f 77 36 34 3b 0d 0a 20 20 20 20 20  oryWow64;..     
22dc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
22dd0 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64        else..#end
22de0 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
22df0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22e00 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69 72     if (systemDir
22e10 65 63 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ectory == null).
22e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e30 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65 63       systemDirec
22e40 74 6f 72 79 20 3d 20 45 6e 76 69 72 6f 6e 6d 65  tory = Environme
22e50 6e 74 2e 53 79 73 74 65 6d 44 69 72 65 63 74 6f  nt.SystemDirecto
22e60 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ry;....         
22e70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 79         return sy
22e80 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a  stemDirectory;..
22e90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22ea0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
22eb0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
22ec0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22f10 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
22f20 6f 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69 6e  on Generic Strin
22f30 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  g Handling..    
22f40 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
22f50 69 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69 73  ic string ForDis
22f60 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
22f70 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d     object value.
22f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
22f90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22fa0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
22fb0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
22fc0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
22fd0 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20  n "<null>";.... 
22fe0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
22ff0 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  g result;..     
23000 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65         Type type
23010 20 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65   = value.GetType
23020 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
23030 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74     if (type == t
23040 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74  ypeof(XmlElement
23050 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23070 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c     XmlElement el
23080 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d  ement = (XmlElem
23090 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ent)value;....  
230a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
230b0 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f  sult = element.O
230c0 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20  uterXml;..      
230d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
230e0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79       else if (ty
230f0 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 56 65 72  pe == typeof(Ver
23100 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20  sion))..        
23110 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23120 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
23130 65 72 73 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f  ersion = (Versio
23140 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  n)value;....    
23150 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
23160 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
23170 61 74 28 22 76 7b 30 7d 22 2c 20 76 65 72 73 69  at("v{0}", versi
23180 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on);..          
23190 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
231a0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
231b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
231c0 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76        result = v
231d0 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b  alue.ToString();
231e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
231f0 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
23200 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20  ength == 0)..   
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23220 20 72 65 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e   return "<empty>
23230 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
23240 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
23250 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
23260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23270 20 20 20 74 79 70 65 2e 49 73 53 75 62 63 6c 61     type.IsSubcla
23280 73 73 4f 66 28 74 79 70 65 6f 66 28 56 61 6c 75  ssOf(typeof(Valu
23290 65 54 79 70 65 29 29 20 3f 20 22 7b 30 7d 22 20  eType)) ? "{0}" 
232a0 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20  : "\"{0}\"",..  
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232c0 20 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20    result);..    
232d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
232e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
232f0 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
23300 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
23310 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
23320 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23360 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23370 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73       #region Ass
23380 65 6d 62 6c 79 20 41 74 74 72 69 62 75 74 65 20  embly Attribute 
23390 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
233a0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
233b0 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62  string GetAssemb
233c0 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28  lyConfiguration(
233d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
233e0 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d  sembly assembly.
233f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
23400 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23410 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
23420 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly != null)..  
23430 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
23450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23460 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23470 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
23480 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28  embly.IsDefined(
23490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
234a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
234b0 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e  peof(AssemblyCon
234c0 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62  figurationAttrib
234d0 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20  ute), false)).. 
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
23510 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74  semblyConfigurat
23520 69 6f 6e 41 74 74 72 69 62 75 74 65 20 63 6f 6e  ionAttribute con
23530 66 69 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 20  figuration =..  
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23550 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65 6d            (Assem
23560 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
23570 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20  Attribute)..    
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23590 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79          assembly
235a0 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62  .GetCustomAttrib
235b0 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  utes(..         
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235d0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
235e0 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74  semblyConfigurat
235f0 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 0d 0a  ionAttribute),..
23600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23620 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20  false)[0];....  
23630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23640 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e        return con
23650 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69  figuration.Confi
23660 67 75 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 20  guration;..     
23670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23690 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
236a0 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
236b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236d0 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
236e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
236f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
23700 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23710 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
23720 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
23730 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23780 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
23790 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
237a0 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d  tAssemblyTitle(.
237b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73  .            Ass
237c0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a  embly assembly..
237d0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
237e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
237f0 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
23800 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
23810 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23820 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
23830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23840 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23850 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
23860 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d  mbly.IsDefined(.
23870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23880 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
23890 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c  eof(AssemblyTitl
238a0 65 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c  eAttribute), fal
238b0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
238c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
238d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238e0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 54 69 74       AssemblyTit
238f0 6c 65 41 74 74 72 69 62 75 74 65 20 74 69 74 6c  leAttribute titl
23900 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23920 20 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41   (AssemblyTitleA
23930 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20  ttribute)..     
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23950 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e         assembly.
23960 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75  GetCustomAttribu
23970 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tes(..          
23980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23990 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73        typeof(Ass
239a0 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62  emblyTitleAttrib
239b0 75 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b  ute), false)[0];
239c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
239d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
239e0 72 6e 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b 0d  rn title.Title;.
239f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23a10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23a20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
23a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23a50 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
23a60 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
23a70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
23a80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23a90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23aa0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
23ab0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
23ac0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
23ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23b20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20     #region .NET 
23b30 46 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c 69  Framework Handli
23b40 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
23b50 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
23b60 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f  g GetFrameworkRo
23b70 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  otKeyName(..    
23b80 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
23b90 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  64..            
23ba0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
23bb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
23bc0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
23bd0 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
23be0 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d  .NETFramework",.
23bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23c00 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
23c10 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20  wow64));..      
23c20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
23c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23c80 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
23c90 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
23ca0 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  workKeyName(..  
23cb0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
23cc0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
23cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
23ce0 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
23cf0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
23d00 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
23d10 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
23d20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
23d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
23d40 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
23d50 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
23d60 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e  ormat = !String.
23d70 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c  IsNullOrEmpty(pl
23d80 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20  atformName) ?.. 
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23da0 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
23db0 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20  {1}\\v{2}\\{3}" 
23dc0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
23dd0 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
23de0 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d  ft\\{1}\\v{2}";.
23df0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
23e00 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
23e10 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52  mat(format, GetR
23e20 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34  ootKeyName(wow64
23e30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
23e40 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
23e50 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
23e60 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
23e70 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
23e80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
23e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ed0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
23ee0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
23ef0 6e 67 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69  ng GetImageRunti
23f00 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
23f10 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
23f20 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
23f30 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
23f40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
23f50 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
23f60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23f70 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
23f80 6d 62 6c 79 20 3d 0d 0a 20 20 20 20 20 20 20 20  mbly =..        
23f90 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
23fa0 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f  mbly.ReflectionO
23fb0 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 66 69 6c 65  nlyLoadFrom(file
23fc0 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
23fd0 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
23fe0 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
23ff0 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79   return assembly
24020 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  .ImageRuntimeVer
24030 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
24040 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
24050 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
24060 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24070 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
24080 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
24090 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
240a0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
240b0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
240c0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
240d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24110 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
24120 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
24130 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
24140 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
24150 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
24160 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
24170 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
24180 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
24190 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
241a0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
241b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
241c0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
241d0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
241e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
241f0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
24200 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
24210 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
24220 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
24230 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
24240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24250 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47        rootKey, G
24260 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b  etFrameworkRootK
24270 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 20 66  eyName(wow64), f
24280 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
24290 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
242a0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
242b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
242c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
242d0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242f0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
24300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24310 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
24320 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
24330 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .GetValue(..    
24340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24350 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f  key, "InstallRoo
24360 74 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66  t", null, whatIf
24370 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
24390 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74  f (!(value is st
243a0 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20  ring))..        
243b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
243c0 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
243d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
243e0 72 6e 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28  rn Path.Combine(
243f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24400 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 76 61        (string)va
24410 6c 75 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lue, String.Form
24420 61 74 28 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65  at("v{0}", frame
24430 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a  workVersion));..
24440 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
24450 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
24460 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
24470 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
24480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
244c0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
244d0 6f 6e 20 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b  on Per-Framework
244e0 2f 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69  /Platform Handli
244f0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
24500 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
24510 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77  InitializeFramew
24520 6f 72 6b 4c 69 73 74 28 0d 0a 20 20 20 20 20 20  orkList(..      
24530 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
24540 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
24550 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
24560 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
24570 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
24580 20 20 20 20 20 20 72 65 66 20 46 72 61 6d 65 77        ref Framew
24590 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  orkList framewor
245a0 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20  kList..         
245b0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
245c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
245d0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d  (frameworkList =
245e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
245f0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
24600 72 6b 4c 69 73 74 20 3d 20 6e 65 77 20 46 72 61  rkList = new Fra
24610 6d 65 77 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d  meworkList();...
24620 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
24630 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52  (frameworkList.R
24640 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
24650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24660 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52   frameworkList.R
24670 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ootKey = rootKey
24680 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24690 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
246a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
246e0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
246f0 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e  kList.Names == n
24700 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
24710 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24720 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
24730 73 74 2e 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53  st.Names = new S
24740 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24760 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
24770 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
24780 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
24790 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20  Desktop)..      
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
247b0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
247c0 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65  s.Add(".NETFrame
247d0 77 6f 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  work");....     
247e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
247f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
24800 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
24810 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61  guration.NoCompa
24820 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
24830 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24840 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
24850 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
24860 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
24870 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20  Framework");..  
24880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24890 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
248a0 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43  Names.Add(".NETC
248b0 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
248c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
248d0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
248e0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
248f0 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
24900 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
24910 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
24920 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
24930 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
24940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
24980 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
24990 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  (frameworkList.V
249a0 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
249b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
249c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
249d0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56   frameworkList.V
249e0 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65  ersions = new Ve
249f0 72 73 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20  rsionMap();.... 
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
24a10 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
24a20 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
24a30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
24a40 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
24a50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a70 56 65 72 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b  VersionList desk
24a80 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  topVersionList =
24a90 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
24aa0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
24ab0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
24ac0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
24ad0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
24ae0 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
24af0 32 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20)..           
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
24b10 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
24b20 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
24b30 32 2c 20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a  2, 0, 50727));..
24b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24b50 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
24b60 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
24b70 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
24b80 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a  ion.NoNetFx40)..
24b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ba0 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
24bb0 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
24bc0 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c  ew Version(4, 0,
24bd0 20 33 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20   30319));....   
24be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bf0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
24c00 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
24c10 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
24c20 6f 4e 65 74 46 78 34 35 29 0d 0a 20 20 20 20 20  oNetFx45)..     
24c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c40 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
24c50 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
24c60 72 73 69 6f 6e 28 34 2c 20 35 2c 20 35 30 37 30  rsion(4, 5, 5070
24c70 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  9));....        
24c80 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
24c90 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
24ca0 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d  ns.Add(".NETFram
24cb0 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20  ework",..       
24cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cd0 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
24ce0 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist);..         
24cf0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24d00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24d10 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
24d20 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
24d30 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70  iguration.NoComp
24d40 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  act)..          
24d50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
24d70 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
24d80 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d  ons.Add(".NETCom
24d90 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 2c 0d  pactFramework",.
24da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24db0 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72           new Ver
24dc0 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65 72  sionList(new Ver
24dd0 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  sion[] {..      
24de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24df0 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c    new Version(2,
24e00 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65 77 20 56   0, 0, 0), new V
24e10 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 30 2c 20  ersion(3, 5, 0, 
24e20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
24e30 20 20 20 20 20 20 20 20 7d 29 29 3b 0d 0a 20 20          }));..  
24e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24eb0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
24ec0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
24ed0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
24ee0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
24ef0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24f00 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
24f10 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
24f20 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69  Names = new Stri
24f30 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
24f50 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
24f60 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
24f70 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
24f80 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
24f90 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
24fa0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
24fb0 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75 6c 6c 29  mNames.Add(null)
24fc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24fd0 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
24fe0 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
24ff0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
25000 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20  on.NoCompact).. 
25010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25030 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
25040 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
25050 73 2e 41 64 64 28 22 50 6f 63 6b 65 74 50 43 22  s.Add("PocketPC"
25060 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
25070 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
25080 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
25090 6d 65 73 2e 41 64 64 28 22 53 6d 61 72 74 70 68  mes.Add("Smartph
250a0 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  one");..        
250b0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
250c0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
250d0 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 57 69 6e  rmNames.Add("Win
250e0 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20 20 20  dowsCE");..     
250f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25100 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25110 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25120 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25160 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25170 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
25180 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61  tic bool HaveFra
25190 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
251a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
251b0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
251c0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
251d0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
251e0 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
251f0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
25200 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
25210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
25220 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
25230 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25240 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
25250 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
25260 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
25270 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
25280 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
25290 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
252a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
252b0 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65  yName = GetFrame
252c0 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  workKeyName(..  
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
252e0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
252f0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
25300 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77  latformName, wow
25310 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
25320 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
25330 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
25340 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
25350 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25370 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
25380 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
25390 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
253a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
253b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
253c0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
253d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
253f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25400 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e     if (platformN
25410 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20  ame != null) // 
25420 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64  NOTE: Skip non-d
25430 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20  esktop...       
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25450 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
25460 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
25470 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
25480 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65  GetFrameworkDire
25490 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
254a0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
254b0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  Key, frameworkVe
254c0 72 73 69 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68  rsion, wow64, wh
254d0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
254e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
254f0 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
25500 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
25510 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25530 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
25550 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69   (!Directory.Exi
25560 73 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d  sts(directory)).
25570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25580 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
25590 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
255a0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
255b0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
255c0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72  cePriority.Lower
255d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
255e0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
255f0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
25600 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
25610 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
25620 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
25630 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75  ramework {0} fou
25640 6e 64 20 76 69 61 20 64 69 72 65 63 74 6f 72 79  nd via directory
25650 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20   {1}.",..       
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
25670 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
25680 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69  kVersion), ForDi
25690 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29  splay(directory)
256a0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
256b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
256c0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
256d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
256e0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
256f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25700 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
25710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25750 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25760 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
25770 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72  ool HaveFramewor
25780 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20  kRegistry(..    
25790 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
257a0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
257b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
257c0 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
257d0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
257e0 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
257f0 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
25800 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
25810 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
25820 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
25830 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
25840 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
25850 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
25860 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
25870 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
25880 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25890 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
258a0 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65  = GetFrameworkKe
258b0 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
258c0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
258d0 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
258e0 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
258f0 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b 0d 0a  mName, wow64);..
25900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
25910 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
25920 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
25930 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
25940 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
25950 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
25960 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
25970 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
25980 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
25990 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
259a0 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
259b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
259c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
259d0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
259e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
259f0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d  (platformName !=
25a00 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20   null) // NOTE: 
25a10 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70  Skip non-desktop
25a20 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25a30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
25a40 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
25a50 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
25a60 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
25a70 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
25a80 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
25a90 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
25aa0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
25ab0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
25ac0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
25ad0 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
25ae0 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f  Framework {0} fo
25af0 75 6e 64 20 76 69 61 20 72 65 67 69 73 74 72 79  und via registry
25b00 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20   {1}.",..       
25b10 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
25b20 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
25b30 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69  kVersion), ForDi
25b40 73 70 6c 61 79 28 6b 65 79 4e 61 6d 65 29 29 2c  splay(keyName)),
25b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25b60 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
25b70 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
25b80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25b90 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
25ba0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
25bb0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
25bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d  //....        [M
25c10 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
25c20 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
25c30 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
25c40 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
25c50 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61   bool ForEachFra
25c60 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20  meworkConfig(.. 
25c70 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
25c80 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
25c90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ,..            F
25ca0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61  rameworkList fra
25cb0 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20  meworkList,..   
25cc0 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
25cd0 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b  rkConfigCallback
25ce0 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20   callback,..    
25cf0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
25d00 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a  ersion, /* NOTE:
25d10 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20   Optional. */.. 
25d20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
25d30 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20  g invariant,..  
25d40 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
25d50 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
25d60 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72      string descr
25d70 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  iption,..       
25d80 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
25d90 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
25da0 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
25db0 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  assemblyName,.. 
25dc0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
25dd0 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
25de0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
25df0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
25e00 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
25e10 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
25e20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
25e30 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
25e40 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
25e50 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
25e60 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
25e70 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
25e80 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
25e90 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
25ea0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25eb0 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20  if (registry == 
25ec0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
25ed0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25ee0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
25ef0 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79 22  nvalid registry"
25f00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
25f10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
25f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25f30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25f40 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
25f50 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
25f60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25f70 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
25f80 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65  = "invalid frame
25f90 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20  work list";..   
25fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25fb0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
25fc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25fd0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
25fe0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
25ff0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
26000 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20  .RootKey;....   
26010 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
26020 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
26030 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
26050 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
26060 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20  oot key";..     
26070 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26080 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
26090 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
260a0 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75         if (!IsSu
260b0 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72  pportedRootKey(r
260c0 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79  egistry, rootKey
260d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
260e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
260f0 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74     error = "root
26100 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72   key must be per
26110 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63  -user or per-mac
26120 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  hine";..        
26130 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
26140 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
26150 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26160 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
26170 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e  kList.Names == n
26180 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
26190 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
261a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
261b0 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73   framework names
261c0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
261d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
261e0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
261f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26200 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
26210 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
26220 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
26230 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26240 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
26250 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
26260 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b  versions found";
26270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26280 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
26290 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
262a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
262b0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
262c0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d  PlatformNames ==
262d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
262e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
262f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
26300 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  no platform name
26310 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
26320 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26330 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
26340 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26350 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
26360 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
26370 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72  ount != framewor
26380 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
26390 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20  mes.Count)..    
263a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
263b0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
263c0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
263d0 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  ("framework name
263e0 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20   count {0} does 
263f0 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  not " +..       
26400 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 61               "ma
26410 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  tch platform nam
26420 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72  e count {1}", fr
26430 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
26440 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  s.Count,..      
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
26460 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
26470 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
26480 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26490 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
264a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
264b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
264c0 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
264d0 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61  = 0; index < fra
264e0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
264f0 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29  .Count; index++)
26500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26520 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
26530 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
26540 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ab the name of t
26550 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e  he framework (e.
26560 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  g. ".NETFramewor
26570 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k")..           
26580 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
26590 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
265a0 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e  e platform (e.g.
265b0 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a   "WindowsCE")...
265c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
265e0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
265f0 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65  workName = frame
26600 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69  workList.Names[i
26610 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
26620 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
26630 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72  latformName = fr
26640 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
26650 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d  formNames[index]
26660 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26670 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
26680 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
26690 3a 20 53 6b 69 70 20 61 6c 6c 20 6e 6f 6e 2d 64  : Skip all non-d
266a0 65 73 6b 74 6f 70 20 66 72 61 6d 65 77 6f 72 6b  esktop framework
266b0 73 20 28 69 2e 65 2e 20 69 66 20 74 68 65 20 70  s (i.e. if the p
266c0 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20  latform..       
266d0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
266e0 20 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 6e 75    name is not nu
266f0 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ll)...          
26700 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
26710 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
26720 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75  atformName != nu
26730 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
26740 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
26750 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
26760 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
26770 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
26780 45 3a 20 47 72 61 62 20 74 68 65 20 73 75 70 70  E: Grab the supp
26790 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f  orted versions o
267a0 66 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  f this particula
267b0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
267c0 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d     //       fram
267d0 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20  ework...        
267e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
267f0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
26800 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  ionList framewor
26810 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d  kVersionList;...
26820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26830 20 69 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20   if (version != 
26840 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
26850 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26880 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d        // NOTE: M
26890 61 6e 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f  anual override o
268a0 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d  f the *ONE* fram
268b0 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20  ework version.. 
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268d0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70     //       to p
268e0 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  rocess...       
268f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
26900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26910 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65       frameworkVe
26920 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20  rsionList = new 
26930 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a  VersionList();..
26940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26950 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72      frameworkVer
26960 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
26970 20 56 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e   Version(version
26980 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
26990 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
269a0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
269b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
269c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
269d0 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77       if (!framew
269e0 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
269f0 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20  .TryGetValue(.. 
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a10 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
26a20 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72  workName, out fr
26a30 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
26a40 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  st) ||..        
26a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a60 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
26a70 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d  nList == null)).
26a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26a90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ab0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26ae0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26af0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
26b00 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
26b10 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d  kVersion in fram
26b20 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
26b30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26b40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26b50 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
26b60 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
26b70 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
26b80 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
26b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
26ba0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
26bb0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
26bc0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26be0 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e       "frameworkN
26bf0 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65  ame = {0}, frame
26c00 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31  workVersion = {1
26c10 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  }, " +..        
26c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c30 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20  "platformName = 
26c40 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {2}", ForDisplay
26c50 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c  (frameworkName),
26c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26c70 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
26c80 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
26c90 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
26ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cb0 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74   ForDisplay(plat
26cc0 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63  formName)), trac
26cd0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
26ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cf0 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d     if (!HaveFram
26d00 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
26d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26d20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
26d30 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
26d40 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
26d50 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
26d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d70 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
26d80 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
26d90 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
26da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26db0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26dc0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
26dd0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
26de0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
26df0 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
26e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e10 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
26e20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
26e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26e40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
26e50 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 64 69 72  ET Framework dir
26e60 65 63 74 6f 72 79 20 6e 6f 74 20 66 6f 75 6e 64  ectory not found
26e70 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d  , skipping...",.
26e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26e90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
26ea0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ec0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
26ed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26ee0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f00 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20  if (callback == 
26f10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
26f30 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
26f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f50 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
26f60 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44   = GetFrameworkD
26f70 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
26f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f90 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
26fa0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 77 6f  eworkVersion, wo
26fb0 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72  w64, whatIf, ver
26fc0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26fe0 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
26ff0 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
27000 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
27010 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27030 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
27040 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
27050 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
27060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27070 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
27080 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
27090 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
270a0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
270b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270c0 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
270d0 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72  ork {0} director
270e0 79 20 69 73 20 69 6e 76 61 6c 69 64 2c 20 22 20  y is invalid, " 
270f0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
27100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27110 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f  skipping...", Fo
27120 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
27130 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20  rkVersion)),..  
27140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27150 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
27160 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
27170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27180 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
27190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
271b0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
271c0 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f  ectory = Path.Co
271d0 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
271e0 20 22 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20   "Config");.... 
271f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27200 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72     if (!Director
27210 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f  y.Exists(directo
27220 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
27230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27250 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
27260 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
27270 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a  ePriority.Low,..
27280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27290 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
272a0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
272b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
272c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272e0 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
272f0 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74  ework {0} direct
27300 6f 72 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74  ory {1} does not
27310 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
27320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27330 20 20 22 65 78 69 73 74 2c 20 73 6b 69 70 70 69    "exist, skippi
27340 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c  ng...", ForDispl
27350 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
27360 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
27370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27380 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69     ForDisplay(di
27390 72 65 63 74 6f 72 79 29 29 2c 20 74 72 61 63 65  rectory)), trace
273a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
273b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273c0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
273d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
273e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
273f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
27400 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20  ring fileName = 
27410 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
27420 65 63 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65  ectory, "machine
27430 2e 63 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20  .config");....  
27440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27450 20 20 69 66 20 28 21 46 69 6c 65 2e 45 78 69 73    if (!File.Exis
27460 74 73 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  ts(fileName)).. 
27470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27480 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
274a0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
274b0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
274c0 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274e0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
274f0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
27500 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
27510 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
27520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27530 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
27540 30 7d 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73  0} file {1} does
27550 20 6e 6f 74 20 65 78 69 73 74 2c 20 22 20 2b 0d   not exist, " +.
27560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27570 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b               "sk
27580 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44  ipping...", ForD
27590 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
275a0 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
275b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275c0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
275d0 79 28 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72  y(fileName)), tr
275e0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
275f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27600 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
27610 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27620 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27640 20 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64   bool localSaved
27650 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
27660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27670 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d   if (!callback(.
27680 0a 20 20 20 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 20 66 69 6c               fil
276a0 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74  eName, invariant
276b0 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74  , name, descript
276c0 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a  ion, typeName,..
276d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276e0 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
276f0 6d 62 6c 79 4e 61 6d 65 2c 20 63 6c 69 65 6e 74  mblyName, client
27700 44 61 74 61 2c 20 77 6f 77 36 34 2c 20 74 68 72  Data, wow64, thr
27710 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
27720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27730 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
27740 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 6c  , verbose, ref l
27750 6f 63 61 6c 53 61 76 65 64 2c 20 72 65 66 20 65  ocalSaved, ref e
27760 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
27770 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27790 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
277a0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
277b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277d0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
277e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 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 69 66 20 28 6c 6f 63 61 6c 53        if (localS
27810 61 76 65 64 20 26 26 20 21 73 61 76 65 64 29 0d  aved && !saved).
27820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27830 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76               sav
27840 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  ed = true;....  
27850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27860 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
27870 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27890 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
278a0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
278b0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20  rity.Lowest,..  
278c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
278e0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
278f0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
27900 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
27910 20 20 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 22 6c 6f 63              "loc
27930 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c 20 73  alSaved = {0}, s
27940 61 76 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20  aved = {1}",..  
27950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
27970 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 6c 53 61  rDisplay(localSa
27980 76 65 64 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ved), ForDisplay
27990 28 73 61 76 65 64 29 29 2c 0d 0a 20 20 20 20 20  (saved)),..     
279a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
279c0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
279d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
279f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
27a00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27a10 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
27a20 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
27a30 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
27a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27a80 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64  .        [Method
27a90 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
27aa0 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
27ab0 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  g)]..        pri
27ac0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
27ad0 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72   ForEachFramewor
27ae0 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20  kRegistry(..    
27af0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
27b00 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a  stry registry,..
27b10 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
27b20 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77  eworkList framew
27b30 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20  orkList,..      
27b40 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 52        FrameworkR
27b50 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20  egistryCallback 
27b60 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
27b70 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 65         string ve
27b80 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20  rsion, /* NOTE: 
27b90 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20  Optional. */..  
27ba0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
27bb0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
27bc0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
27bd0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
27be0 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
27bf0 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
27c00 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
27c10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
27c20 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
27c30 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
27c40 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
27c50 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
27c60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27c70 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d    if (registry =
27c80 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27c90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27ca0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
27cb0 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72  "invalid registr
27cc0 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
27cd0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27ce0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27cf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27d00 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
27d10 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
27d20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27d30 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
27d40 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
27d50 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20  mework list";.. 
27d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27d70 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
27d80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27d90 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
27da0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
27db0 65 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ey = frameworkLi
27dc0 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20  st.RootKey;.... 
27dd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
27de0 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
27df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
27e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e10 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
27e20 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20   root key";..   
27e30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27e40 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
27e50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27e60 20 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73           if (!Is
27e70 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79  SupportedRootKey
27e80 28 72 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b  (registry, rootK
27e90 65 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ey))..          
27ea0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27eb0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f       error = "ro
27ec0 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70  ot key must be p
27ed0 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d  er-user or per-m
27ee0 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20  achine";..      
27ef0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27f00 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
27f10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27f20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
27f30 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d  orkList.Names ==
27f40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
27f50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27f60 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
27f70 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  no framework nam
27f80 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
27f90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27fa0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
27fb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27fc0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
27fd0 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
27fe0 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
27ff0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28000 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
28010 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72  r = "no framewor
28020 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64  k versions found
28030 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
28040 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
28050 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28070 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
28080 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20  t.PlatformNames 
28090 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
280a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
280b0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
280c0 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61   "no platform na
280d0 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  mes found";..   
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
280f0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
28100 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28110 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
28120 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
28130 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77  .Count != framew
28140 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
28150 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20  Names.Count)..  
28160 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28170 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
28180 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
28190 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61  at("framework na
281a0 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65  me count {0} doe
281b0 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20  s not " +..     
281c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
281d0 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e  match platform n
281e0 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20  ame count {1}", 
281f0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
28200 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mes.Count,..    
28210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28220 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
28230 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
28240 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
28250 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
28260 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
28270 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28280 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
28290 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66  x = 0; index < f
282a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
282b0 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b  es.Count; index+
282c0 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
282d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
282e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
282f0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
28300 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66  Grab the name of
28310 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28   the framework (
28320 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77  e.g. ".NETFramew
28330 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20  ork")..         
28340 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
28350 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of 
28360 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e  the platform (e.
28370 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e  g. "WindowsCE").
28380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28390 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
283a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
283b0 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61  meworkName = fra
283c0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
283d0 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  [index];..      
283e0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
283f0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20   platformName = 
28400 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
28410 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65  atformNames[inde
28420 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
28430 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
28440 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
28450 54 45 3a 20 47 72 61 62 20 74 68 65 20 73 75 70  TE: Grab the sup
28460 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20  ported versions 
28470 6f 66 20 74 68 69 73 20 70 61 72 74 69 63 75 6c  of this particul
28480 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ar..            
28490 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61      //       fra
284a0 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20  mework...       
284b0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
284c0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
284d0 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f  sionList framewo
284e0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a  rkVersionList;..
284f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28500 20 20 69 66 20 28 76 65 72 73 69 6f 6e 20 21 3d    if (version !=
28510 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
28520 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28540 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
28550 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
28560 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69 64 65 20  Manual override 
28570 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61  of the *ONE* fra
28580 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a  mework version..
28590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
285b0 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  process...      
285c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
285d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
285e0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56        frameworkV
285f0 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77  ersionList = new
28600 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
28610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28620 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65       frameworkVe
28630 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
28640 77 20 56 65 72 73 69 6f 6e 28 76 65 72 73 69 6f  w Version(versio
28650 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n));..          
28660 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
28670 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
28680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
286a0 20 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65        if (!frame
286b0 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
286c0 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a  s.TryGetValue(..
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286e0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
286f0 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66  eworkName, out f
28700 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
28710 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ist) ||..       
28720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28730 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69   (frameworkVersi
28740 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29  onList == null))
28750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28760 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28780 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
28790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
287b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
287c0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
287d0 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f  (Version framewo
287e0 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61  rkVersion in fra
287f0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
28800 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
28810 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28820 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
28830 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
28840 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
28850 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
28860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28870 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
28880 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
28890 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
288a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288b0 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b        "framework
288c0 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d  Name = {0}, fram
288d0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b  eworkVersion = {
288e0 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  1}, " +..       
288f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28900 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d   "platformName =
28910 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {2}", ForDispla
28920 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29  y(frameworkName)
28930 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28940 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
28950 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
28960 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
28970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28980 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61    ForDisplay(pla
28990 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61  tformName)), tra
289a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
289b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289c0 20 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61      if (!HaveFra
289d0 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d  meworkRegistry(.
289e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
289f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
28a00 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
28a10 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
28a20 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a40 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
28a50 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
28a60 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
28a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28a90 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
28aa0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
28ab0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
28ac0 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
28ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ae0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
28af0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
28b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28b10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
28b20 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 72 65 67  ET Framework reg
28b30 69 73 74 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c  istry not found,
28b40 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a   skipping...",..
28b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
28b70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
28b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b90 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
28ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28bb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
28bd0 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
28be0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
28bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
28c00 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
28c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
28c20 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20  f (!callback(.. 
28c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c40 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
28c50 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
28c60 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
28c70 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
28c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c90 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20    platformName, 
28ca0 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36  clientData, wow6
28cb0 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  4, throwOnMissin
28cc0 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
28cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ce0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
28cf0 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
28d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28d20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28d30 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
28d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
28d60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
28d70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28d80 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
28d90 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
28da0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
28db0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
28dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
28e10 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20  gion Per-Visual 
28e20 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48  Studio Version H
28e30 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
28e40 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
28e50 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56  void InitializeV
28e60 73 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20  sList(..        
28e70 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
28e80 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
28e90 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
28ea0 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
28eb0 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
28ec0 20 20 20 20 72 65 66 20 56 73 4c 69 73 74 20 76      ref VsList v
28ed0 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20  sList..         
28ee0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
28ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28f00 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  (vsList == null)
28f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28f20 20 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56    vsList = new V
28f30 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  sList();....    
28f40 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69          if (vsLi
28f50 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  st.RootKey == nu
28f60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28f70 20 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74       vsList.Root
28f80 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a  Key = rootKey;..
28f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28fa0 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e   (vsList.Version
28fb0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
28fc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28fd0 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
28fe0 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77  t.Versions = new
28ff0 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
29000 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29010 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
29020 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
29030 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
29040 2e 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20 20  .NoVs2005)..    
29050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29060 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
29070 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
29080 38 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d  8, 0)); // 2005.
29090 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
290a0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
290b0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
290c0 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
290d0 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20  .NoVs2008)..    
290e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290f0 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
29100 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
29110 39 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d  9, 0)); // 2008.
29120 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29130 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
29140 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
29150 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
29160 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20  .NoVs2010)..    
29170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29180 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
29190 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
291a0 31 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d  10, 0));// 2010.
291b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
291c0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
291d0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
291e0 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
291f0 2e 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20 20  .NoVs2012)..    
29200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29210 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
29220 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
29230 31 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d  11, 0));// 2012.
29240 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29250 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29260 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
292b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
292c0 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65  static bool Have
292d0 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  VsVersion(..    
292e0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
292f0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
29300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
29310 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
29320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
29330 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
29340 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
29350 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
29360 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
29370 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
29380 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
29390 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
293a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
293b0 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
293c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
293d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
293e0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
293f0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
29400 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
29410 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73  ame(vsVersion, s
29420 75 66 66 69 78 2c 20 77 6f 77 36 34 29 3b 0d 0a  uffix, wow64);..
29430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
29440 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
29450 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
29460 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
29470 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
29480 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
29490 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
294a0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
294b0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
294c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
294d0 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
294e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
294f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
29500 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
29510 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
29520 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69  ect value = Regi
29530 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61  stryHelper.GetVa
29540 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
29550 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
29560 49 6e 73 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c  InstallDir", nul
29570 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  l, whatIf, verbo
29580 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
29590 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61          if (!(va
295a0 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d  lue is string)).
295b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
295c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
295d0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
295e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
295f0 65 63 74 6f 72 79 20 3d 20 28 73 74 72 69 6e 67  ectory = (string
29600 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
29610 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
29620 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
29630 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d  pty(directory)).
29640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29650 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
29660 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
29670 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63        if (!Direc
29680 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65  tory.Exists(dire
29690 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
296a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
296b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
296c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
296d0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
296e0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
296f0 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20  ty.Lower,..     
29700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
29710 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
29720 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
29730 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
29740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29750 20 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20   "Visual Studio 
29760 7b 30 7d 20 66 6f 75 6e 64 20 69 6e 20 64 69 72  {0} found in dir
29770 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20  ectory {1}.",.. 
29780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29790 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73     ForDisplay(vs
297a0 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73  Version), ForDis
297b0 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
297c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
297d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
297e0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
297f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29800 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
29810 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
29820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
29830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29870 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b  ///....        [
29880 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
29890 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
298a0 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
298b0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
298c0 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 56 73  c bool ForEachVs
298d0 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28  VersionRegistry(
298e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
298f0 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73  ckRegistry regis
29900 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
29910 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 2c    VsList vsList,
29920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 69  ..            Vi
29930 73 75 61 6c 53 74 75 64 69 6f 52 65 67 69 73 74  sualStudioRegist
29940 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62  ryCallback callb
29950 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
29960 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
29970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
29980 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
29990 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
299a0 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
299b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
299c0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
299d0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
299e0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
299f0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
29a00 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
29a10 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
29a20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
29a30 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
29a40 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
29a50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29a60 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79      if (registry
29a70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
29a80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29a90 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
29aa0 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73  = "invalid regis
29ab0 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  try";..         
29ac0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29ad0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29ae0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29af0 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d     if (vsList ==
29b00 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
29b10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29b20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
29b30 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22  invalid VS list"
29b40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29b50 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
29b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29b70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
29b80 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
29b90 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e  ootKey = vsList.
29ba0 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  RootKey;....    
29bb0 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
29bc0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
29bd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29be0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
29bf0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f  or = "invalid ro
29c00 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20  ot key";..      
29c10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29c20 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
29c30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29c40 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70        if (!IsSup
29c50 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65  portedRootKey(re
29c60 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29  gistry, rootKey)
29c70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29c90 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20    error = "root 
29ca0 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d  key must be per-
29cb0 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68  user or per-mach
29cc0 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ine";..         
29cd0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29ce0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29cf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29d00 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65     if (vsList.Ve
29d10 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
29d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d40 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76  error = "no VS v
29d50 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d  ersions found";.
29d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29d70 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
29d80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
29d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
29da0 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73  each (Version vs
29db0 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73  Version in vsLis
29dc0 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20  t.Versions)..   
29dd0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29de0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
29df0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
29e00 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
29e10 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
29e20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
29e30 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
29e40 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
29e50 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
29e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
29e70 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22  vsVersion = {0}"
29e80 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56  , ForDisplay(vsV
29e90 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
29ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
29eb0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
29ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ed0 20 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72    if (!HaveVsVer
29ee0 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
29ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29f00 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
29f10 6e 2c 20 73 75 66 66 69 78 2c 20 77 6f 77 36 34  n, suffix, wow64
29f20 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
29f30 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
29f40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29f50 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
29f60 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
29f70 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
29f80 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
29f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
29fa0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
29fb0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
29fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fd0 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74        "Visual St
29fe0 75 64 69 6f 20 76 65 72 73 69 6f 6e 20 6e 6f 74  udio version not
29ff0 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67   found, skipping
2a000 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
2a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2a020 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2a030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a040 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
2a050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a060 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a070 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
2a080 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
2a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0a0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a0c0 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20   (!callback(..  
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0e0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
2a0f0 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
2a100 2c 20 70 61 63 6b 61 67 65 2c 20 63 6c 69 65 6e  , package, clien
2a110 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
2a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a130 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69  wow64, throwOnMi
2a140 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76  ssing, whatIf, v
2a150 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
2a160 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
2a170 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a180 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2a190 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2a1a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2a1b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a1c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a1d0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2a1e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
2a1f0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2a200 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2a210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a240 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2a250 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e       #region Con
2a260 66 69 67 75 72 61 74 69 6f 6e 20 46 69 6c 65 20  figuration File 
2a270 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
2a280 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
2a290 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
2a2a0 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
2a2b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2a2c0 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 44 62 50  atic bool AddDbP
2a2d0 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
2a2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2a2f0 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
2a300 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2a310 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20  g invariant,..  
2a320 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2a330 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
2a340 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72      string descr
2a350 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  iption,..       
2a360 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
2a370 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2a380 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
2a390 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  assemblyName,.. 
2a3a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a3b0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2a3c0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2a3d0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2a3e0 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d  ref bool saved,.
2a3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2a400 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2a410 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2a420 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a430 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20       bool dirty 
2a440 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
2a450 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e        XmlDocumen
2a460 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77  t document = new
2a470 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d   XmlDocument();.
2a480 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ...            d
2a490 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65  ocument.Preserve
2a4a0 57 68 69 74 65 73 70 61 63 65 20 3d 20 74 72 75  Whitespace = tru
2a4b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2a4c0 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69  document.Load(fi
2a4d0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
2a4e0 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65          XmlEleme
2a4f0 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20  nt addElement = 
2a500 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53  document.SelectS
2a510 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20  ingleNode(..    
2a520 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
2a530 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46  ng.Format(XPathF
2a540 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e  orAddElement, in
2a550 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c  variant)) as Xml
2a560 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
2a570 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64 45          if (addE
2a580 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d  lement == null).
2a590 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5b0 73 74 72 69 6e 67 5b 5d 20 65 6c 65 6d 65 6e 74  string[] element
2a5c0 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20  Names = {..     
2a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2a5e0 73 79 73 74 65 6d 2e 64 61 74 61 22 2c 20 22 44  system.data", "D
2a5f0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
2a600 65 73 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es"..           
2a610 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20       };....     
2a620 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c             XmlEl
2a630 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 45 6c  ement previousEl
2a640 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20  ement =..       
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63               doc
2a660 75 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e 74 45 6c  ument.DocumentEl
2a670 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e 66 69 67  ement; /* config
2a680 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20  uration */....  
2a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
2a6a0 72 65 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c  reach (string el
2a6b0 65 6d 65 6e 74 4e 61 6d 65 20 69 6e 20 65 6c 65  ementName in ele
2a6c0 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a 20 20 20 20  mentNames)..    
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6f0 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20     addElement = 
2a700 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e  previousElement.
2a710 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
2a720 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2a730 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65             eleme
2a740 6e 74 4e 61 6d 65 29 20 61 73 20 58 6d 6c 45 6c  ntName) as XmlEl
2a750 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ement;....      
2a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a770 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20   (addElement == 
2a780 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2a790 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7b0 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
2a7c0 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61   = document.Crea
2a7d0 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20  teElement(..    
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7f0 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e          elementN
2a800 61 6d 65 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74  ame, String.Empt
2a810 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2a830 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41  reviousElement.A
2a840 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64 45 6c  ppendChild(addEl
2a850 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  ement);..       
2a860 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a880 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c        previousEl
2a890 65 6d 65 6e 74 20 3d 20 61 64 64 45 6c 65 6d 65  ement = addEleme
2a8a0 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt;..           
2a8b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2a8c0 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
2a8d0 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
2a8e0 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a  CreateElement(..
2a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a900 20 20 20 20 22 61 64 64 22 2c 20 53 74 72 69 6e      "add", Strin
2a910 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20  g.Empty);....   
2a920 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
2a930 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70  viousElement.App
2a940 65 6e 64 43 68 69 6c 64 28 61 64 64 45 6c 65 6d  endChild(addElem
2a950 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ent);....       
2a960 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
2a970 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2a980 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a990 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
2a9a0 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65  .Equals(addEleme
2a9b0 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28  nt.GetAttribute(
2a9c0 22 6e 61 6d 65 22 29 2c 0d 0a 20 20 20 20 20 20  "name"),..      
2a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
2a9e0 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  me, StringCompar
2a9f0 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
2aa00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2aa20 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74  ddElement.SetAtt
2aa30 72 69 62 75 74 65 28 22 6e 61 6d 65 22 2c 20 6e  ribute("name", n
2aa40 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
2aa50 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
2aa60 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2aa70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2aa80 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
2aa90 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74  quals(addElement
2aaa0 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22 69  .GetAttribute("i
2aab0 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a 20 20 20  nvariant"),..   
2aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aad0 20 69 6e 76 61 72 69 61 6e 74 2c 20 53 74 72 69   invariant, Stri
2aae0 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
2aaf0 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  inal))..        
2ab00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ab10 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
2ab20 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22  t.SetAttribute("
2ab30 69 6e 76 61 72 69 61 6e 74 22 2c 20 69 6e 76 61  invariant", inva
2ab40 72 69 61 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  riant);..       
2ab50 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
2ab60 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2ab70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2ab80 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
2ab90 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65  .Equals(addEleme
2aba0 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28  nt.GetAttribute(
2abb0 22 64 65 73 63 72 69 70 74 69 6f 6e 22 29 2c 0d  "description"),.
2abc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2abd0 20 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e       description
2abe0 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
2abf0 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
2ac00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2ac20 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  Element.SetAttri
2ac30 62 75 74 65 28 22 64 65 73 63 72 69 70 74 69 6f  bute("descriptio
2ac40 6e 22 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 29  n", description)
2ac50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ac60 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
2ac70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ac80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
2ac90 74 72 69 6e 67 20 66 75 6c 6c 54 79 70 65 4e 61  tring fullTypeNa
2aca0 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  me = String.Form
2acb0 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22 2c 0d 0a  at("{0}, {1}",..
2acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acd0 74 79 70 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62  typeName, assemb
2ace0 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  lyName);....    
2acf0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
2ad00 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c  ing.Equals(addEl
2ad10 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
2ad20 74 65 28 22 74 79 70 65 22 29 2c 0d 0a 20 20 20  te("type"),..   
2ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad40 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 2c 20 53   fullTypeName, S
2ad50 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
2ad60 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20  Ordinal))..     
2ad70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ad80 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
2ad90 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74  ment.SetAttribut
2ada0 65 28 22 74 79 70 65 22 2c 20 66 75 6c 6c 54 79  e("type", fullTy
2adb0 70 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  peName);..      
2adc0 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
2add0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2ade0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2adf0 20 20 20 20 20 20 69 66 20 28 64 69 72 74 79 20        if (dirty 
2ae00 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20  || whatIf)..    
2ae10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ae20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
2ae30 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
2ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2ae50 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
2ae60 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
2ae70 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
2ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae90 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2aea0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2aeb0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2aec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aed0 20 20 20 20 20 20 20 20 20 20 22 61 64 64 45 6c            "addEl
2aee0 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c 20 46 6f  ement = {0}", Fo
2aef0 72 44 69 73 70 6c 61 79 28 61 64 64 45 6c 65 6d  rDisplay(addElem
2af00 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ent)),..        
2af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2af30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2af40 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
2af50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2af60 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61       document.Sa
2af70 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ve(fileName);...
2af80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2af90 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b   filesModified++
2afa0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2afb0 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75       saved = tru
2afc0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2afd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2afe0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2aff0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b000 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2b010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2b050 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
2b060 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
2b070 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
2b080 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ]..        priva
2b090 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52  te static bool R
2b0a0 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46  emoveDbProviderF
2b0b0 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  actory(..       
2b0c0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
2b0d0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2b0e0 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
2b0f0 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ant,..          
2b100 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2b110 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2b120 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2b130 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
2b140 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
2b150 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2b160 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2b170 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2b180 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2b190 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d   dirty = false;.
2b1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
2b1b0 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e  Document documen
2b1c0 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d  t = new XmlDocum
2b1d0 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ent();....      
2b1e0 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50        document.P
2b1f0 72 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63  reserveWhitespac
2b200 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
2b210 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
2b220 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Load(fileName);.
2b230 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58  ...            X
2b240 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65  mlElement addEle
2b250 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
2b260 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
2b270 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2b280 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
2b290 28 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d  (XPathForAddElem
2b2a0 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29  ent, invariant))
2b2b0 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
2b2c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2b2d0 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 21 3d  f (addElement !=
2b2e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b2f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b300 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
2b310 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d  t.ParentNode.Rem
2b320 6f 76 65 43 68 69 6c 64 28 61 64 64 45 6c 65 6d  oveChild(addElem
2b330 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ent);..         
2b340 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
2b350 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2b360 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b370 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 72 65     XmlElement re
2b380 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 20 64 6f  moveElement = do
2b390 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  cument.SelectSin
2b3a0 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
2b3b0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
2b3c0 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72  .Format(XPathFor
2b3d0 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2c 20 69  RemoveElement, i
2b3e0 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d  nvariant)) as Xm
2b3f0 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20  lElement;....   
2b400 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 6d           if (rem
2b410 6f 76 65 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75  oveElement != nu
2b420 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2b430 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b440 20 20 20 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e      removeElemen
2b450 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d  t.ParentNode.Rem
2b460 6f 76 65 43 68 69 6c 64 28 72 65 6d 6f 76 65 45  oveChild(removeE
2b470 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20  lement);..      
2b480 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
2b490 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2b4a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2b4b0 20 20 20 20 20 20 69 66 20 28 64 69 72 74 79 20        if (dirty 
2b4c0 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20  || whatIf)..    
2b4d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b4e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
2b4f0 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
2b500 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2b510 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
2b520 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
2b530 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
2b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b550 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2b560 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2b570 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2b580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b590 20 20 20 20 20 20 20 20 20 20 22 61 64 64 45 6c            "addEl
2b5a0 65 6d 65 6e 74 20 3d 20 7b 30 7d 2c 20 72 65 6d  ement = {0}, rem
2b5b0 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 20 7b 31 7d  oveElement = {1}
2b5c0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2b5e0 69 73 70 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e  isplay(addElemen
2b5f0 74 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72  t), ForDisplay(r
2b600 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 29 2c 0d  emoveElement)),.
2b610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b620 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2b630 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2b640 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b650 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
2b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
2b670 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65  cument.Save(file
2b680 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2b690 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 73 4d            filesM
2b6a0 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20  odified++;....  
2b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
2b6c0 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ved = true;..   
2b6d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b6e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2b6f0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2b700 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2b710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b750 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2b760 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2b770 6f 6f 6c 20 50 72 6f 63 65 73 73 44 62 50 72 6f  ool ProcessDbPro
2b780 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
2b790 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2b7a0 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
2b7b0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2b7c0 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20  invariant,..    
2b7d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
2b7e0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2b7f0 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70    string descrip
2b800 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
2b810 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
2b820 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2b830 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
2b840 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20  semblyName,..   
2b850 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
2b860 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
2b870 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2b880 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2b890 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
2b8a0 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
2b8b0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2b8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2b8d0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2b8e0 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f           ref boo
2b8f0 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20  l saved,..      
2b900 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2b910 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2b920 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2b930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
2b940 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
2b950 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
2b960 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
2b970 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
2b980 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2b990 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
2b9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b9c0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2b9d0 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e 66  d framework conf
2b9e0 69 67 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  ig callback data
2b9f0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2ba00 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2ba10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2ba20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ba30 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
2ba40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ba50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ba60 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69  rn RemoveDbProvi
2ba70 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
2ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba90 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72   fileName, invar
2baa0 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76 65  iant, whatIf, ve
2bab0 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64  rbose, ref saved
2bac0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2bad0 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72         ref error
2bae0 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
2baf0 20 20 20 20 20 20 41 64 64 44 62 50 72 6f 76 69        AddDbProvi
2bb00 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72   fileName, invar
2bb30 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63  iant, name, desc
2bb40 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d  ription, typeNam
2bb50 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2bb60 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79          assembly
2bb70 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65  Name, whatIf, ve
2bb80 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64  rbose, ref saved
2bb90 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
2bba0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2bbb0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
2bbc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2bbe0 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72  eturn RemoveDbPr
2bbf0 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
2bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc10 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
2bc20 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c  variant, whatIf,
2bc30 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61   verbose, ref sa
2bc40 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
2bc50 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
2bc60 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
2bc70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2bc80 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2bc90 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2bca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bce0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2bcf0 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62    #region Assemb
2bd00 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64 6c  ly Folders Handl
2bd10 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
2bd20 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
2bd30 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f  ng GetAssemblyFo
2bd40 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  ldersKeyName(.. 
2bd50 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2bd60 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
2bd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2bd80 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
2bd90 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2bda0 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
2bdb0 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
2bdc0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2bdd0 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
2bde0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2bdf0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2be00 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2be10 3a 20 54 68 69 73 20 72 65 67 69 73 74 72 79 20  : This registry 
2be20 6b 65 79 20 61 70 70 65 61 72 73 20 74 6f 20 61  key appears to a
2be30 6c 77 61 79 73 20 62 65 20 33 32 2d 62 69 74 20  lways be 32-bit 
2be40 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  only..          
2be50 20 20 2f 2f 20 20 20 20 20 20 20 28 69 2e 65 2e    //       (i.e.
2be60 20 70 72 6f 62 61 62 6c 79 20 62 65 63 61 75 73   probably becaus
2be70 65 20 69 74 20 69 73 20 6f 6e 6c 79 20 75 73 65  e it is only use
2be80 64 20 62 79 20 56 69 73 75 61 6c 0d 0a 20 20 20  d by Visual..   
2be90 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2bea0 20 20 53 74 75 64 69 6f 2c 20 77 68 69 63 68 20    Studio, which 
2beb0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6c 77  is currently alw
2bec0 61 79 73 20 33 32 2d 62 69 74 20 6f 6e 6c 79 29  ays 32-bit only)
2bed0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2bee0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  /..            s
2bef0 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21  tring format = !
2bf00 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
2bf10 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  mpty(platformNam
2bf20 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  e) ?..          
2bf30 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72        "{0}\\Micr
2bf40 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d  osoft\\{1}\\v{2}
2bf50 5c 5c 7b 33 7d 5c 5c 41 73 73 65 6d 62 6c 79 46  \\{3}\\AssemblyF
2bf60 6f 6c 64 65 72 73 45 78 22 20 3a 0d 0a 20 20 20  oldersEx" :..   
2bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
2bf80 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31  }\\Microsoft\\{1
2bf90 7d 5c 5c 76 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c  }\\v{2}\\Assembl
2bfa0 79 46 6f 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a  yFoldersEx";....
2bfb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2bfc0 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
2bfd0 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74  (format, GetRoot
2bfe0 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 0d  KeyName(wow64),.
2bff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c000 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
2c010 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2c020 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b  , platformName);
2c030 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2c040 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2c050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2c090 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2c0a0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
2c0b0 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  dToAssemblyFolde
2c0c0 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
2c0d0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2c0e0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2c0f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
2c100 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
2c110 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2c120 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
2c130 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2c140 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
2c150 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2c160 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
2c170 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2c180 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
2c190 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
2c1a0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2c1b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c1c0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2c1d0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2c1e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2c1f0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2c200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2c210 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2c220 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2c230 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65  eyName = GetAsse
2c240 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
2c250 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2c260 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
2c270 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2c280 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2c290 6d 65 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  me, wow64);.... 
2c2a0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2c2b0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2c2c0 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
2c2d0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2c2e0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2c2f0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2c300 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20   keyName, true, 
2c310 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2c320 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c340 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
2c350 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2c360 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c370 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2c380 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2c390 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c3a0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2c3b0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2c3c0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2c3d0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2c3f0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
2c400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c410 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2c420 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2c430 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c440 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2c450 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2c460 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
2c470 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
2c480 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2c490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4a0 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65   key, subKeyName
2c4b0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2c4c0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2c4d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c4e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2c4f0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
2c500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c510 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c530 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2c540 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c560 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63      "could not c
2c570 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b  reate registry k
2c580 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5a0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2c5b0 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d   subKeyName);...
2c5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c5d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c5e0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2c5f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c610 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2c620 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
2c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c640 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 6e         subKey, n
2c650 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20  ull, directory, 
2c660 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2c670 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c680 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2c690 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2c6a0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
2c6b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2c6c0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2c710 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2c720 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d   static bool Rem
2c730 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46  oveFromAssemblyF
2c740 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
2c750 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2c760 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2c770 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2c780 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
2c790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2c7a0 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
2c7b0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2c7c0 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
2c7d0 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
2c7e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
2c7f0 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
2c800 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2c810 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2c820 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
2c830 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
2c840 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2c850 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2c860 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2c870 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2c880 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2c890 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2c8a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
2c8b0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
2c8c0 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  GetAssemblyFolde
2c8d0 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rsKeyName(..    
2c8e0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2c8f0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
2c900 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
2c910 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34  tformName, wow64
2c920 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2c930 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2c940 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
2c950 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2c960 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c980 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
2c990 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
2c9a0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2c9b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c9c0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
2c9d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2c9e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca00 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2ca10 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca30 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2ca40 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2ca50 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
2ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca70 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2ca80 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2caa0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2cac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cad0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2cae0 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a  .DeleteSubKey(..
2caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb00 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
2cb10 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  ame, throwOnMiss
2cb20 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ing, whatIf, ver
2cb30 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
2cb40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2cb50 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2cb60 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2cb70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2cb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2cbc0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2cbd0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
2cbe0 72 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f  rocessAssemblyFo
2cbf0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
2cc00 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2cc10 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2cc20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2cc30 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
2cc40 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2cc50 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
2cc60 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2cc70 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
2cc80 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
2cc90 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
2cca0 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
2ccb0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2ccc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2ccd0 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
2cce0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
2ccf0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2cd00 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2cd10 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2cd20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2cd30 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2cd40 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2cd50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
2cd60 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
2cd70 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
2cd80 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
2cd90 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
2cda0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2cdb0 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
2cdc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2cdd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cde0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2cdf0 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c  d framework call
2ce00 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
2ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ce20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2ce30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ce40 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
2ce50 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
2ce60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ce70 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
2ce80 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f  veFromAssemblyFo
2ce90 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2ceb0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
2cec0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2ced0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2cee0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2cef0 20 20 20 20 20 20 20 20 20 4c 65 67 61 63 79 50           LegacyP
2cf00 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 77 6f 77 36  rojectName, wow6
2cf10 34 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  4, false, whatIf
2cf20 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  , verbose,..    
2cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf40 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20  ref error) &&.. 
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
2cf60 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64  ddToAssemblyFold
2cf70 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
2cf80 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2cf90 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
2cfa0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2cfb0 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
2cfc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2cfd0 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61         ProjectNa
2cfe0 6d 65 2c 20 70 61 69 72 2e 58 2c 20 77 6f 77 36  me, pair.X, wow6
2cff0 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  4, whatIf, verbo
2d000 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
2d010 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2d020 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2d030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2d040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d050 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72   return RemoveFr
2d060 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  omAssemblyFolder
2d070 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
2d080 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2d090 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
2d0a0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2d0b0 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  , platformName,.
2d0c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d0d0 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65       ProjectName
2d0e0 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e  , wow64, throwOn
2d0f0 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c  Missing, whatIf,
2d100 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2d110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d120 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
2d130 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2d140 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2d150 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2d160 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2d170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2d1b0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
2d1c0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 48 61 6e  isual Studio Han
2d1d0 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
2d1e0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
2d1f0 72 69 6e 67 20 47 65 74 56 73 52 6f 6f 74 4b 65  ring GetVsRootKe
2d200 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
2d210 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
2d220 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2d230 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d240 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
2d250 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c  ing.Format("{0}\
2d260 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56 69 73 75  \Microsoft\\Visu
2d270 61 6c 53 74 75 64 69 6f 22 2c 0d 0a 20 20 20 20  alStudio",..    
2d280 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 52              GetR
2d290 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34  ootKeyName(wow64
2d2a0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
2d2b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2d2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d300 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2d310 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
2d320 6e 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28  ng GetVsKeyName(
2d330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2d340 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2d350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d360 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
2d370 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2d380 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
2d390 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d3b0 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
2d3c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2d3d0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
2d3e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d3f0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
2d400 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2d410 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d         "{0}\\{1}
2d420 7b 32 7d 22 2c 20 47 65 74 56 73 52 6f 6f 74 4b  {2}", GetVsRootK
2d430 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 20 76  eyName(wow64), v
2d440 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
2d450 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
2d460 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2d470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2d4c0 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
2d4d0 6f 20 44 61 74 61 20 53 6f 75 72 63 65 20 48 61  o Data Source Ha
2d4e0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
2d4f0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2d500 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f 75  ool AddVsDataSou
2d510 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
2d520 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2d530 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
2d540 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2d550 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
2d560 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
2d570 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
2d580 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
2d590 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
2d5a0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2d5b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2d5c0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2d5d0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2d5e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2d5f0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2d600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2d610 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2d620 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
2d630 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
2d640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2d660 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2d670 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
2d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d690 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2d6a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d6b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
2d6c0 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2d6f0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2d700 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
2d710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d720 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2d730 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d740 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2d750 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
2d760 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
2d770 6e 2c 20 73 75 66 66 69 78 2c 20 77 6f 77 36 34  n, suffix, wow64
2d780 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2d790 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2d7a0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
2d7b0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2d7c0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d7e0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
2d7f0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
2d800 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2d810 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d820 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
2d830 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2d840 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d860 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2d870 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d890 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
2d8a0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
2d8b0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
2d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8d0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2d8e0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d900 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2d920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d930 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2d940 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
2d950 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
2d960 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
2d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d980 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74         key, "Dat
2d990 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c  aSources", true,
2d9a0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2d9b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2d9c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d9d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
2d9e0 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
2d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2da20 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2da30 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da50 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
2da60 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
2da70 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65   {0}\\DataSource
2da80 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
2da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2daa0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
2dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dac0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2dad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dae0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2db00 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2db10 79 4b 65 79 20 64 61 74 61 53 6f 75 72 63 65 4b  yKey dataSourceK
2db20 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ey =..          
2db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db40 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2db50 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75  .CreateSubKey(su
2db60 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  bKey,..         
2db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db80 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53     package.DataS
2db90 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  ourceId.ToString
2dba0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbc0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2dbd0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbf0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2dc10 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d  (dataSourceKey =
2dc20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc60 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2dc70 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc90 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2dca0 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
2dcb0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
2dcc0 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ", key,..       
2dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dce0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2dcf0 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f  .DataSourceId.To
2dd00 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2dd10 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t));....        
2dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd30 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2dd40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2dd50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd70 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2dd80 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2dd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
2ddb0 74 61 53 6f 75 72 63 65 4b 65 79 2c 20 6e 75 6c  taSourceKey, nul
2ddc0 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  l, String.Format
2ddd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2ddf0 7b 30 7d 20 44 61 74 61 62 61 73 65 20 46 69 6c  {0} Database Fil
2de00 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29  e", ProjectName)
2de10 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de30 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
2de40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2de50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de70 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2de80 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e   This value is n
2de90 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e  ew as of 1.0.83.
2dea0 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0...            
2deb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ded0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2dee0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2def0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
2df10 74 61 53 6f 75 72 63 65 4b 65 79 2c 20 22 44 65  taSourceKey, "De
2df20 66 61 75 6c 74 50 72 6f 76 69 64 65 72 22 2c 0d  faultProvider",.
2df30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2df40 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2df50 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
2df60 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
2df70 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
2df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df90 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
2dfa0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfc0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2dfd0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
2dfe0 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 0d 0a  dataSourceKey,..
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e000 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
2e010 6e 67 2e 46 6f 72 6d 61 74 28 22 53 75 70 70 6f  ng.Format("Suppo
2e020 72 74 69 6e 67 50 72 6f 76 69 64 65 72 73 5c 5c  rtingProviders\\
2e030 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
2e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e050 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
2e060 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
2e070 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 2c  ng(VsIdFormat)),
2e080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
2e0a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2e0b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e0c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2e0d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2e0e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e0f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2e100 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2e110 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2e120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e160 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2e170 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2e180 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f  l RemoveVsDataSo
2e190 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
2e1a0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2e1b0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2e1c0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
2e1d0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
2e1e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2e1f0 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
2e200 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
2e210 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
2e220 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2e230 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e240 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2e250 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2e260 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2e270 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2e280 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2e290 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2e2a0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
2e2b0 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
2e2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2e0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2e2f0 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
2e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e310 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2e320 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e330 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2e340 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
2e350 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e370 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2e380 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
2e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e3a0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2e3b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e3c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2e3d0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
2e3e0 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
2e3f0 6f 6e 2c 20 73 75 66 66 69 78 2c 20 77 6f 77 36  on, suffix, wow6
2e400 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
2e410 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2e420 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
2e430 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2e440 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e460 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2e470 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
2e480 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2e490 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e4a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
2e4b0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4e0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2e4f0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e510 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2e520 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2e530 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
2e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e550 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2e560 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
2e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e580 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2e5a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e5b0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2e5c0 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
2e5d0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2e5e0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
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 6b 65 79 2c 20 22 44 61          key, "Da
2e610 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65  taSources", true
2e620 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2e630 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2e640 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e650 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e660 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
2e670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e680 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6a0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2e6b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6d0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2e6e0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2e6f0 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63  : {0}\\DataSourc
2e700 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
2e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e720 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
2e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e740 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2e750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e760 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2e780 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
2e790 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
2e7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e7b0 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
2e7c0 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75   package.DataSou
2e7d0 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  rceId.ToString(V
2e7e0 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
2e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e800 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2e810 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
2e820 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2e830 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e840 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2e850 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2e860 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2e870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e8b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2e8c0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2e8d0 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 53  l ProcessVsDataS
2e8e0 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
2e8f0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2e900 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2e910 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2e920 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
2e930 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2e940 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
2e950 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
2e960 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
2e970 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
2e980 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
2e990 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2e9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2e9b0 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
2e9c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2e9d0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2e9e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2e9f0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2ea00 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2ea10 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2ea20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2ea30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ea40 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29  package == null)
2ea50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2ea60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ea70 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2ea80 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a  d VS package";..
2ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eaa0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2eab0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2eac0 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
2ead0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
2eae0 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
2eaf0 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
2eb00 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
2eb10 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2eb20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
2eb30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2eb50 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2eb60 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  VS callback data
2eb70 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2eb80 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2eb90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2eba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ebb0 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
2ebc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ebd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ebe0 72 6e 20 41 64 64 56 73 44 61 74 61 53 6f 75 72  rn AddVsDataSour
2ebf0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
2ec00 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2ec10 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  , vsVersion, suf
2ec20 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f  fix, package, wo
2ec30 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  w64, whatIf,..  
2ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec50 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65    verbose, ref e
2ec60 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
2ec70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2ec80 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
2ec90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2eca0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
2ecb0 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63  emoveVsDataSourc
2ecc0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2ecd0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2ece0 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66   vsVersion, suff
2ecf0 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f 77  ix, package, wow
2ed00 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  64, whatIf,..   
2ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
2ed30 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
2ed40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2ed50 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2ed60 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2ed70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2edb0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2edc0 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c    #region Visual
2edd0 20 53 74 75 64 69 6f 20 44 61 74 61 20 50 72 6f   Studio Data Pro
2ede0 76 69 64 65 72 20 48 61 6e 64 6c 69 6e 67 0d 0a  vider Handling..
2edf0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2ee00 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56  static bool AddV
2ee10 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
2ee20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2ee30 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
2ee40 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2ee50 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
2ee60 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2ee70 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
2ee80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
2ee90 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
2eea0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2eeb0 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ng fileName,..  
2eec0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2eed0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2eee0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
2eef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2ef00 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
2ef10 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2ef20 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2ef30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2ef40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ef50 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
2ef60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ef70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ef80 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2ef90 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69  invalid VS versi
2efa0 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
2efb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2efc0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2efd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2efe0 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
2eff0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2f000 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f010 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2f020 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
2f030 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
2f040 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2f050 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2f060 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2f070 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
2f080 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
2f090 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
2f0a0 78 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  x, wow64);....  
2f0b0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2f0c0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2f0d0 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
2f0e0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2f0f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2f100 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2f110 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
2f120 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2f130 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2f140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f150 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
2f160 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2f170 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f180 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2f190 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2f1a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2f1b0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2f1c0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2f1d0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2f1e0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2f200 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
2f210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f220 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2f230 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2f240 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2f250 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2f260 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2f270 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
2f280 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2f290 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2f2b0 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65  ey, "DataProvide
2f2c0 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  rs", true, whatI
2f2d0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2f2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f300 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
2f310 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2f330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f340 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2f350 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2f360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f370 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2f380 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2f390 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2f3a0 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d  DataProviders",.
2f3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2f3d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f3f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2f400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f410 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2f420 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2f430 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2f440 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
2f450 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
2f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f470 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
2f480 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b  reateSubKey(subK
2f490 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4b0 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f   package.DataPro
2f4c0 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67  viderId.ToString
2f4d0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
2f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4f0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2f500 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f520 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f530 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2f540 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
2f550 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f570 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f590 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2f5a0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5c0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2f5d0 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
2f5e0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
2f5f0 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20  1}", key,..     
2f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f610 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2f620 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
2f630 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2f640 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
2f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f660 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2f670 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2f690 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f6a0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2f6b0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2f6c0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6e0 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
2f6f0 79 2c 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70  y, null, Descrip
2f700 74 69 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20  tion, whatIf,.. 
2f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f720 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
2f730 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f750 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2f760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2f770 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65 20  OTE: This value 
2f780 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e 30  is new as of 1.0
2f790 2e 38 33 2e 30 2e 20 20 48 6f 77 65 76 65 72 2c  .83.0.  However,
2f7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f7b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2f7c0 20 20 20 69 74 20 73 68 6f 75 6c 64 20 6f 6e 6c     it should onl
2f7d0 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65 20  y be set if the 
2f7e0 70 61 63 6b 61 67 65 20 61 73 73 65 6d 62 6c 79  package assembly
2f7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f800 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2f810 20 20 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 61     and all the a
2f820 73 73 65 6d 62 6c 69 65 73 20 69 74 20 72 65 66  ssemblies it ref
2f830 65 72 73 20 74 6f 20 61 72 65 20 62 65 69 6e 67  ers to are being
2f840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f850 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2f860 20 20 20 70 6c 61 63 65 64 20 69 6e 74 6f 20 74     placed into t
2f870 68 65 20 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62  he global assemb
2f880 6c 79 20 63 61 63 68 65 2e 0d 0a 20 20 20 20 20  ly cache...     
2f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8a0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2f8c0 66 20 28 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61  f (package.Globa
2f8d0 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 29 0d  lAssemblyCache).
2f8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f8f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f910 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2f920 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2f930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f950 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
2f960 79 2c 20 22 41 73 73 65 6d 62 6c 79 22 2c 0d 0a  y, "Assembly",..
2f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f990 70 61 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79  package.Assembly
2f9a0 4e 61 6d 65 2e 54 6f 53 74 72 69 6e 67 28 29 2c  Name.ToString(),
2f9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9d0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2f9e0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2fa00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fa10 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa30 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
2fa40 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77  his value is new
2fa50 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e   as of 1.0.83.0.
2fa60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fa70 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa90 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2faa0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fac0 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
2fad0 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 41 73  ProviderKey, "As
2fae0 73 6f 63 69 61 74 65 64 53 6f 75 72 63 65 22 2c  sociatedSource",
2faf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2fb10 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
2fb20 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
2fb30 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
2fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb50 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
2fb60 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb80 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2fb90 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbb0 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
2fbc0 76 69 64 65 72 4b 65 79 2c 20 22 49 6e 76 61 72  viderKey, "Invar
2fbd0 69 61 6e 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72  iantName", Invar
2fbe0 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  iantName,..     
2fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc00 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
2fc10 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc30 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2fc40 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
2fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc60 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
2fc70 6f 76 69 64 65 72 4b 65 79 2c 20 22 54 65 63 68  oviderKey, "Tech
2fc80 6e 6f 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20  nology",..      
2fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fca0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64        package.Ad
2fcb0 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
2fcc0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
2fcd0 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
2fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcf0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2fd00 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2fd30 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
2fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd50 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
2fd60 64 65 72 4b 65 79 2c 20 22 43 6f 64 65 42 61 73  derKey, "CodeBas
2fd70 65 22 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68  e", fileName, wh
2fd80 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fda0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
2fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdc0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2fdd0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2fde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
2fe00 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
2fe10 46 61 63 74 6f 72 79 53 65 72 76 69 63 65 22 2c  FactoryService",
2fe20 0d 0a 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 20 20 70 61                pa
2fe40 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e  ckage.ServiceId.
2fe50 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2fe60 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  mat), whatIf,.. 
2fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe80 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
2fe90 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2feb0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
2fec0 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
2fed0 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
2fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fef0 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
2ff00 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
2ff10 61 43 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e  aConnectionUICon
2ff20 74 72 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20  trol",..        
2ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff40 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2ff50 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff70 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2ff80 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
2ff90 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
2ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffb0 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
2ffc0 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
2ffd0 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70  taConnectionProp
2ffe0 65 72 74 69 65 73 22 2c 0d 0a 20 20 20 20 20 20  erties",..      
2fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30000 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
30010 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
30020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30030 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
30040 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64  r.CreateSubKey(d
30050 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d  ataProviderKey,.
30060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30070 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75               "Su
30080 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c  pportedObjects\\
30090 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75  DataConnectionSu
300a0 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d  pport", whatIf,.
300b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
300c0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
300d0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
300e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300f0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
30100 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
30110 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
30120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30130 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
30140 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
30150 61 74 61 4f 62 6a 65 63 74 53 75 70 70 6f 72 74  ataObjectSupport
30160 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ", whatIf,..    
30170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30180 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
30190 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
301a0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
301b0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
301c0 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
301d0 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
301e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301f0 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
30200 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 56 69  dObjects\\DataVi
30210 65 77 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74  ewSupport", what
30220 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
30230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30240 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
30250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30260 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
30270 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
30280 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
30290 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
302a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
302b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
302c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
30300 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
30310 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d   static bool Rem
30320 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69 64 65  oveVsDataProvide
30330 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
30340 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
30350 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
30360 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
30370 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
30380 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
30390 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
303a0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
303b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
303c0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
303d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
303e0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
303f0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
30400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
30410 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
30420 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
30430 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30440 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
30450 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
30460 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30470 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
30480 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
30490 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
304a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
304b0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
304c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
304d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
304e0 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
304f0 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
30500 20 73 75 66 66 69 78 2c 20 77 6f 77 36 34 29 3b   suffix, wow64);
30510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30520 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
30530 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
30540 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
30550 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
30560 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
30570 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
30580 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
30590 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
305a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
305b0 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
305c0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
305d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
305e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305f0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
30600 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
30610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30620 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
30630 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
30640 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
30650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30660 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
30670 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
30680 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
30690 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
306a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
306b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
306c0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
306d0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
306e0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
306f0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
30700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30710 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50       key, "DataP
30720 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c  roviders", true,
30730 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
30740 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
30750 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30760 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
30770 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
30780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30790 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
307a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
307b0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
307c0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
307d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307e0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
307f0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
30800 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64   {0}\\DataProvid
30810 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ers",..         
30820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30830 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
30840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30850 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30860 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30870 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30890 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
308a0 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
308b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
308c0 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
308d0 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72  , package.DataPr
308e0 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
308f0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
30900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30910 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
30920 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
30930 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
30940 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
30950 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30960 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
30970 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
30980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
309d0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
309e0 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61  bool ProcessVsDa
309f0 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
30a00 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
30a10 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
30a20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
30a30 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
30a40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
30a50 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
30a60 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
30a70 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
30a80 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
30a90 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
30aa0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
30ab0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
30ac0 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
30ad0 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
30ae0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
30af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
30b00 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
30b10 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
30b20 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
30b30 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
30b40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30b50 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
30b60 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
30b70 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
30b80 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
30b90 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
30ba0 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
30bb0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
30bc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30bd0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
30be0 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b  alid VS callback
30bf0 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
30c00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30c10 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
30c20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30c30 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
30c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c60 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61 74   return AddVsDat
30c70 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20  aProvider(..    
30c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c90 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
30ca0 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b  on, suffix, pack
30cb0 61 67 65 2c 20 70 61 69 72 2e 58 2c 20 77 6f 77  age, pair.X, wow
30cc0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
30cd0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
30ce0 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
30cf0 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
30d00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
30d10 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
30d20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30d30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
30d40 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69 64  moveVsDataProvid
30d50 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
30d60 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
30d70 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  , vsVersion, suf
30d80 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f  fix, package, wo
30d90 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  w64, whatIf,..  
30da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30db0 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65    verbose, ref e
30dc0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
30dd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
30de0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
30df0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
30e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
30e50 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
30e60 6c 20 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65  l Studio Package
30e70 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
30e80 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
30e90 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a  c void Initializ
30ea0 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  eVsPackage(..   
30eb0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
30ec0 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
30ed0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
30ee0 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65   bool globalAsse
30ef0 6d 62 6c 79 43 61 63 68 65 2c 0d 0a 20 20 20 20  mblyCache,..    
30f00 20 20 20 20 20 20 20 20 72 65 66 20 50 61 63 6b          ref Pack
30f10 61 67 65 20 70 61 63 6b 61 67 65 0d 0a 20 20 20  age package..   
30f20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
30f30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30f40 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
30f50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30f60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30f70 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20          package 
30f80 3d 20 6e 65 77 20 50 61 63 6b 61 67 65 28 29 3b  = new Package();
30f90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30fa0 20 20 20 20 70 61 63 6b 61 67 65 2e 41 73 73 65      package.Asse
30fb0 6d 62 6c 79 4e 61 6d 65 20 3d 20 61 73 73 65 6d  mblyName = assem
30fc0 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  blyName;..      
30fd0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
30fe0 65 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  e.GlobalAssembly
30ff0 43 61 63 68 65 20 3d 20 67 6c 6f 62 61 6c 41 73  Cache = globalAs
31000 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 0d 0a  semblyCache;....
31010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31020 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65  package.AdoNetTe
31030 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77  chnologyId = new
31040 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20   Guid(..        
31050 20 20 20 20 20 20 20 20 20 20 20 20 22 37 37 41              "77A
31060 42 39 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d  B9A9D-78B9-4BA7-
31070 39 31 41 43 2d 38 37 33 46 35 33 33 38 46 31 44  91AC-873F5338F1D
31080 32 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2");....        
31090 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
310a0 50 61 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20  PackageId = new 
310b0 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20  Guid(..         
310c0 20 20 20 20 20 20 20 20 20 20 20 22 44 43 42 45             "DCBE
310d0 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41  6C8D-0E57-4099-A
310e0 31 38 33 2d 39 38 46 46 37 34 43 36 34 44 39 43  183-98FF74C64D9C
310f0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
31100 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53         package.S
31110 65 72 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47  erviceId = new G
31120 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
31130 20 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36            "DCBE6
31140 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31  C8D-0E57-4099-A1
31150 38 33 2d 39 38 46 46 37 34 43 36 34 44 39 44 22  83-98FF74C64D9D"
31160 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31170 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
31180 74 61 53 6f 75 72 63 65 49 64 20 3d 20 6e 65 77  taSourceId = new
31190 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20   Guid(..        
311a0 20 20 20 20 20 20 20 20 20 20 20 20 22 30 45 42              "0EB
311b0 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d  AAB6E-CA80-4B4A-
311c0 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 43 37  8DDF-CBE6BF058C7
311d0 31 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  1");....        
311e0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
311f0 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d  DataProviderId =
31200 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
31210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31220 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34  "0EBAAB6E-CA80-4
31230 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30  B4A-8DDF-CBE6BF0
31240 35 38 43 37 30 22 29 3b 0d 0a 20 20 20 20 20 20  58C70");..      
31250 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
31260 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
31270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
312a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
312b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
312c0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
312d0 62 6f 6f 6c 20 41 64 64 56 73 50 61 63 6b 61 67  bool AddVsPackag
312e0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
312f0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
31300 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
31310 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
31320 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
31330 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
31340 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
31350 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
31360 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
31370 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
31380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31390 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
313a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
313b0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
313c0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
313d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
313e0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
313f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
31400 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31410 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
31420 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
31430 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31440 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
31450 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
31460 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
31470 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31480 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
31490 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
314a0 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
314b0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
314c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
314d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
314e0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
314f0 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
31500 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31510 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
31520 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31530 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
31540 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
31550 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73  ame(vsVersion, s
31560 75 66 66 69 78 2c 20 77 6f 77 36 34 29 3b 0d 0a  uffix, wow64);..
31570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
31580 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
31590 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
315a0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
315b0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
315c0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
315d0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
315e0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
315f0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
31600 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31610 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
31620 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
31630 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
31650 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
31660 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
31670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
31680 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
31690 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
316a0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
316b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316c0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
316d0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
316e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
316f0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
31700 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
31710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
31720 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
31730 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
31740 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
31750 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
31760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31770 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67 65     key, "Package
31780 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
31790 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
317b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317c0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
317d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
317e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
317f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31800 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
31810 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
31820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31830 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
31840 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
31850 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50  stry key: {0}\\P
31860 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20 20  ackages",..     
31870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31880 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
31890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
318b0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
318c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
318d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
318f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
31900 4f 54 45 3a 20 2a 57 41 52 4e 49 4e 47 2a 20 43  OTE: *WARNING* C
31910 68 61 6e 67 69 6e 67 20 61 6e 79 20 6f 66 20 74  hanging any of t
31920 68 65 73 65 20 76 61 6c 75 65 73 20 77 69 6c 6c  hese values will
31930 20 6c 69 6b 65 6c 79 0d 0a 20 20 20 20 20 20 20   likely..       
31940 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
31950 20 20 20 20 20 20 72 65 71 75 69 72 65 20 61 20        require a 
31960 6e 65 77 20 22 70 61 63 6b 61 67 65 20 6c 6f 61  new "package loa
31970 64 20 6b 65 79 22 20 28 50 4c 4b 29 20 74 6f 20  d key" (PLK) to 
31980 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
31990 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
319a0 20 67 65 6e 65 72 61 74 65 64 20 69 6e 20 6f 72   generated in or
319b0 64 65 72 20 74 6f 20 70 72 6f 70 65 72 6c 79 20  der to properly 
319c0 73 75 70 70 6f 72 74 20 6c 6f 61 64 69 6e 67 20  support loading 
319d0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
319e0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
319f0 20 20 70 61 63 6b 61 67 65 20 69 6e 74 6f 20 56    package into V
31a00 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30  isual Studio 200
31a10 38 20 61 6e 64 20 65 61 72 6c 69 65 72 20 77 69  8 and earlier wi
31a20 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 20  thout..         
31a30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
31a40 20 20 20 20 74 68 65 20 6d 61 74 63 68 69 6e 67      the matching
31a50 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 53   Visual Studio S
31a60 44 4b 20 62 65 69 6e 67 20 69 6e 73 74 61 6c 6c  DK being install
31a70 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
31a80 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
31a90 20 20 50 6c 65 61 73 65 20 72 65 66 65 72 20 74    Please refer t
31aa0 6f 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44 65  o the "SQLite.De
31ab0 73 69 67 6e 65 72 5c 70 6c 6b 2e 74 78 74 22 20  signer\plk.txt" 
31ac0 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  file..          
31ad0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
31ae0 20 20 20 66 6f 72 20 74 68 65 20 65 78 69 73 74     for the exist
31af0 69 6e 67 20 6f 66 66 69 63 69 61 6c 20 76 61 6c  ing official val
31b00 75 65 73 20 61 6e 64 20 75 70 64 61 74 65 20 74  ues and update t
31b10 68 65 6d 20 69 66 0d 0a 20 20 20 20 20 20 20 20  hem if..        
31b20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
31b30 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 2e 20       necessary. 
31b40 20 41 6c 73 6f 2c 20 74 68 65 20 6e 65 77 6c 79   Also, the newly
31b50 20 67 65 6e 65 72 61 74 65 64 20 70 61 63 6b 61   generated packa
31b60 67 65 20 6c 6f 61 64 0d 0a 20 20 20 20 20 20 20  ge load..       
31b70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
31b80 20 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66        key itself
31b90 2c 20 77 68 69 63 68 20 69 73 20 61 20 31 32 38  , which is a 128
31ba0 20 63 68 61 72 61 63 74 65 72 20 61 6c 70 68 61   character alpha
31bb0 6e 75 6d 65 72 69 63 0d 0a 20 20 20 20 20 20 20  numeric..       
31bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
31bd0 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 6d 75        string, mu
31be0 73 74 20 62 65 20 70 6c 61 63 65 64 20 69 6e 20  st be placed in 
31bf0 74 68 65 20 72 65 73 6f 75 72 63 65 20 73 74 72  the resource str
31c00 69 6e 67 20 6e 61 6d 65 64 0d 0a 20 20 20 20 20  ing named..     
31c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31c20 2f 20 20 20 20 20 20 20 22 34 30 30 22 20 69 6e  /       "400" in
31c30 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44 65 73   the "SQLite.Des
31c40 69 67 6e 65 72 5c 56 53 50 61 63 6b 61 67 65 2e  igner\VSPackage.
31c50 72 65 73 78 22 20 66 69 6c 65 0d 0a 20 20 20 20  resx" file..    
31c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c70 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65  //       and the
31c80 6e 20 74 68 65 20 64 65 73 69 67 6e 65 72 20 61  n the designer a
31c90 73 73 65 6d 62 6c 79 20 69 74 73 65 6c 66 20 6d  ssembly itself m
31ca0 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ust be..        
31cb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
31cc0 20 20 20 20 20 72 65 63 6f 6d 70 69 6c 65 64 2e       recompiled.
31cd0 20 20 41 73 20 6f 66 20 74 68 69 73 20 77 72 69    As of this wri
31ce0 74 69 6e 67 20 28 69 6e 20 46 65 62 72 75 61 72  ting (in Februar
31cf0 79 20 32 30 31 32 29 2c 0d 0a 20 20 20 20 20 20  y 2012),..      
31d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
31d10 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f         the follo
31d20 77 69 6e 67 20 55 52 4c 20 69 73 20 74 68 65 20  wing URL is the 
31d30 70 72 6f 70 65 72 20 70 6c 61 63 65 20 74 6f 20  proper place to 
31d40 67 65 6e 65 72 61 74 65 0d 0a 20 20 20 20 20 20  generate..      
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
31d60 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 6c         package l
31d70 6f 61 64 20 6b 65 79 73 3a 0d 0a 20 20 20 20 20  oad keys:..     
31d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31d90 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
31da0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
31db0 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69 63 72  http://msdn.micr
31dc0 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75 73 2f  osoft.com/en-us/
31dd0 76 73 74 75 64 69 6f 2f 63 63 36 35 35 37 39 35  vstudio/cc655795
31de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31df0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
31e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
31e10 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
31e20 79 4b 65 79 20 70 61 63 6b 61 67 65 4b 65 79 20  yKey packageKey 
31e30 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
31e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
31e50 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
31e60 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
31e70 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
31e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e90 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
31ea0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
31eb0 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
31ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
31ee0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f10 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
31f20 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  geKey == null)..
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 20 7b 0d 0a 20 20 20 20 20          {..     
31f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f60 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
31f70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
31f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
31fa0 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
31fb0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
31fc0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
31fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fe0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
31ff0 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
32000 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
32010 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
32020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32030 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
32040 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
32050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
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 52 65 67 69              Regi
32080 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
32090 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
320a0 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
320b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320c0 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
320d0 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50  ("{0} Designer P
320e0 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74  ackage", Project
320f0 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
32100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32110 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
32120 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
32130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32140 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
32150 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
32160 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d 0a 20  Key, "Class",.. 
32170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32180 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 69             "SQLi
32190 74 65 2e 44 65 73 69 67 6e 65 72 2e 53 51 4c 69  te.Designer.SQLi
321a0 74 65 50 61 63 6b 61 67 65 22 2c 20 77 68 61 74  tePackage", what
321b0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
321c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
321d0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
321e0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
321f0 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f  (packageKey, "Co
32200 64 65 42 61 73 65 22 2c 0d 0a 20 20 20 20 20 20  deBase",..      
32210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32220 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
32230 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
32240 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32250 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
32260 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
32270 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
32280 20 22 49 44 22 2c 20 34 30 30 2c 20 77 68 61 74   "ID", 400, what
32290 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322b0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
322c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
322e0 65 63 74 6f 72 79 20 3d 20 47 65 74 53 79 73 74  ectory = GetSyst
322f0 65 6d 44 69 72 65 63 74 6f 72 79 28 77 6f 77 36  emDirectory(wow6
32300 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
32310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
32320 66 20 28 64 69 72 65 63 74 6f 72 79 20 3d 3d 20  f (directory == 
32330 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
32340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32350 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 53     directory = S
32360 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a  tring.Empty;....
32370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32380 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
32390 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
323a0 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 6e 70  packageKey, "Inp
323b0 72 6f 63 53 65 72 76 65 72 33 32 22 2c 0d 0a 20  rocServer32",.. 
323c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323d0 20 20 20 20 20 20 20 20 20 20 20 50 61 74 68 2e             Path.
323e0 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
323f0 79 2c 20 22 6d 73 63 6f 72 65 65 2e 64 6c 6c 22  y, "mscoree.dll"
32400 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
32410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32420 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
32430 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32440 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
32450 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
32460 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
32470 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d   "CompanyName",.
32480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32490 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68 74               "ht
324a0 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74 61  tp://system.data
324b0 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20 77  .sqlite.org/", w
324c0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
324d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
324e0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
324f0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
32500 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
32510 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a 20  "MinEdition",.. 
32520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32530 20 20 20 20 20 20 20 20 20 20 20 22 73 74 61 6e             "stan
32540 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c 20 76  dard", whatIf, v
32550 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
32560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32570 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
32580 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
32590 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74  ageKey, "Product
325a0 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  Name",..        
325b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325c0 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
325d0 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20  t("{0} Designer 
325e0 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63  Package", Projec
325f0 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  tName),..       
32600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32610 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
32620 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
32630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32640 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
32650 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
32660 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 56 65  eKey, "ProductVe
32670 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20  rsion",..       
32680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32690 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68 61 74       "1.0", what
326a0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
326b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
326c0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
326d0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
326e0 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a 20 20  toolboxKey =..  
326f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
32710 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
32720 61 74 65 53 75 62 4b 65 79 28 70 61 63 6b 61 67  ateSubKey(packag
32730 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  eKey,..         
32740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32750 20 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f 78 22         "Toolbox"
32760 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
32770 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
32790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
327b0 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e 75  toolboxKey == nu
327c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
327d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
327f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32800 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
32810 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
32820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32840 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
32850 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
32860 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
32870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32880 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 54           "{0}\\T
32890 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61 67 65  oolbox", package
328a0 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Key);....       
328b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
328d0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
328e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
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 0d 0a 20  per.SetValue(.. 
32930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
32950 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66 61  oolboxKey, "Defa
32960 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c 20 77  ult Items", 3, w
32970 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
32980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32990 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
329a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
329b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
329c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
329e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
329f0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
32a00 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
32a10 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
32a20 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
32a30 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
32a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
32a50 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65  y, "Menus", true
32a60 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
32a70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
32a80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32a90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
32aa0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
32ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32ac0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ae0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
32af0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
32b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b10 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
32b20 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
32b30 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a  : {0}\\Menus",..
32b40 20 20 20 20 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 6b 65 79 29              key)
32b60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32b70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
32b80 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
32b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ba0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32bb0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
32bc0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
32bd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32be0 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
32bf0 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61  y, package.Packa
32c00 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
32c10 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
32c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c30 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33 22 2c      ", 1000, 3",
32c40 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
32c50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
32c60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32c70 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
32c80 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
32c90 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
32ca0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
32cb0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
32cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
32cd0 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72  , "Services", tr
32ce0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
32cf0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
32d00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
32d20 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
32d30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
32d40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d60 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
32d70 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
32d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d90 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
32da0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
32db0 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65  ey: {0}\\Service
32dc0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
32dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32de0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
32df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
32e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
32e40 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
32e50 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65 79 20  yKey serviceKey 
32e60 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
32e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
32e80 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
32e90 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
32ea0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
32eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ec0 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49  package.ServiceI
32ed0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
32ee0 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
32ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32f00 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
32f10 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
32f20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f40 20 20 20 20 20 20 20 69 66 20 28 73 65 72 76 69         if (servi
32f50 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ceKey == null)..
32f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f90 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
32fa0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
32fd0 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
32fe0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
32ff0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
33000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33010 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
33020 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49  package.ServiceI
33030 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
33040 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
33050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33060 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
33070 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
33080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
33090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
330a0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
330b0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
330c0 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20  lue(serviceKey, 
330d0 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
330e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330f0 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61     package.Packa
33100 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
33110 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49  IdFormat), whatI
33120 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
33130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33140 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
33150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33160 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
33170 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72  per.SetValue(ser
33180 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65 22 2c  viceKey, "Name",
33190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
331a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
331b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
331c0 20 44 65 73 69 67 6e 65 72 20 53 65 72 76 69 63   Designer Servic
331d0 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29  e", ProjectName)
331e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
331f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
33200 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
33210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33220 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33230 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
33240 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33250 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
33260 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
33270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
33280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332c0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
332d0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
332e0 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61  ol RemoveVsPacka
332f0 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
33300 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
33310 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
33320 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
33330 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
33340 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
33350 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
33360 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
33370 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
33380 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
33390 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
333a0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
333b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
333c0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
333d0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
333e0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
333f0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
33400 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
33410 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
33420 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
33430 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
33440 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
33450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33460 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
33470 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
33480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
33490 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
334a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
334b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
334c0 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
334d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
334e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334f0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
33500 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
33520 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
33530 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
33540 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
33550 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
33560 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
33570 6f 6e 2c 20 73 75 66 66 69 78 2c 20 77 6f 77 36  on, suffix, wow6
33580 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
33590 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
335a0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
335b0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
335c0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
335d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335e0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
335f0 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
33600 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
33610 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33620 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
33630 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
33640 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
33650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33660 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
33670 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
33680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33690 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
336a0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
336b0 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
336c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336d0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
336e0 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
336f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33700 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
33710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
33720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33730 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
33740 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
33750 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
33760 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
33770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33780 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61          key, "Pa
33790 63 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77  ckages", true, w
337a0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
337b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
337c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
337d0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
337e0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
337f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33800 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33810 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
33820 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
33830 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
33840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33850 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
33860 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
33870 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a  0}\\Packages",..
33880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33890 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
338a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
338b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
338c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
338d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
338f0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
33900 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75  yHelper.DeleteSu
33910 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20  bKeyTree(..     
33920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33930 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61     subKey, packa
33940 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
33950 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
33960 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
33970 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
33980 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
33990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
339a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
339b0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
339c0 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
339d0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
339e0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
339f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a00 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65          key, "Me
33a10 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  nus", true, what
33a20 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
33a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
33a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33a50 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
33a60 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
33a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
33a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33a90 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
33aa0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
33ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
33ad0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
33ae0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
33af0 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20  \Menus",..      
33b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b10 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
33b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
33b40 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
33b50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
33b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b70 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
33b80 72 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a  r.DeleteValue(..
33b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ba0 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
33bb0 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
33bc0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
33bd0 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bf0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
33c00 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
33c10 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
33c20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
33c30 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
33c40 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
33c50 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
33c60 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
33c70 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
33c80 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
33c90 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72  , "Services", tr
33ca0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
33cb0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
33cc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
33ce0 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
33cf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33d00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
33d30 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
33d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d50 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
33d60 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
33d70 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65  ey: {0}\\Service
33d80 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
33d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33da0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
33db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33dc0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
33dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33de0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
33e00 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
33e10 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
33e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e30 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
33e40 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49  package.ServiceI
33e50 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
33e60 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
33e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e80 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
33e90 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
33ea0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
33eb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33ec0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
33ed0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
33ee0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
33ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
33f30 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
33f40 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
33f50 6f 63 65 73 73 56 73 50 61 63 6b 61 67 65 28 0d  ocessVsPackage(.
33f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
33f70 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
33f80 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
33f90 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
33fa0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
33fb0 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
33fc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
33fd0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
33fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
33ff0 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
34000 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
34010 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
34020 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
34030 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
34040 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
34050 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
34060 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
34070 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
34080 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
34090 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
340a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
340b0 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
340c0 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
340d0 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
340e0 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
340f0 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
34100 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
34110 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
34120 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34130 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
34140 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
34150 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
34160 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
34170 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
34180 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34190 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
341a0 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
341b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
341c0 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
341d0 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
341e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
341f0 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
34200 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
34210 67 65 2c 20 70 61 69 72 2e 58 2c 20 77 6f 77 36  ge, pair.X, wow6
34220 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
34230 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
34240 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
34250 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
34260 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
34270 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
34280 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34290 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
342a0 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  oveVsPackage(.. 
342b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342c0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
342d0 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
342e0 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 0d 0a  ackage, wow64,..
342f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34300 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69      throwOnMissi
34310 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
34320 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
34330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
34340 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
34350 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
34360 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
34370 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
34380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
343d0 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69 63 61   #region Applica
343e0 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69 6e 74  tion Entry Point
343f0 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
34400 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
34410 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
34420 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
34430 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
34440 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20 20 20 20   Main(..        
34450 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67      string[] arg
34460 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  s..            )
34470 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
34480 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
34490 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
344a0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
344b0 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
344c0 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b  guration = null;
344d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
344e0 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 3d    string error =
344f0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
34500 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
34510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34540 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
34550 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
34560 67 69 6f 6e 20 44 65 62 75 67 67 65 72 20 48 6f  gion Debugger Ho
34570 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ok..            
34580 20 20 20 20 69 66 20 28 45 6e 76 69 72 6f 6e 6d      if (Environm
34590 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f 6e 6d 65  ent.GetEnvironme
345a0 6e 74 56 61 72 69 61 62 6c 65 28 22 42 72 65 61  ntVariable("Brea
345b0 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  k") != null)..  
345c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
345d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
345e0 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69       Console.Wri
345f0 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  teLine(..       
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34610 20 22 41 74 74 61 63 68 20 61 20 64 65 62 75 67   "Attach a debug
34620 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73 20 7b  ger to process {
34630 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20 20 20 20  0} and " +..    
34640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34650 20 20 20 20 22 70 72 65 73 73 20 61 6e 79 20 6b      "press any k
34660 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 22  ey to continue."
34670 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34680 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65             Proce
34690 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f  ss.GetCurrentPro
346a0 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a 0d 0a 20  cess().Id);.... 
346b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346c0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
346d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
346e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346f0 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 52         Console.R
34700 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20 2f 2a  eadKey(true); /*
34710 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
34720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
34730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34740 20 20 20 20 20 20 63 61 74 63 68 20 28 49 6e 76        catch (Inv
34750 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
34760 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e 73 6f  eption) // Conso
34770 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20 20 20  le.ReadKey..    
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34790 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
347a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
347b0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
347c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
347d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
347e0 20 20 20 20 20 20 20 20 44 65 62 75 67 67 65 72          Debugger
347f0 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20 20 20  .Break();..     
34800 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
34810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
34820 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
34830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
34840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
34880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
34890 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64 20 4c  region Command L
348a0 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67 0d 0a  ine Processing..
348b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348c0 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61 74 69  if (!Configurati
348d0 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20  on.FromArgs(..  
348e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348f0 20 20 20 20 20 20 61 72 67 73 2c 20 74 72 75 65        args, true
34900 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 72 61 74  , ref configurat
34910 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72 29 20  ion, ref error) 
34920 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
34930 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75          !Configu
34940 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73 28 0d  ration.Process(.
34950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34960 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 63           args, c
34970 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72  onfiguration, tr
34980 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20 7c  ue, ref error) |
34990 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
349a0 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75 72         !Configur
349b0 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e 74 69  ation.CheckRunti
349c0 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
349d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
349f0 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65 72 72  n, true, ref err
34a00 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
34a10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34a20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
34a30 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
34a40 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
34a50 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
34a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a70 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
34a80 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
34a90 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20  thisAssembly,.. 
34aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ab0 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72         error, tr
34ac0 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73  aceCategory, Mes
34ad0 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f  sageBoxButtons.O
34ae0 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K,..            
34af0 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
34b00 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
34b10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34b20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
34b30 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
34b40 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
34b50 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
34b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b70 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
34b80 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
34b90 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20  , "Failure.",.. 
34ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34bb0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
34bc0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
34bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34be0 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
34bf0 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
34c00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
34c10 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
34c20 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
34c30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
34c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c70 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
34c80 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34c90 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72   (MockRegistry r
34ca0 65 67 69 73 74 72 79 20 3d 20 6e 65 77 20 4d 6f  egistry = new Mo
34cb0 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  ckRegistry(..   
34cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cd0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
34ce0 6f 6e 2e 57 68 61 74 49 66 2c 20 66 61 6c 73 65  on.WhatIf, false
34cf0 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20  , false))..     
34d00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d20 20 20 23 72 65 67 69 6f 6e 20 43 6f 72 65 20 41    #region Core A
34d30 73 73 65 6d 62 6c 79 20 4e 61 6d 65 20 43 68 65  ssembly Name Che
34d40 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
34d50 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
34d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d70 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20 74 68 69 73  // NOTE: Do this
34d80 20 66 69 72 73 74 2c 20 62 65 66 6f 72 65 20 6d   first, before m
34d90 61 6b 69 6e 67 20 61 6e 79 20 63 68 61 6e 67 65  aking any change
34da0 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  s to the..      
34db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
34dc0 20 20 20 20 20 20 20 73 79 73 74 65 6d 2c 20 62         system, b
34dd0 65 63 61 75 73 65 20 69 74 20 77 69 6c 6c 20 74  ecause it will t
34de0 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
34df0 6e 20 69 66 20 74 68 65 0d 0a 20 20 20 20 20 20  n if the..      
34e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
34e10 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65         file name
34e20 20 64 6f 65 73 20 6e 6f 74 20 72 65 70 72 65 73   does not repres
34e30 65 6e 74 20 61 20 76 61 6c 69 64 20 6d 61 6e 61  ent a valid mana
34e40 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ged..           
34e50 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
34e60 20 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20    assembly...   
34e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e80 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
34e90 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
34ea0 79 4e 61 6d 65 20 63 6f 72 65 41 73 73 65 6d 62  yName coreAssemb
34eb0 6c 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20  lyName =..      
34ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ed0 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47    AssemblyName.G
34ee0 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  etAssemblyName(.
34ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34f00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
34f10 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46  figuration.CoreF
34f20 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72  ileName); /* thr
34f30 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ow */....       
34f40 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
34f50 65 6d 62 6c 79 4e 61 6d 65 20 64 65 73 69 67 6e  emblyName design
34f60 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
34f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34f80 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
34f90 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62  lyName.GetAssemb
34fa0 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lyName(..       
34fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fc0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
34fd0 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  on.DesignerFileN
34fe0 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ame); /* throw *
34ff0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
35000 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
35010 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
35020 20 20 20 20 20 20 20 20 20 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 2f  ////////////////
35050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35060 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
35070 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
35080 69 6f 6e 20 53 79 73 74 65 6d 20 44 69 72 65 63  ion System Direc
35090 74 6f 72 79 20 43 68 65 63 6b 0d 0a 20 20 20 20  tory Check..    
350a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
350c0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
350d0 20 47 65 74 74 69 6e 67 20 74 68 65 20 73 79 73   Getting the sys
350e0 74 65 6d 20 64 69 72 65 63 74 6f 72 79 20 76 61  tem directory va
350f0 6c 75 65 20 68 65 72 65 20 73 65 72 76 65 73 0d  lue here serves.
35100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35110 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 77       //       tw
35120 6f 20 70 75 72 70 6f 73 65 73 3a 0d 0a 20 20 20  o purposes:..   
35130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35140 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
35150 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
35160 20 20 31 2e 20 49 74 20 65 6e 61 62 6c 65 73 20    1. It enables 
35170 75 73 20 74 6f 20 6c 6f 67 20 74 68 65 20 73 79  us to log the sy
35180 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79 0d 0a  stem directory..
35190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
351b0 76 61 6c 75 65 20 76 65 72 79 20 65 61 72 6c 79  value very early
351c0 20 69 6e 20 74 68 65 20 69 6e 73 74 61 6c 6c 61   in the installa
351d0 74 69 6f 6e 20 70 72 6f 63 65 73 73 0d 0a 20 20  tion process..  
351e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351f0 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 28 69    //          (i
35200 2e 65 2e 20 65 76 65 6e 20 74 68 6f 75 67 68 20  .e. even though 
35210 74 68 65 20 76 61 6c 75 65 20 69 74 73 65 6c 66  the value itself
35220 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20   is not..       
35230 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
35240 20 20 20 20 20 20 20 20 20 6e 65 65 64 65 64 20           needed 
35250 75 6e 74 69 6c 20 6d 75 63 68 20 6c 61 74 65 72  until much later
35260 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
35270 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
35280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35290 2f 2f 20 20 20 20 20 20 20 32 2e 20 53 69 6e 63  //       2. Sinc
352a0 65 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 63  e the value is c
352b0 61 63 68 65 64 2c 20 69 74 20 70 72 65 76 65 6e  ached, it preven
352c0 74 73 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 20  ts an..         
352d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
352e0 20 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e         exception
352f0 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 68 72 6f   from being thro
35300 77 6e 20 6d 75 63 68 20 6c 61 74 65 72 20 64 75  wn much later du
35310 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ring..          
35320 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
35330 20 20 20 20 20 20 74 68 65 20 69 6e 73 74 61 6c        the instal
35340 6c 20 77 68 65 6e 20 74 68 65 20 76 61 6c 75 65  l when the value
35350 20 69 73 20 71 75 65 72 69 65 64 20 61 67 61 69   is queried agai
35360 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
35370 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
35380 20 20 20 28 69 2e 65 2e 20 77 69 74 68 20 74 68     (i.e. with th
35390 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
353a0 20 74 68 65 20 22 77 6f 77 36 34 22 0d 0a 20 20   the "wow64"..  
353b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353c0 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 70 61    //          pa
353d0 72 61 6d 65 74 65 72 29 2e 0d 0a 20 20 20 20 20  rameter)...     
353e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
353f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
35400 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
35410 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
35420 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
35430 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
35440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35450 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
35460 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
35470 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
35480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35490 20 20 20 20 20 20 22 53 79 73 74 65 6d 20 64 69        "System di
354a0 72 65 63 74 6f 72 79 20 69 73 20 7b 30 7d 2e 22  rectory is {0}."
354b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
354c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354d0 20 20 20 20 20 20 20 47 65 74 53 79 73 74 65 6d         GetSystem
354e0 44 69 72 65 63 74 6f 72 79 28 63 6f 6e 66 69 67  Directory(config
354f0 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 29 29 29  uration.Wow64)))
35500 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35510 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
35520 43 61 74 65 67 6f 72 79 29 3b 20 2f 2a 20 74 68  Category); /* th
35530 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
35540 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
35550 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
35560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
35570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
355a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
355b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355c0 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72   #region .NET Fr
355d0 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73 75 61 6c  amework / Visual
355e0 20 53 74 75 64 69 6f 20 44 61 74 61 0d 0a 20 20   Studio Data..  
355f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35600 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
35610 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
35620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
35630 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61  rameworkList fra
35640 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 75 6c  meworkList = nul
35650 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
35660 20 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76          VsList v
35670 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  sList = null;...
35680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35690 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
356a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
356e0 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69          Initiali
356f0 7a 65 56 73 50 61 63 6b 61 67 65 28 64 65 73 69  zeVsPackage(desi
35700 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
35710 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35720 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
35730 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
35740 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
35750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35760 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 47 6c 6f  InstallFlags.Glo
35770 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
35780 2c 20 74 72 75 65 29 20 26 26 0d 0a 20 20 20 20  , true) &&..    
35790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357a0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
357b0 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
357c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357d0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
357e0 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67 65 47  Flags.VsPackageG
357f0 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
35800 68 65 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20 20  he, true),..    
35810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35820 20 20 20 20 72 65 66 20 70 61 63 6b 61 67 65 29      ref package)
35830 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35840 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
35850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35880 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
35890 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74              Init
358a0 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c  ializeFrameworkL
358b0 69 73 74 28 72 65 67 69 73 74 72 79 2e 4c 6f 63  ist(registry.Loc
358c0 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a 20 20 20 20  alMachine,..    
358d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
358f0 6e 2c 20 72 65 66 20 66 72 61 6d 65 77 6f 72 6b  n, ref framework
35900 4c 69 73 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  List);....      
35910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
35920 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 63  itializeVsList(c
35930 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 50 65 72  onfiguration.Per
35940 55 73 65 72 20 3f 0d 0a 20 20 20 20 20 20 20 20  User ?..        
35950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35960 72 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74  registry.Current
35970 55 73 65 72 20 3a 20 72 65 67 69 73 74 72 79 2e  User : registry.
35980 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a 20  LocalMachine,.. 
35990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359a0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
359b0 74 69 6f 6e 2c 20 72 65 66 20 76 73 4c 69 73 74  tion, ref vsList
359c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
359d0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
359e0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
359f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
35a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a30 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
35a40 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
35a50 67 69 6f 6e 20 53 68 61 72 65 64 20 43 6c 69 65  gion Shared Clie
35a60 6e 74 20 44 61 74 61 20 43 72 65 61 74 69 6f 6e  nt Data Creation
35a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35a80 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64 69 72        object dir
35a90 65 63 74 6f 72 79 44 61 74 61 20 3d 20 6e 65 77  ectoryData = new
35aa0 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
35ab0 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20   bool>(..       
35ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ad0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
35ae0 69 72 65 63 74 6f 72 79 2c 20 63 6f 6e 66 69 67  irectory, config
35af0 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29  uration.Install)
35b00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35b10 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
35b20 66 69 6c 65 4e 61 6d 65 44 61 74 61 20 3d 20 6e  fileNameData = n
35b30 65 77 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  ew AnyPair<strin
35b40 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20  g, bool>(..     
35b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b60 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
35b70 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .DesignerFileNam
35b80 65 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  e, configuration
35b90 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 20 20 20 20  .Install);..    
35ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bb0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
35bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bd0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
35be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
35c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35c20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45       #region .NE
35c30 54 20 47 41 43 20 49 6e 73 74 61 6c 6c 2f 52 65  T GAC Install/Re
35c40 6d 6f 76 65 0d 0a 20 20 20 20 20 20 20 20 20 20  move..          
35c50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
35c60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46  nfiguration.HasF
35c70 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  lags(..         
35c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c90 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e     InstallFlags.
35ca0 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
35cb0 63 68 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  che, true))..   
35cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35ce0 20 20 20 20 20 20 20 20 20 20 20 20 50 75 62 6c              Publ
35cf0 69 73 68 20 70 75 62 6c 69 73 68 20 3d 20 6e 75  ish publish = nu
35d00 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
35d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
35d20 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
35d30 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
35d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d50 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 20 3d         publish =
35d60 20 6e 65 77 20 50 75 62 6c 69 73 68 28 29 3b 0d   new Publish();.
35d70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35d80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
35d90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73  onfiguration.Ins
35da0 74 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  tall)..         
35db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
35dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
35de0 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
35df0 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
35e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68 72            /* thr
35e20 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
35e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e40 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47         publish.G
35e50 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67  acInstall(config
35e60 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
35e70 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
35e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e90 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
35ea0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
35eb0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
35ec0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
35ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ee0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
35ef0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
35f00 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
35f10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f30 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20     "GacInstall: 
35f40 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b  assemblyPath = {
35f50 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
35f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f70 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
35f80 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43  (configuration.C
35f90 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  oreFileName)),..
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fc0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
35fd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
35ff0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
36000 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
36010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36020 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68             /* th
36030 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
36040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36050 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
36060 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69  GacInstall(confi
36070 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c  guration.LinqFil
36080 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
36090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360a0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
360b0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
360c0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
360d0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
360e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360f0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
36100 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
36110 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
36120 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
36130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36140 20 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a      "GacInstall:
36150 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20   assemblyPath = 
36160 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
36170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36180 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
36190 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
361a0 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  LinqFileName)),.
361b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
361c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
361e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
361f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36200 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
36210 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
36220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36240 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73   InstallFlags.Vs
36250 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73  PackageGlobalAss
36260 65 6d 62 6c 79 43 61 63 68 65 2c 20 74 72 75 65  emblyCache, true
36270 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
36280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
362a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362b0 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
362c0 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20  ation.WhatIf).. 
362d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362f0 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a     /* throw */..
36300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36320 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49      publish.GacI
36330 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61  nstall(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 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
36360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36370 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
36380 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
36390 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
363a0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
363b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
363d0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
363e0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
363f0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
36400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36420 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73  "GacInstall: ass
36430 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22  emblyPath = {0}"
36440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
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 46 6f 72 44 69 73 70 6c 61         ForDispla
36470 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
36480 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
36490 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
364a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
364c0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
364d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
364f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36500 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36510 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
36520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36530 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
36540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36550 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
36560 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
36570 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36590 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
365a0 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67 65  lFlags.VsPackage
365b0 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
365c0 63 68 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  che, true))..   
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 7b 0d 0a 20 20 20 20           {..    
365f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36600 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
36610 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
36620 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
36630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36640 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74              /* t
36650 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
36660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36670 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62               pub
36680 6c 69 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63  lish.GacRemove(c
36690 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73  onfiguration.Des
366a0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d  ignerFileName);.
366b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
366c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366d0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
366e0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
366f0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
36700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36720 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
36730 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
36740 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
36750 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
36760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36770 20 20 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f          "GacRemo
36780 76 65 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68  ve: assemblyPath
36790 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20   = {0}",..      
367a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
367c0 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75  rDisplay(configu
367d0 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46  ration.DesignerF
367e0 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
367f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36810 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
36820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36830 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
36840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
36860 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
36870 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
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 20 2f 2a 20 74 68 72            /* thr
368a0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
368b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368c0 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47         publish.G
368d0 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75  acRemove(configu
368e0 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e  ration.LinqFileN
368f0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
36900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36910 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
36920 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
36930 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
36940 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
36950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36960 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
36970 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
36980 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
36990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
369a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369b0 20 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73    "GacRemove: as
369c0 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d  semblyPath = {0}
369d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
369e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369f0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
36a00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e  onfiguration.Lin
36a10 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  qFileName)),..  
36a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
36a40 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
36a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36a60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
36a70 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
36a80 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  WhatIf)..       
36a90 20 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 2f 2a 20 74 68 72 6f           /* thro
36ab0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
36ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ad0 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61        publish.Ga
36ae0 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72  cRemove(configur
36af0 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61  ation.CoreFileNa
36b00 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
36b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
36b30 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
36b40 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
36b50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b70 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
36b80 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
36b90 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
36ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bc0 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73   "GacRemove: ass
36bd0 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22  emblyPath = {0}"
36be0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c00 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f     ForDisplay(co
36c10 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65  nfiguration.Core
36c20 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
36c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
36c50 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
36c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
36c80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
36c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ca0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
36cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36cc0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
36cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
36d10 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
36d20 20 2e 4e 45 54 20 41 73 73 65 6d 62 6c 79 46 6f   .NET AssemblyFo
36d30 6c 64 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  lders..         
36d40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
36d50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
36d60 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20  Flags(..        
36d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d80 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
36d90 2e 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  .AssemblyFolders
36da0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
36db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
36dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36dd0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f           if (!Fo
36de0 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65  rEachFrameworkRe
36df0 67 69 73 74 72 79 28 72 65 67 69 73 74 72 79 2c  gistry(registry,
36e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c    frameworkList,
36e30 20 50 72 6f 63 65 73 73 41 73 73 65 6d 62 6c 79   ProcessAssembly
36e40 46 6f 6c 64 65 72 73 2c 0d 0a 20 20 20 20 20 20  Folders,..      
36e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e60 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
36e70 75 72 61 74 69 6f 6e 2e 52 65 67 69 73 74 72 79  uration.Registry
36e80 56 65 72 73 69 6f 6e 2c 20 64 69 72 65 63 74 6f  Version, directo
36e90 72 79 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ryData,..       
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 4e 65 74 46 78 49 73           NetFxIs
36ec0 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e  32BitOnly || con
36ed0 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34  figuration.Wow64
36ee0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f00 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
36f10 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c  .ThrowOnMissing,
36f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f40 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
36f50 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72  WhatIf, configur
36f60 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a  ation.Verbose,..
36f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f90 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
36fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fd0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f      TraceOps.Sho
36fe0 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72  wMessage(TracePr
36ff0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
37000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37020 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
37030 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74  traceCallback, t
37040 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  hisAssembly,..  
37050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
37070 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ror, traceCatego
37080 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75  ry, MessageBoxBu
37090 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20  ttons.OK,..     
370a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370b0 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
370c0 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29  geBoxIcon.Error)
370d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
370e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
37100 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
37110 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
37120 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37140 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
37150 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
37160 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20   "Failure.",..  
37170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
37190 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
371a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
371b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
371c0 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52  urn 1; /* FAILUR
371d0 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  E */..          
371e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
371f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37200 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
37210 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
37220 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
37230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
37240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37270 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
37280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37290 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62   #region .NET Db
372a0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 0d  ProviderFactory.
372b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
372c0 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
372d0 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
372e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
372f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
37300 73 74 61 6c 6c 46 6c 61 67 73 2e 44 62 50 72 6f  stallFlags.DbPro
37310 76 69 64 65 72 46 61 63 74 6f 72 79 2c 20 74 72  viderFactory, tr
37320 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
37330 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
37340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37350 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 20       bool saved 
37360 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
37370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37380 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
37390 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28  FrameworkConfig(
373a0 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
373b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373c0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
373d0 77 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73  workList, Proces
373e0 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
373f0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
37400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37410 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
37420 6f 6e 2e 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e  on.ConfigVersion
37430 2c 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c  , InvariantName,
37440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37460 20 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 2c 20    ProviderName, 
37470 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 46 61 63  Description, Fac
37480 74 6f 72 79 54 79 70 65 4e 61 6d 65 2c 0d 0a 20  toryTypeName,.. 
37490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
374b0 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  oreAssemblyName,
374c0 20 64 69 72 65 63 74 6f 72 79 44 61 74 61 2c 0d   directoryData,.
374d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
374e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374f0 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c   NetFxIs32BitOnl
37500 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74 69  y || configurati
37510 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20  on.Wow64,..     
37520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37530 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
37540 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e  guration.ThrowOn
37550 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
37560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37570 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
37580 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20  uration.WhatIf, 
37590 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65  configuration.Ve
375a0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
375b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375c0 20 20 20 20 20 20 20 20 72 65 66 20 73 61 76 65          ref save
375d0 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  d, ref error))..
375e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37610 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
37620 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63  ShowMessage(Trac
37630 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
37640 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
37650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37660 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
37670 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
37680 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d  , thisAssembly,.
37690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
376a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376b0 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
376c0 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
376d0 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20  xButtons.OK,..  
376e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
37700 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72  ssageBoxIcon.Err
37710 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
37720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37730 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
37740 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
37750 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
37760 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
37770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37780 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
37790 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
377a0 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d  ck, "Failure.",.
377b0 0a 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 20 20 20                  
377d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
377e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
377f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37800 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49  return 1; /* FAI
37810 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20  LURE */..       
37820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37830 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
37840 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
37850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
37860 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
37870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37880 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
37890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
378c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378d0 20 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20 50      #region VS P
378e0 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20  ackage..        
378f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
37900 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
37910 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20  sFlags(..       
37920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37930 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
37940 73 2e 56 73 50 61 63 6b 61 67 65 2c 20 74 72 75  s.VsPackage, tru
37950 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
37960 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37980 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
37990 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72  VsVersionRegistr
379a0 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y(registry,..   
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 76 73 4c               vsL
379d0 69 73 74 2c 20 50 72 6f 63 65 73 73 56 73 50 61  ist, ProcessVsPa
379e0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
379f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a00 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
37a10 61 74 69 6f 6e 2e 56 73 56 65 72 73 69 6f 6e 53  ation.VsVersionS
37a20 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 0d  uffix, package,.
37a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a50 20 66 69 6c 65 4e 61 6d 65 44 61 74 61 2c 0d 0a   fileNameData,..
37a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a80 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c  VsIs32BitOnly ||
37a90 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57   configuration.W
37aa0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
37ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ac0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
37ad0 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73  tion.ThrowOnMiss
37ae0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
37af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b00 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
37b10 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66  ion.WhatIf, conf
37b20 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
37b30 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
37b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b50 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d      ref error)).
37b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37b70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b90 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
37ba0 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61  .ShowMessage(Tra
37bb0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
37bc0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
37bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37be0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
37bf0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
37c00 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  k, thisAssembly,
37c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c30 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61    error, traceCa
37c40 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42  tegory, MessageB
37c50 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20  oxButtons.OK,.. 
37c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
37c80 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72  essageBoxIcon.Er
37c90 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
37ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cb0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
37cc0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
37cd0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
37ce0 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
37cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d00 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
37d10 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
37d20 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c  ack, "Failure.",
37d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d50 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
37d60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d80 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41   return 1; /* FA
37d90 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20  ILURE */..      
37da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37db0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
37dc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
37dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37de0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
37df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
37e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
37e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37e50 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20       #region VS 
37e60 44 61 74 61 53 6f 75 72 63 65 0d 0a 20 20 20 20  DataSource..    
37e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e80 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
37e90 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
37ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37eb0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
37ec0 46 6c 61 67 73 2e 56 73 44 61 74 61 53 6f 75 72  Flags.VsDataSour
37ed0 63 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20  ce, true))..    
37ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ef0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
37f00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
37f10 46 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e  ForEachVsVersion
37f20 52 65 67 69 73 74 72 79 28 72 65 67 69 73 74 72  Registry(registr
37f30 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
37f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f50 20 20 20 20 76 73 4c 69 73 74 2c 20 50 72 6f 63      vsList, Proc
37f60 65 73 73 56 73 44 61 74 61 53 6f 75 72 63 65 2c  essVsDataSource,
37f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f90 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
37fa0 56 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 2c  VsVersionSuffix,
37fb0 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
37fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fd0 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
37fe0 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  ameData,..      
37ff0 20 20 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 56 73 49 73 33 32            VsIs32
38010 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69  BitOnly || confi
38020 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d  guration.Wow64,.
38030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38050 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54   configuration.T
38060 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
38070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38090 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
380a0 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74  atIf, configurat
380b0 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20  ion.Verbose,..  
380c0 20 20 20 20 20 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 72 65                re
380e0 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
380f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38100 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
38110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38120 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
38130 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
38140 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
38150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
38170 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
38180 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
38190 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
381a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
381c0 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
381d0 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
381e0 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
381f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38200 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
38210 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
38220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
38230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
38240 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
38250 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
38260 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
38270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38290 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
382a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22  traceCallback, "
382b0 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20  Failure.",..    
382c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
382e0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
382f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38300 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
38310 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
38320 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
38330 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
38340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38350 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
38360 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
38370 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
38380 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
38390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
383a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
383b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
383c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
383d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
383e0 72 65 67 69 6f 6e 20 56 53 20 44 61 74 61 50 72  region VS DataPr
383f0 6f 76 69 64 65 72 0d 0a 20 20 20 20 20 20 20 20  ovider..        
38400 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
38410 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
38420 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20  sFlags(..       
38430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38440 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
38450 73 2e 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  s.VsDataProvider
38460 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
38470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
38480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38490 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f           if (!Fo
384a0 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65  rEachVsVersionRe
384b0 67 69 73 74 72 79 28 72 65 67 69 73 74 72 79 2c  gistry(registry,
384c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
384d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384e0 20 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73    vsList, Proces
384f0 73 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c  sVsDataProvider,
38500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38520 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
38530 56 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 2c  VsVersionSuffix,
38540 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
38550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38560 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
38570 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  ameData,..      
38580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38590 20 20 20 20 20 20 20 20 20 20 56 73 49 73 33 32            VsIs32
385a0 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69  BitOnly || confi
385b0 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d  guration.Wow64,.
385c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
385d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385e0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54   configuration.T
385f0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
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 20 20 20 20 20                  
38620 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
38630 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74  atIf, configurat
38640 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20  ion.Verbose,..  
38650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
38670 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
38680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38690 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
386a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386b0 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
386c0 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
386d0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
386e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
38700 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
38710 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
38720 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
38730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38740 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
38750 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
38760 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
38770 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
38780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38790 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
387a0 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
387b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
387c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
387d0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
387e0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
387f0 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
38800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38820 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
38830 74 72 61 63 6