System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact f4872abbec92abd13bfa44620414c82f0fab8c30:


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: 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20 20  perUser,        
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 77 6f 77          bool wow
0500: 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  64,             
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 74 68 72 6f 77 4f       bool throwO
0530: 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20  nMissing,       
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 77 68 61 74 49 66 2c 20 20    bool whatIf,  
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 62  in */..        b
0580: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20  ool verbose,    
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  */..        ref 
05b0: 62 6f 6f 6c 20 73 61 76 65 64 2c 20 20 20 20 20  bool saved,     
05c0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f         /* out */
05d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74  ..        ref st
05e0: 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20 20  ring error      
05f0: 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
0600: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f  ////////////////
0630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0660: 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61   internal delega
0670: 74 65 20 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72  te bool Framewor
0680: 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63  kRegistryCallbac
0690: 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74  k(..        Inst
06a0: 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74  aller.MockRegist
06b0: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f  ryKey rootKey, /
06c0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
06d0: 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
06e0: 6b 4e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20  kName,          
06f0: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
0700: 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
0710: 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
0720: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0730: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0740: 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  g platformName, 
0750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0760: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0770: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
0780: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
0790: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
07a0: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
07b0: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
07c0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
07d0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
07e0: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20  ow64,           
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0800: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0810: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0820: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
0830: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0840: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0860: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0870: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
0880: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20  rbose,          
0890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
08a0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  n */..        re
08b0: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08d0: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
08e0: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  );....    //////
08f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0930: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74  /////....    int
0940: 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62  ernal delegate b
0950: 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64 69 6f  ool VisualStudio
0960: 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b  RegistryCallback
0970: 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61  (..        Insta
0980: 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72  ller.MockRegistr
0990: 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a  yKey rootKey, /*
09a0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
09b0: 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
09c0: 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n,              
09d0: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
09e0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
09f0: 69 78 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ix,             
0a00: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c 20 6f          /* in, o
0a10: 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20 20 20  ptional */..    
0a20: 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 50 61      Installer.Pa
0a30: 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 20 20  ckage package,  
0a40: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0a50: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
0a60: 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20  clientData,     
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0a80: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f  n */..        bo
0a90: 6f 6c 20 70 65 72 55 73 65 72 2c 20 20 20 20 20  ol perUser,     
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ab0: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0ac0: 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 20 20     bool wow64,  
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ae0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0af0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
0b00: 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20  owOnMissing,    
0b10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0b20: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
0b30: 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20 20 20  l whatIf,       
0b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b50: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0b60: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20    bool verbose, 
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b80: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0b90: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
0ba0: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
0bb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
0bc0: 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 20 20 20   */..    );..   
0bd0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
0be0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0c30: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75  ..    #region Pu
0c40: 62 6c 69 63 20 45 6e 75 6d 65 72 61 74 69 6f 6e  blic Enumeration
0c50: 73 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d  s..    [Flags()]
0c60: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75  ..    public enu
0c70: 6d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a  m InstallFlags..
0c80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
0c90: 72 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 46 6c  region Normal Fl
0ca0: 61 67 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e  ags..        Non
0cb0: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
0cc0: 20 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79    GlobalAssembly
0cd0: 43 61 63 68 65 20 3d 20 30 78 31 2c 0d 0a 20 20  Cache = 0x1,..  
0ce0: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 46 6f        AssemblyFo
0cf0: 6c 64 65 72 73 20 3d 20 30 78 32 2c 0d 0a 20 20  lders = 0x2,..  
0d00: 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 72        DbProvider
0d10: 46 61 63 74 6f 72 79 20 3d 20 30 78 34 2c 0d 0a  Factory = 0x4,..
0d20: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67          VsPackag
0d30: 65 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20  e = 0x8,..      
0d40: 20 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61    VsPackageGloba
0d50: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d  lAssemblyCache =
0d60: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
0d70: 56 73 44 61 74 61 53 6f 75 72 63 65 20 3d 20 30  VsDataSource = 0
0d80: 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73  x20,..        Vs
0d90: 44 61 74 61 50 72 6f 76 69 64 65 72 20 3d 20 30  DataProvider = 0
0da0: 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65  x40,..        #e
0db0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
0dc0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0e10: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43         #region C
0e20: 6f 6d 70 6f 73 69 74 65 20 46 6c 61 67 73 0d 0a  omposite Flags..
0e30: 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
0e40: 6b 20 3d 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62  k = GlobalAssemb
0e50: 6c 79 43 61 63 68 65 20 7c 20 41 73 73 65 6d 62  lyCache | Assemb
0e60: 6c 79 46 6f 6c 64 65 72 73 20 7c 0d 0a 20 20 20  lyFolders |..   
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e80: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
0e90: 72 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ry,....        /
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0ef0: 20 20 56 73 20 3d 20 56 73 50 61 63 6b 61 67 65    Vs = VsPackage
0f00: 20 7c 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62   | VsPackageGlob
0f10: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0f20: 7c 20 56 73 44 61 74 61 53 6f 75 72 63 65 20 7c  | VsDataSource |
0f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 56  ..             V
0f40: 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c 0d 0a  sDataProvider,..
0f50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fa0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c  /....        All
0fb0: 20 3d 20 46 72 61 6d 65 77 6f 72 6b 20 7c 20 56   = Framework | V
0fc0: 73 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s,....        //
0fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1010: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1020: 20 41 6c 6c 45 78 63 65 70 74 47 6c 6f 62 61 6c   AllExceptGlobal
1030: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20  AssemblyCache = 
1040: 41 6c 6c 20 26 20 7e 28 47 6c 6f 62 61 6c 41 73  All & ~(GlobalAs
1050: 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d 0a 20  semblyCache |.. 
1060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1080: 20 20 20 20 20 20 56 73 50 61 63 6b 61 67 65 47        VsPackageG
1090: 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
10a0: 68 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 65  he),..        #e
10b0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
10c0: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1110: 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d         Default =
1120: 20 41 6c 6c 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   All..    }.... 
1130: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1180: 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d  ..    [Flags()].
1190: 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  .    public enum
11a0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a   TracePriority..
11b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 4e      {..        N
11c0: 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20  one = 0x0,..    
11d0: 20 20 20 20 4c 6f 77 65 73 74 20 3d 20 30 78 31      Lowest = 0x1
11e0: 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 72  ,..        Lower
11f0: 20 3d 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20   = 0x2,..       
1200: 20 4c 6f 77 20 3d 20 30 78 34 2c 0d 0a 20 20 20   Low = 0x4,..   
1210: 20 20 20 20 20 4d 65 64 69 75 6d 4c 6f 77 20 3d       MediumLow =
1220: 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 4d   0x8,..        M
1230: 65 64 69 75 6d 20 3d 20 30 78 31 30 2c 0d 0a 20  edium = 0x10,.. 
1240: 20 20 20 20 20 20 20 4d 65 64 69 75 6d 48 69 67         MediumHig
1250: 68 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20  h = 0x20,..     
1260: 20 20 20 48 69 67 68 20 3d 20 30 78 34 30 2c 0d     High = 0x40,.
1270: 0a 20 20 20 20 20 20 20 20 48 69 67 68 65 72 20  .        Higher 
1280: 3d 20 30 78 38 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x80,..       
1290: 20 48 69 67 68 65 73 74 20 3d 20 30 78 31 30 30   Highest = 0x100
12a0: 2c 0d 0a 20 20 20 20 20 20 20 20 44 65 66 61 75  ,..        Defau
12b0: 6c 74 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20  lt = Medium..   
12c0: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
12d0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
1330: 67 69 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43  gion Installer C
1340: 6c 61 73 73 0d 0a 23 69 66 20 4e 45 54 5f 34 30  lass..#if NET_40
1350: 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45   || NET_45 || NE
1360: 54 5f 34 35 31 0d 0a 20 20 20 20 5b 53 65 63 75  T_451..    [Secu
1370: 72 69 74 79 43 72 69 74 69 63 61 6c 28 29 5d 0d  rityCritical()].
1380: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 5b 53 65 63  .#else..    [Sec
1390: 75 72 69 74 79 50 65 72 6d 69 73 73 69 6f 6e 28  urityPermission(
13a0: 53 65 63 75 72 69 74 79 41 63 74 69 6f 6e 2e 4c  SecurityAction.L
13b0: 69 6e 6b 44 65 6d 61 6e 64 2c 20 55 6e 6d 61 6e  inkDemand, Unman
13c0: 61 67 65 64 43 6f 64 65 20 3d 20 74 72 75 65 29  agedCode = true)
13d0: 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 69  ]..#endif..    i
13e0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63  nternal static c
13f0: 6c 61 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d 0a  lass Installer..
1400: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
1410: 72 65 67 69 6f 6e 20 55 6e 73 61 66 65 20 4e 61  region Unsafe Na
1420: 74 69 76 65 20 4d 65 74 68 6f 64 73 20 43 6c 61  tive Methods Cla
1430: 73 73 0d 0a 20 20 20 20 20 20 20 20 5b 53 75 70  ss..        [Sup
1440: 70 72 65 73 73 55 6e 6d 61 6e 61 67 65 64 43 6f  pressUnmanagedCo
1450: 64 65 53 65 63 75 72 69 74 79 28 29 5d 0d 0a 20  deSecurity()].. 
1460: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1470: 65 61 6c 65 64 20 63 6c 61 73 73 20 55 6e 73 61  ealed class Unsa
1480: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 0d  feNativeMethods.
1490: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
14a0: 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20  WINDOWS..       
14b0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74       #region Nat
14c0: 69 76 65 20 57 69 6e 33 32 20 43 6f 6e 73 74 61  ive Win32 Consta
14d0: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
14e0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
14f0: 6e 74 20 4d 41 58 5f 50 41 54 48 20 3d 20 32 36  nt MAX_PATH = 26
1500: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
1510: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1560: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1570: 73 74 20 69 6e 74 20 43 53 49 44 4c 5f 53 59 53  st int CSIDL_SYS
1580: 54 45 4d 58 38 36 20 3d 20 30 78 30 30 32 39 3b  TEMX86 = 0x0029;
1590: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
15f0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1600: 20 69 6e 74 20 53 48 47 46 50 5f 54 59 50 45 5f   int SHGFP_TYPE_
1610: 43 55 52 52 45 4e 54 20 3d 20 30 3b 0d 0a 0d 0a  CURRENT = 0;....
1620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 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 0d  ///////////////.
1670: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1680: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
1690: 20 53 5f 4f 4b 20 3d 20 30 3b 20 2f 2a 20 48 52   S_OK = 0; /* HR
16a0: 45 53 55 4c 54 20 2a 2f 0d 0a 20 20 20 20 20 20  ESULT */..      
16b0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
16c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1720: 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76     #region Nativ
1730: 65 20 57 69 6e 64 6f 77 73 20 4d 65 74 68 6f 64  e Windows Method
1740: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  s..            [
1750: 44 6c 6c 49 6d 70 6f 72 74 28 22 73 68 66 6f 6c  DllImport("shfol
1760: 64 65 72 2e 64 6c 6c 22 2c 0d 0a 20 20 20 20 20  der.dll",..     
1770: 20 20 20 20 20 20 20 20 20 20 20 43 61 6c 6c 69             Calli
1780: 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 20 3d 20 43  ngConvention = C
1790: 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e  allingConvention
17a0: 2e 57 69 6e 61 70 69 2c 0d 0a 20 20 20 20 20 20  .Winapi,..      
17b0: 20 20 20 20 20 20 20 20 20 20 43 68 61 72 53 65            CharSe
17c0: 74 20 3d 20 43 68 61 72 53 65 74 2e 41 75 74 6f  t = CharSet.Auto
17d0: 2c 20 42 65 73 74 46 69 74 4d 61 70 70 69 6e 67  , BestFitMapping
17e0: 20 3d 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20   = false,..     
17f0: 20 20 20 20 20 20 20 20 20 20 20 54 68 72 6f 77             Throw
1800: 4f 6e 55 6e 6d 61 70 70 61 62 6c 65 43 68 61 72  OnUnmappableChar
1810: 20 3d 20 74 72 75 65 2c 20 53 65 74 4c 61 73 74   = true, SetLast
1820: 45 72 72 6f 72 20 3d 20 74 72 75 65 29 5d 0d 0a  Error = true)]..
1830: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1840: 61 74 65 20 73 74 61 74 69 63 20 65 78 74 65 72  ate static exter
1850: 6e 20 69 6e 74 20 53 48 47 65 74 46 6f 6c 64 65  n int SHGetFolde
1860: 72 50 61 74 68 28 0d 0a 20 20 20 20 20 20 20 20  rPath(..        
1870: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
1880: 57 6e 64 4f 77 6e 65 72 2c 20 69 6e 74 20 6e 46  WndOwner, int nF
1890: 6f 6c 64 65 72 2c 20 49 6e 74 50 74 72 20 68 54  older, IntPtr hT
18a0: 6f 6b 65 6e 2c 20 75 69 6e 74 20 66 6c 61 67 73  oken, uint flags
18b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18c0: 20 20 20 49 6e 74 50 74 72 20 62 75 66 66 65 72     IntPtr buffer
18d0: 20 2f 2a 20 3e 3d 20 4d 41 58 5f 50 41 54 48 20   /* >= MAX_PATH 
18e0: 2a 2f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  */);..          
18f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1950: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1960: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 57 72  region Public Wr
1970: 61 70 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  apper Methods.. 
1980: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1990: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
19a0: 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f  GetSystemDirecto
19b0: 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry()..          
19c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19d0: 20 20 20 20 20 49 6e 74 50 74 72 20 62 75 66 66       IntPtr buff
19e0: 65 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  er = IntPtr.Zero
19f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a00: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1a10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a30: 20 62 75 66 66 65 72 20 3d 20 4d 61 72 73 68 61   buffer = Marsha
1a40: 6c 2e 41 6c 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d  l.AllocCoTaskMem
1a50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a60: 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
1a70: 66 28 63 68 61 72 29 20 2a 20 28 4d 41 58 5f 50  f(char) * (MAX_P
1a80: 41 54 48 20 2b 20 31 29 29 3b 0d 0a 0d 0a 20 20  ATH + 1));....  
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa0: 20 20 69 66 20 28 62 75 66 66 65 72 20 21 3d 20    if (buffer != 
1ab0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1af0: 28 53 48 47 65 74 46 6f 6c 64 65 72 50 61 74 68  (SHGetFolderPath
1b00: 28 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20  (IntPtr.Zero,.. 
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 20 20 20 20 20 20 43                 C
1b30: 53 49 44 4c 5f 53 59 53 54 45 4d 58 38 36 2c 20  SIDL_SYSTEMX86, 
1b40: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20  IntPtr.Zero,..  
1b50: 20 20 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 20 20 20 20 53 48                SH
1b70: 47 46 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54  GFP_TYPE_CURRENT
1b80: 2c 20 62 75 66 66 65 72 29 20 3d 3d 20 53 5f 4f  , buffer) == S_O
1b90: 4b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K)..            
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1bd0: 6e 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53  n Marshal.PtrToS
1be0: 74 72 69 6e 67 41 75 74 6f 28 62 75 66 66 65 72  tringAuto(buffer
1bf0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1c40: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
1c50: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c80: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1ca0: 54 4f 44 4f 3a 20 49 73 20 74 68 69 73 20 74 68  TODO: Is this th
1cb0: 65 20 72 69 67 68 74 20 65 72 72 6f 72 20 68 61  e right error ha
1cc0: 6e 64 6c 69 6e 67 20 73 6f 6c 75 74 69 6f 6e 0d  ndling solution.
1cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
1cf0: 20 75 73 65 20 61 74 20 74 68 69 73 20 70 6f 69   use at this poi
1d00: 6e 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt?..           
1d10: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d30: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1d40: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1d50: 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
1d60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d70: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1d80: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1d90: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1da0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 20 22 43 6f 75 6c 64 20 6e 6f 74 20 67 65 74 20   "Could not get 
1dd0: 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79  system directory
1de0: 3a 20 7b 30 7d 22 2c 20 65 29 2c 0d 0a 20 20 20  : {0}", e),..   
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e00: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1e10: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1e30: 77 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w;..            
1e40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1e50: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e80: 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66 65         if (buffe
1e90: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
1ea0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1eb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed0: 20 20 4d 61 72 73 68 61 6c 2e 46 72 65 65 43 6f    Marshal.FreeCo
1ee0: 54 61 73 6b 4d 65 6d 28 62 75 66 66 65 72 29 3b  TaskMem(buffer);
1ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f00: 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72            buffer
1f10: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1f40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1f60: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
1f70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1f80: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1f90: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1fa0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
1fb0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1fc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2010: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
2020: 69 76 61 74 65 20 48 65 6c 70 65 72 20 43 6c 61  ivate Helper Cla
2030: 73 73 65 73 0d 0a 20 20 20 20 20 20 20 20 23 72  sses..        #r
2040: 65 67 69 6f 6e 20 41 6e 79 50 61 69 72 20 43 6c  egion AnyPair Cl
2050: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
2060: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
2070: 73 20 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32  s AnyPair<T1, T2
2080: 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  >..        {..  
2090: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
20a0: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
20b0: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
20c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
20d0: 20 20 20 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54     // WARNING: T
20e0: 68 69 73 20 63 6f 6e 73 74 72 75 63 74 6f 72 20  his constructor 
20f0: 70 72 6f 64 75 63 65 73 20 61 6e 20 69 6d 6d 75  produces an immu
2100: 74 61 62 6c 65 20 22 65 6d 70 74 79 22 20 70 61  table "empty" pa
2110: 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ir..            
2120: 2f 2f 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  //          obje
2130: 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct...           
2140: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2150: 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28   public AnyPair(
2160: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2170: 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20     : base()..   
2180: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2190: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
21a0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
21b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
21d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f0: 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
2210: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2220: 69 63 20 41 6e 79 50 61 69 72 28 54 31 20 78 29  ic AnyPair(T1 x)
2230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2240: 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20    : this()..    
2250: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2260: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
2270: 78 20 3d 20 78 3b 0d 0a 20 20 20 20 20 20 20 20  x = x;..        
2280: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2290: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
22f0: 6e 79 50 61 69 72 28 54 31 20 78 2c 20 54 32 20  nyPair(T1 x, T2 
2300: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
2310: 20 20 20 20 3a 20 74 68 69 73 28 78 29 0d 0a 20      : this(x).. 
2320: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
2340: 69 73 2e 79 20 3d 20 79 3b 0d 0a 20 20 20 20 20  is.y = y;..     
2350: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2360: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2370: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
23d0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
23e0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
23f0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2400: 65 20 54 31 20 78 3b 0d 0a 20 20 20 20 20 20 20  e T1 x;..       
2410: 20 20 20 20 20 70 75 62 6c 69 63 20 54 31 20 58       public T1 X
2420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2440: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 78 3b   get { return x;
2450: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2460: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2470: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24c0: 20 20 20 20 70 72 69 76 61 74 65 20 54 32 20 79      private T2 y
24d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
24e0: 75 62 6c 69 63 20 54 32 20 59 0d 0a 20 20 20 20  ublic T2 Y..    
24f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2500: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2510: 20 72 65 74 75 72 6e 20 79 3b 20 7d 0d 0a 20 20   return y; }..  
2520: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2530: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2540: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
2550: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2560: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25c0: 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65 4f 70   #region TraceOp
25d0: 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  s Class..       
25e0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
25f0: 63 6c 61 73 73 20 54 72 61 63 65 4f 70 73 0d 0a  class TraceOps..
2600: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2610: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2620: 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73  rivate Constants
2630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2640: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
2650: 6e 67 20 44 65 66 61 75 6c 74 44 65 62 75 67 46  ng DefaultDebugF
2660: 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20 40 20  ormat = "#{0} @ 
2670: 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20 20 20  {1}: {2}";..    
2680: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2690: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66  const string Def
26a0: 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 20  aultTraceFormat 
26b0: 3d 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b  = "#{0} @ {1}: {
26c0: 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2}";....        
26d0: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
26e0: 74 20 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31  t string Iso8601
26f0: 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f  DateTimeOutputFo
2700: 72 6d 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  rmat =..        
2710: 20 20 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d          "yyyy.MM
2720: 2e 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66  .ddTHH:mm:ss.fff
2730: 66 66 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20  ffff";..        
2740: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
27b0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
27c0: 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20   Static Data..  
27d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
27e0: 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  e static object 
27f0: 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f  syncRoot = new o
2800: 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20  bject();..      
2810: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2820: 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65  atic long nextDe
2830: 62 75 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  bugId;..        
2840: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2850: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63  ic long nextTrac
2860: 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eId;..          
2870: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2880: 20 49 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74   IList<TraceList
2890: 65 6e 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65  ener> debugListe
28a0: 6e 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ners;..         
28b0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28c0: 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  c TracePriority 
28d0: 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  debugPriority = 
28e0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65  TracePriority.De
28f0: 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  fault;..        
2900: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2910: 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ic TracePriority
2920: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d   tracePriority =
2930: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44   TracePriority.D
2940: 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  efault;..       
2950: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2960: 74 69 63 20 73 74 72 69 6e 67 20 64 65 62 75 67  tic string debug
2970: 46 6f 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74  Format = Default
2980: 44 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  DebugFormat;..  
2990: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
29a0: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
29b0: 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65  traceFormat = De
29c0: 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74  faultTraceFormat
29d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
29e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
29f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2a50: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
2a60: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
2a70: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2a80: 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69   static TracePri
2a90: 6f 72 69 74 79 20 44 65 62 75 67 50 72 69 6f 72  ority DebugPrior
2aa0: 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
2ab0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ac0: 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28      get { lock (
2ad0: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75  syncRoot) { retu
2ae0: 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74 79  rn debugPriority
2af0: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
2b00: 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63         set { loc
2b10: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64  k (syncRoot) { d
2b20: 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76  ebugPriority = v
2b30: 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  alue; } }..     
2b40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b50: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2ba0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2bb0: 63 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72  c static TracePr
2bc0: 69 6f 72 69 74 79 20 54 72 61 63 65 50 72 69 6f  iority TracePrio
2bd0: 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
2be0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2bf0: 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20       get { lock 
2c00: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74  (syncRoot) { ret
2c10: 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74  urn tracePriorit
2c20: 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20  y; } }..        
2c30: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f          set { lo
2c40: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
2c50: 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
2c60: 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20  value; } }..    
2c70: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c80: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2ce0: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
2cf0: 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20   DebugFormat..  
2d00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
2d20: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
2d30: 74 29 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75  t) { return debu
2d40: 67 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20  gFormat; } }..  
2d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2d60: 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f  t { lock (syncRo
2d70: 6f 74 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61  ot) { debugForma
2d80: 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  t = value; } }..
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e00: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
2e10: 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74  ring TraceFormat
2e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e40: 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e   get { lock (syn
2e50: 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20  cRoot) { return 
2e60: 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d  traceFormat; } }
2e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e80: 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    set { lock (sy
2e90: 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46  ncRoot) { traceF
2ea0: 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
2eb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2ec0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2ed0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2ee0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2f40: 69 6f 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20  ion Interactive 
2f50: 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d  Support Methods.
2f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
2f70: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2f80: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2f90: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2fa0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
2fb0: 69 63 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20  ic DialogResult 
2fc0: 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20  ShowMessage(..  
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2fe0: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
2ff0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
3000: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3010: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
3020: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
3030: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
3040: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
3050: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
3060: 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
3070: 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20   assembly,..    
3080: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
3090: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
30b0: 69 6e 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20  ing category,.. 
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
30d0: 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
30e0: 20 62 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20   buttons,..     
30f0: 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
3100: 67 65 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a  geBoxIcon icon..
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3120: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3140: 20 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72    DialogResult r
3150: 65 73 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65  esult = DialogRe
3160: 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20  sult.OK;....    
3170: 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75              Debu
3180: 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50  gAndTrace(traceP
3190: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
31a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
31b0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
31c0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73  ceCallback, mess
31d0: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  age, category);.
31e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31f0: 20 20 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66     if (SystemInf
3200: 6f 72 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74  ormation.UserInt
3210: 65 72 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20  eractive)..     
3220: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3240: 20 20 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d    string title =
3250: 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c   GetAssemblyTitl
3260: 65 28 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a  e(assembly);....
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3280: 20 20 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d      if (title ==
3290: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b0: 74 69 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74  title = Applicat
32c0: 69 6f 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b  ion.ProductName;
32d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32e0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
32f0: 20 4d 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77   MessageBox.Show
3300: 28 6d 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c  (message, title,
3310: 20 62 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b   buttons, icon);
3320: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3330: 20 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64          DebugAnd
3340: 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72  Trace(tracePrior
3350: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
3370: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
3380: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
3390: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b0: 20 20 20 20 22 55 73 65 72 20 63 68 6f 69 63 65      "User choice
33c0: 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69   of {0}.", ForDi
33d0: 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d  splay(result)),.
33e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33f0: 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f 72           categor
3400: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
3410: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3420: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
3430: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3450: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72  DebugAndTrace(tr
3460: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
3490: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
34a0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c0: 20 20 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f      "Default cho
34d0: 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f  ice of {0}.", Fo
34e0: 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29  rDisplay(result)
34f0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
3500: 20 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79          category
3510: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
3520: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
3530: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
3540: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3550: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
3560: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
3570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
35c0: 65 67 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75  egion Tracing Su
35d0: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20  pport Methods.. 
35e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
35f0: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 65  c static void Se
3600: 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72  tupDebugListener
3610: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s()..           
3620: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3630: 20 20 20 20 69 66 20 28 64 65 62 75 67 4c 69 73      if (debugLis
3640: 74 65 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d  teners == null).
3650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3660: 20 20 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e       debugListen
3670: 65 72 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54  ers = new List<T
3680: 72 61 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b  raceListener>();
3690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36a0: 20 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65      debugListene
36b0: 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f  rs.Add(new Conso
36c0: 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28  leTraceListener(
36d0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
36e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3730: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3740: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3750: 69 63 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75  ic long NextDebu
3760: 67 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20  gId()..         
3770: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3780: 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
3790: 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65  erlocked.Increme
37a0: 6e 74 28 72 65 66 20 6e 65 78 74 44 65 62 75 67  nt(ref nextDebug
37b0: 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Id);..          
37c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
37d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
37e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3810: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3820: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3830: 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61  tic long NextTra
3840: 63 65 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20  ceId()..        
3850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3860: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
3870: 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d  terlocked.Increm
3880: 65 6e 74 28 72 65 66 20 6e 65 78 74 54 72 61 63  ent(ref nextTrac
3890: 65 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  eId);..         
38a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
38b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3900: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
3910: 61 74 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65  atic string Time
3920: 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64  Stamp(DateTime d
3930: 61 74 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20  ateTime)..      
3940: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3950: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3960: 64 61 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e  dateTime.ToStrin
3970: 67 28 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d  g(Iso8601DateTim
3980: 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d  eOutputFormat);.
3990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
39a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
3a00: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
3a10: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
3a20: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
3a30: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
3a40: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
3a50: 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20  etMethodName(.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
3a70: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
3a80: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
3a90: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
3aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ab0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
3ac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3ad0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
3ae0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b00: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3b10: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3b20: 20 49 66 20 61 20 76 61 6c 69 64 20 73 74 61 63   If a valid stac
3b30: 6b 20 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20  k trace was not 
3b40: 73 75 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d  supplied by the.
3b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3b60: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
3b70: 6c 6c 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65  ller, create one
3b80: 20 6e 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68   now based on th
3b90: 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20  e current..     
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3bb0: 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 69 6f  /       executio
3bc0: 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20  n stack...      
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3bf0: 20 20 20 20 20 20 69 66 20 28 73 74 61 63 6b 54        if (stackT
3c00: 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  race == null).. 
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3c50: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3c60: 45 3a 20 47 72 61 62 20 74 68 65 20 63 75 72 72  E: Grab the curr
3c70: 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74  ent execution st
3c80: 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ack...          
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3cb0: 20 20 20 20 20 20 20 20 20 20 73 74 61 63 6b 54            stackT
3cc0: 72 61 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b  race = new Stack
3cd0: 54 72 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  Trace();....    
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cf0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20  // NOTE: Always 
3d20: 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66  skip this call f
3d30: 72 61 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70  rame when we cap
3d40: 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ture..          
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3d60: 20 20 20 20 20 20 20 74 68 65 20 73 74 61 63 6b         the stack
3d70: 20 74 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20   trace...       
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d90: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 76               lev
3db0: 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  el++;..         
3dc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3de0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
3e00: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 73 70 65  OTE: Get the spe
3e10: 63 69 66 69 65 64 20 73 74 61 63 6b 20 66 72 61  cified stack fra
3e20: 6d 65 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f  me (always add o
3e30: 6e 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  ne to..         
3e40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
3e50: 20 20 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65      skip this me
3e60: 74 68 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20  thod)...        
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e90: 20 20 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73      StackFrame s
3ea0: 74 61 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63  tackFrame = stac
3eb0: 6b 54 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28  kTrace.GetFrame(
3ec0: 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  level);....     
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3ee0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3ef0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3f00: 47 65 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66  Get the method f
3f10: 6f 72 20 74 68 65 20 73 74 61 63 6b 20 66 72 61  or the stack fra
3f20: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me...           
3f30: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f50: 20 4d 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68   MethodBase meth
3f60: 6f 64 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72  odBase = stackFr
3f70: 61 6d 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b  ame.GetMethod();
3f80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3f90: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fb0: 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65  // NOTE: Get the
3fc0: 20 74 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65   type for the me
3fd0: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
3fe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4000: 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d     Type type = m
4010: 65 74 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72  ethodBase.Declar
4020: 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20  ingType;....    
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4040: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4050: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4060: 20 47 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66   Get the name of
4070: 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   the method...  
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4090: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
40a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
40b0: 20 6e 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61   name = methodBa
40c0: 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  se.Name;....    
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40e0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
40f0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4100: 20 52 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70   Return the prop
4110: 65 72 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72  erly formatted r
4120: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20  esult...        
4130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4150: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
4160: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4180: 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20     "{0}{1}{2}", 
4190: 74 79 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e  type.Name, Type.
41a0: 44 65 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29  Delimiter, name)
41b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
41c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
41d0: 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
4210: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
4220: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4230: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4240: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
4250: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4260: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
42b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
42c0: 61 74 69 63 20 76 6f 69 64 20 44 65 62 75 67 43  atic void DebugC
42d0: 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ore(..          
42e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
42f0: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
4300: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
4310: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
4320: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
4330: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4340: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
4350: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
4360: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4380: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65    if (debugListe
4390: 6e 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ners != null).. 
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
43d0: 72 65 61 63 68 20 28 54 72 61 63 65 4c 69 73 74  reach (TraceList
43e0: 65 6e 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e  ener listener in
43f0: 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29   debugListeners)
4400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4410: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4430: 20 20 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65           listene
4440: 72 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73  r.WriteLine(mess
4450: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  age, category);.
4460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73               lis
4480: 74 65 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a  tener.Flush();..
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
44c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
44d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
44e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
44f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4530: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4540: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4550: 69 63 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72  ic void TraceCor
4560: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
4570: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
4580: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
4590: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
45a0: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
45b0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
45c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
45d0: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
45e0: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
45f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4610: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4620: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4630: 20 57 72 69 74 65 20 74 68 65 20 6d 65 73 73 61   Write the messa
4640: 67 65 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63  ge to all the ac
4650: 74 69 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20  tive trace..    
4660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4670: 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65  //       listene
4680: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs...           
4690: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46b0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
46c0: 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f  (message, catego
46d0: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
46e0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
46f0: 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20  Flush();..      
4700: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4710: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4720: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
4730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
4780: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
4790: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
47a0: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
47b0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
47c0: 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41  ic string DebugA
47d0: 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
47e0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
47f0: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
4800: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
4810: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
4820: 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62  lback debugCallb
4830: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
4840: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
4850: 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ack traceCallbac
4860: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
4870: 20 20 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78      Exception ex
4880: 63 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ception,..      
4890: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
48a0: 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
48b0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
48c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
48e0: 28 65 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75  (exception != nu
48f0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4900: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4910: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72  DebugAndTrace(tr
4920: 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62  acePriority, deb
4930: 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4950: 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
4960: 63 6b 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61  ck, new StackTra
4970: 63 65 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72  ce(exception, tr
4980: 75 65 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20  ue), 0,..       
4990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49a0: 20 65 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72   exception.ToStr
49b0: 69 6e 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29  ing(), category)
49c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
49d0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
49e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
49f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4a50: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
4a60: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
4a70: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
4a80: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
4a90: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
4aa0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ac0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
4ad0: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4af0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75  aceCallback debu
4b00: 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4b20: 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
4b30: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4b40: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4b50: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
4b60: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4b70: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
4b90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4bb0: 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61  turn DebugAndTra
4bc0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4bd0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 50 72           tracePr
4be0: 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c  iority, debugCal
4bf0: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
4c00: 62 61 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a  back, null, 1,..
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c20: 20 20 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74      message, cat
4c30: 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
4c40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4c50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4ca0: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
4cb0: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
4cc0: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
4cd0: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
4ce0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
4cf0: 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54  string DebugAndT
4d00: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
4d10: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
4d20: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
4d30: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
4d40: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
4d50: 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  ck debugCallback
4d60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4d70: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4d80: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
4d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4da0: 20 53 74 61 63 6b 54 72 61 63 65 20 73 74 61 63   StackTrace stac
4db0: 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20  kTrace,..       
4dc0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76           int lev
4dd0: 65 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  el,..           
4de0: 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
4df0: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
4e00: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
4e10: 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
4e20: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
4e30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4e40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4e60: 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69  NOTE: Always ski
4e70: 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d  p this call fram
4e80: 65 20 69 66 20 74 68 65 20 73 74 61 63 6b 20 74  e if the stack t
4e90: 72 61 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20  race is..       
4ea0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4eb0: 20 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61    going to be ca
4ec0: 70 74 75 72 65 64 20 62 79 20 47 65 74 4d 65 74  ptured by GetMet
4ed0: 68 6f 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  hodName...      
4ee0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4f00: 20 28 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20   (stackTrace == 
4f10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4f20: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c             level
4f30: 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
4f40: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4f60: 54 45 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d  TE: Format the m
4f70: 65 73 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c  essage for displ
4f80: 61 79 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20  ay (once)...    
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fb0: 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64  string formatted
4fc0: 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
4fd0: 28 22 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20  ("{0}: {1}",..  
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ff0: 20 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28    GetMethodName(
5000: 73 74 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65  stackTrace, leve
5010: 6c 29 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d  l), message);...
5020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5030: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5040: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
5050: 20 74 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62   the debug callb
5060: 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f  ack is invalid o
5070: 72 20 74 68 65 20 74 72 61 63 65 20 70 72 69 6f  r the trace prio
5080: 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
5090: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
50a0: 66 20 74 68 69 73 20 6d 65 73 73 61 67 65 20 69  f this message i
50b0: 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74  s less than what
50c0: 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61   we currently wa
50d0: 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  nt to..         
50e0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
50f0: 64 65 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d  debug, skip it..
5100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5110: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5120: 20 20 20 20 20 69 66 20 28 28 64 65 62 75 67 43       if ((debugC
5130: 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29  allback != null)
5140: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
5150: 20 20 20 20 20 20 20 20 20 28 74 72 61 63 65 50           (traceP
5160: 72 69 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67  riority >= Debug
5170: 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20  Priority))..    
5180: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
51b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
51c0: 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64  TE: Invoke the d
51d0: 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69  ebug callback wi
51e0: 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64  th the formatted
51f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5200: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
5210: 65 73 73 61 67 65 20 61 6e 64 20 74 68 65 20 63  essage and the c
5220: 61 74 65 67 6f 72 79 20 73 70 65 63 69 66 69 65  ategory specifie
5230: 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5250: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a         caller...
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5270: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5280: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
5290: 67 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74  gCallback(format
52a0: 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  ted, category);.
52b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
52c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
52d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
52e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
52f0: 45 3a 20 49 66 20 74 68 65 20 74 72 61 63 65 20  E: If the trace 
5300: 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61  callback is inva
5310: 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61 63 65  lid or the trace
5320: 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20   priority..     
5330: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5340: 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73      of this mess
5350: 61 67 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e  age is less than
5360: 20 77 68 61 74 20 77 65 20 63 75 72 72 65 6e 74   what we current
5370: 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20  ly want to..    
5380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
5390: 20 20 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70       trace, skip
53a0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20   it...          
53b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
53c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 74            if ((t
53d0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20  raceCallback != 
53e0: 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20  null) &&..      
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74                (t
5400: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20  racePriority >= 
5410: 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d  TracePriority)).
5420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5440: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5460: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20  // NOTE: Invoke 
5470: 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
5480: 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d  ck with the form
5490: 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  atted..         
54a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
54b0: 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20      message and 
54c0: 74 68 65 20 63 61 74 65 67 6f 72 79 20 73 70 65  the category spe
54d0: 63 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20  cified by the.. 
54e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54f0: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
5500: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er...           
5510: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5530: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66   traceCallback(f
5540: 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f  ormatted, catego
5550: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
5560: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5570: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5580: 6e 20 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20  n message;..    
5590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
55a0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
55b0: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
55c0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
55d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
55e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5620: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
5630: 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73  region MockRegis
5640: 74 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  try Class..     
5650: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
5660: 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69  d class MockRegi
5670: 73 74 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62  stry : IDisposab
5680: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
5690: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
56a0: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
56b0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
56c0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
56d0: 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20  egistry()..     
56e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
56f0: 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
5700: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5710: 20 20 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e            readOn
5720: 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ly = true;..    
5730: 20 20 20 20 20 20 20 20 20 20 20 20 73 61 66 65              safe
5740: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5750: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5760: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
57b0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
57c0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a   MockRegistry(..
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57e0: 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20  bool whatIf..   
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5810: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20  : this()..      
5820: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5830: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 68           this.wh
5840: 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a  atIf = whatIf;..
5850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
58c0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
58d0: 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
58e0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
58f0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
5900: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
5910: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
5920: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
5930: 20 20 20 20 20 20 3a 20 74 68 69 73 28 77 68 61        : this(wha
5940: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
5950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5960: 20 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e       this.readOn
5970: 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a  ly = readOnly;..
5980: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
59f0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
5a00: 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
5a10: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
5a20: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
5a30: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
5a40: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
5a50: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
5a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5a80: 20 20 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c    : this(whatIf,
5a90: 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20   readOnly)..    
5aa0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5ab0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
5ac0: 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20  safe = safe;..  
5ad0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5ae0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
5af0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
5b00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5b50: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
5b60: 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
5b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
5b80: 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66  vate bool whatIf
5b90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
5ba0: 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49  ublic bool WhatI
5bb0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  f..            {
5bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5bd0: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
5be0: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
5bf0: 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20  whatIf; }..     
5c00: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
5c10: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5c20: 3b 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65  ; whatIf = value
5c30: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
5c40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5c50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c90: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5ca0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
5cb0: 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20  l readOnly;..   
5cc0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5cd0: 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20  bool ReadOnly.. 
5ce0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
5d00: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
5d10: 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64  d(); return read
5d20: 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Only; }..       
5d30: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
5d40: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5d50: 72 65 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65  readOnly = value
5d60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
5d70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5d80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5dc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5dd0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
5de0: 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20  l safe;..       
5df0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
5e00: 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   Safe..         
5e10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5e20: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
5e30: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
5e40: 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20  urn safe; }..   
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
5e60: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
5e70: 28 29 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65  (); safe = value
5e80: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
5e90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5ea0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ee0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5ef0: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
5f00: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61  kRegistryKey cla
5f10: 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20  ssesRoot;..     
5f20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
5f30: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c  ckRegistryKey Cl
5f40: 61 73 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20  assesRoot..     
5f50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5f60: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
5f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f90: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
5fa0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5fc0: 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d   (classesRoot ==
5fd0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ff0: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65  classesRoot = ne
6000: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
6010: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6030: 52 65 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73  Registry.Classes
6040: 52 6f 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65  Root, whatIf, re
6050: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
6060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61        return cla
6080: 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20  ssesRoot;..     
6090: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
60a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
60b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
60c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6110: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
6120: 72 79 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e  ryKey currentCon
6130: 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fig;..          
6140: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
6150: 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74  istryKey Current
6160: 43 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20  Config..        
6170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6180: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6190: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
61c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
61d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
61e0: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20  urrentConfig == 
61f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
6210: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e  urrentConfig = n
6220: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
6230: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6250: 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   Registry.Curren
6260: 74 43 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c  tConfig, whatIf,
6270: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
6280: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6290: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
62a0: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a  currentConfig;..
62b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
62d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
62e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6320: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6330: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
6340: 65 67 69 73 74 72 79 4b 65 79 20 63 75 72 72 65  egistryKey curre
6350: 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20  ntUser;..       
6360: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
6370: 52 65 67 69 73 74 72 79 4b 65 79 20 43 75 72 72  RegistryKey Curr
6380: 65 6e 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20  entUser..       
6390: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
63a0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63d0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
63e0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6400: 63 75 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e  currentUser == n
6410: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
6430: 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20  rrentUser = new 
6440: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6470: 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
6480: 65 72 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  er, whatIf, read
6490: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64b0: 20 20 20 20 72 65 74 75 72 6e 20 63 75 72 72 65      return curre
64c0: 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20  ntUser;..       
64d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
64e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
64f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6540: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6550: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
6560: 4b 65 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20  Key dynData;..  
6570: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
6580: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6590: 20 44 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20   DynData..      
65a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
65b0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
65c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
65d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
65e0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
65f0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6610: 28 64 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c  (dynData == null
6620: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6630: 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61             dynDa
6640: 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ta = new MockReg
6650: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
6660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6670: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
6680: 44 79 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c  DynData, whatIf,
6690: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
66a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
66b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
66c0: 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20  dynData;..      
66d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
66e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
66f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6750: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
6760: 79 4b 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e  yKey localMachin
6770: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6780: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6790: 74 72 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68  tryKey LocalMach
67a0: 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ine..           
67b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
67c0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
67d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
67e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67f0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6800: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6810: 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61          if (loca
6820: 6c 4d 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c  lMachine == null
6830: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6840: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c             local
6850: 4d 61 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f  Machine = new Mo
6860: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6880: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6890: 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
68a0: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  e, whatIf, readO
68b0: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20  nly, safe);.... 
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68d0: 20 20 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d     return localM
68e0: 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20  achine;..       
68f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6900: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6910: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6960: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6970: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
6980: 4b 65 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44  Key performanceD
6990: 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ata;..          
69a0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
69b0: 69 73 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d  istryKey Perform
69c0: 61 6e 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20  anceData..      
69d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
69e0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a10: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6a20: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6a40: 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61  (performanceData
6a50: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a70: 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61     performanceDa
6a80: 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ta = new MockReg
6a90: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ab0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
6ac0: 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c  PerformanceData,
6ad0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
6ae0: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b00: 20 72 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61   return performa
6b10: 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20  nceData;..      
6b20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6b40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6ba0: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
6bb0: 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20  yKey users;..   
6bc0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6bd0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
6be0: 55 73 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  Users..         
6bf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6c00: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6c10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c30: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
6c40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6c50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73            if (us
6c60: 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ers == null)..  
6c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c80: 20 20 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65        users = ne
6c90: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
6ca0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
6cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cc0: 52 65 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20  Registry.Users, 
6cd0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
6ce0: 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20  , safe);....    
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d00: 72 65 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20  return users;.. 
6d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
6d40: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6d50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6da0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
6db0: 6e 20 50 75 62 6c 69 63 20 22 52 65 67 69 73 74  n Public "Regist
6dc0: 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ry" Methods..   
6dd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6de0: 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28  object GetValue(
6df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e00: 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
6e10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
6e20: 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e     string valueN
6e30: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
6e40: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66        object def
6e50: 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20  aultValue..     
6e60: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
6e70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
6e90: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
6ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6eb0: 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79   return Registry
6ec0: 2e 47 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d  .GetValue(keyNam
6ed0: 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65  e, valueName, de
6ee0: 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20  faultValue);..  
6ef0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6f00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6f60: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
6f70: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
6f80: 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
6f90: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
6fa0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
6fb0: 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ueName,..       
6fc0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
6fd0: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
6fe0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
6ff0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7000: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
7010: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
7020: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
7030: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
7040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7050: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
7060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7070: 20 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c   Registry.SetVal
7080: 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75  ue(keyName, valu
7090: 65 4e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  eName, value);..
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
70b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
70c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7110: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56  public void SetV
7120: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
7130: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
7140: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
7150: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
7160: 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  alueName,..     
7170: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
7180: 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20  t value,..      
7190: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
71a0: 72 79 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75  ryValueKind valu
71b0: 65 4b 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  eKind..         
71c0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
71d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
71e0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
71f0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
7200: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
7210: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
7220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7230: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
7240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7250: 20 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c   Registry.SetVal
7260: 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75  ue(keyName, valu
7270: 65 4e 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61  eName, value, va
7280: 6c 75 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20  lueKind);..     
7290: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
72a0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
72b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
72c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7300: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7310: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
7320: 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  te Methods..    
7330: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7340: 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e  void CheckReadOn
7350: 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ly()..          
7360: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7370: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
7380: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
7390: 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22  : In "read-only"
73a0: 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c   mode, we disall
73b0: 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63  ow all write acc
73c0: 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ess...          
73d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
73e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 72            if (!r
73f0: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
7400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7410: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
7420: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
7430: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
7440: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  ionException();.
7450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7460: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
7470: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
7480: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
74d0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
74e0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
74f0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
7500: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
7510: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
7520: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
7530: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
7540: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
7550: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
7560: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7570: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
7580: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
7590: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
75a0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
75b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
75c0: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
75d0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73  typeof(MockRegis
7600: 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20  try).Name);..   
7610: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7620: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
7680: 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65  vate /* protecte
7690: 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69  d virtual */ voi
76a0: 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20  d Dispose(..    
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
76c0: 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20   disposing..    
76d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
76e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7700: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
7710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
7720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7730: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 69       if (disposi
7740: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng)..           
7750: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7770: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77b0: 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e    // dispose man
77c0: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
77d0: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7810: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7830: 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20  if (classesRoot 
7840: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7860: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7880: 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c 6f   classesRoot.Clo
7890: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78b0: 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d     classesRoot =
78c0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7900: 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 21  (currentConfig !
7910: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7930: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7950: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43 6c  currentConfig.Cl
7960: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7980: 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69      currentConfi
7990: 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  g = null;..     
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79d0: 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72 20  if (currentUser 
79e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a20: 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43 6c 6f   currentUser.Clo
7a30: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d     currentUser =
7a60: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7aa0: 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c 6c  (dynData != null
7ab0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7ac0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ae0: 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74            dynDat
7af0: 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  a.Close();..    
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b10: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 20          dynData 
7b20: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7b60: 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 21   (localMachine !
7b70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c 6f  localMachine.Clo
7bc0: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20     localMachine 
7bf0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7c30: 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74   (performanceDat
7c40: 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  a != null)..    
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c80: 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61     performanceDa
7c90: 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ta.Close();..   
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cb0: 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d           perform
7cc0: 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c 3b  anceData = null;
7cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ce0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d00: 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72 73         if (users
7d10: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d50: 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28 29 3b    users.Close();
7d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
7d80: 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ers = null;..   
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7da0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7dd0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e10: 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61   // release unma
7e20: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
7e30: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
7e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e70: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7e80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ea0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
7eb0: 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64   object is now d
7ec0: 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ef0: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
7f00: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
7f10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7f20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7f30: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
7f40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7fa0: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
7fb0: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
7fd0: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
7fe0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8000: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
8010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8020: 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
8030: 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
8040: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8050: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
8060: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
8070: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
80c0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
80d0: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
80e0: 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73        ~MockRegis
80f0: 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  try()..         
8100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8110: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
8120: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
8130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8140: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
8150: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8160: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
8170: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
81c0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
81d0: 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  n MockRegistryKe
81e0: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
81f0: 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64   internal sealed
8200: 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73   class MockRegis
8210: 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73  tryKey : IDispos
8220: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  able..        {.
8230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
8240: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
8250: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
8260: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
8270: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29  ockRegistryKey()
8280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
82a0: 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d   whatIf = true;.
82b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
82c0: 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65   readOnly = true
82d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
82e0: 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d     safe = true;.
82f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8300: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
8310: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
8320: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8370: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
8380: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
8390: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
83a0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
83b0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
83c0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
83d0: 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20  tryKey key..    
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
8400: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20   this()..       
8410: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8420: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79          this.key
8430: 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20   = key;..       
8440: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8450: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
84a0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
84b0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
84c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
84d0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
84e0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
84f0: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
8500: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
8510: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
8520: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
8530: 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20  (key)..         
8540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8550: 20 20 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65        this.subKe
8560: 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61  yName = subKeyNa
8570: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
8580: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8590: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
85a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
85e0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
85f0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
8610: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8630: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
8640: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8650: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d      bool whatIf.
8660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8670: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
8680: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
8690: 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20  subKeyName)..   
86a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
86c0: 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66  .whatIf = whatIf
86d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
86e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
86f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8730: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8740: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8750: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8760: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8770: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8790: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
87a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
87b0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87d0: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20  bool readOnly.. 
87e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
87f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8800: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
8810: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
8820: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8840: 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20    this.readOnly 
8850: 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20  = readOnly;..   
8860: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8870: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
88c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
88d0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
88e0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
88f0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
8900: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
8910: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
8920: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
8930: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
8940: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
8950: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
8960: 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20  eadOnly,..      
8970: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
8980: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
8990: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
89a0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
89b0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
89c0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
89d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
89e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
89f0: 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61    this.safe = sa
8a00: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe;..           
8a10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8a20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a60: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8a70: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
8a80: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
8aa0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ac0: 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20  bool whatIf..   
8ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8af0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c  : this(key, null
8b00: 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  , whatIf)..     
8b10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8b20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
8b30: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
8b40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8b50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8ba0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8bb0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8bc0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8bd0: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
8be0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8bf0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
8c00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8c10: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
8c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8c30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8c40: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
8c50: 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72   null, whatIf, r
8c60: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
8c70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8c80: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
8c90: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
8ca0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8cb0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8d00: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8d10: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
8d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d30: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
8d40: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
8d50: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
8d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d70: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
8d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d90: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
8da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dc0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c  : this(key, null
8dd0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
8de0: 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20  ly, safe)..     
8df0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8e00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
8e10: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
8e20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8e30: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
8e40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
8e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
8ea0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
8eb0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
8ec0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
8ed0: 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20  d Close()..     
8ee0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8ef0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8f10: 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73   NOTE: No dispos
8f20: 65 64 20 63 68 65 63 6b 20 68 65 72 65 20 62 65  ed check here be
8f30: 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68  cause calling th
8f40: 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20  is method..     
8f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
8f60: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75      should be ju
8f70: 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20  st like calling 
8f80: 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20  Dispose...      
8f90: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
8fb0: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
8fc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8fd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
9030: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
9040: 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65  yKey CreateSubKe
9050: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9060: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
9070: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
9080: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
9090: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
90a0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
90b0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
90c0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
90d0: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
90e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
90f0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
9100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9110: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
9120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9130: 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66 29       if (whatIf)
9140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9150: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9160: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9180: 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70   // HACK: Attemp
9190: 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70  t to open the sp
91a0: 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e  ecified sub-key.
91b0: 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20    If this..     
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
91d0: 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77  /       fails, w
91e0: 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65  e will simply re
91f0: 74 75 72 6e 20 74 68 65 20 77 72 61 70 70 65 64  turn the wrapped
9200: 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20   root key..     
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9220: 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 73  /       itself s
9230: 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61  ince no writes a
9240: 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20 27 77  re allowed in 'w
9250: 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20 20 20  hat-if'..       
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
9270: 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f        mode anyho
9280: 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w...            
9290: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
92c0: 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62  ey = key.OpenSub
92d0: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  Key(subKeyName);
92e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
92f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
9300: 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  subKey != null) 
9310: 3f 0d 0a 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 6e 65 77 20 4d             new M
9330: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
9340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9360: 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c   subKey, whatIf,
9370: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
9380: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
9390: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
93a0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
93b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93d0: 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
93e0: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  e, whatIf, readO
93f0: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20  nly, safe);..   
9400: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9420: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
9430: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9450: 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  urn new MockRegi
9460: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
9470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9480: 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b    key.CreateSubK
9490: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20  ey(subKeyName), 
94a0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
94b0: 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20  , safe);..      
94c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
94d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
94e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
9540: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53  lic void DeleteS
9550: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
9560: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9570: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
9580: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
9590: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d   throwOnMissing.
95a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
95b0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
95c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
95d0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
95e0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
95f0: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
9600: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
9610: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
9620: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9640: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
9650: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
9660: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
9670: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
9680: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62  DeleteSubKey(sub
9690: 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e  KeyName, throwOn
96a0: 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20  Missing);..     
96b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
96c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9710: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9720: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
9730: 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
9740: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9750: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   subKeyName..   
9760: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9770: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9790: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
97a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
97b0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
97c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
97d0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
97e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
97f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9800: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
9810: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
9820: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
9830: 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65          key.Dele
9840: 74 65 53 75 62 4b 65 79 54 72 65 65 28 73 75 62  teSubKeyTree(sub
9850: 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  KeyName);..     
9860: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9870: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
98c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
98d0: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c  c void DeleteVal
98e0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
98f0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
9900: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9910: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
9920: 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  issing..        
9930: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9950: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9960: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
9970: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9980: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
99b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
99c0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
99d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
99e0: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a00: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c     key.DeleteVal
9a10: 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e  ue(name, throwOn
9a20: 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20  Missing);..     
9a30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9a40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9a90: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9aa0: 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75  c string[] GetSu
9ab0: 62 4b 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20  bKeyNames()..   
9ac0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9ae0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
9b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9b20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
9b30: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
9b40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
9b50: 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28  .GetSubKeyNames(
9b60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9b70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9b80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bc0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9bd0: 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63      public objec
9be0: 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  t GetValue(..   
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
9c00: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
9c10: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
9c20: 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a  t defaultValue..
9c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9c60: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9c70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9c80: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
9c90: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9cb0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9cd0: 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28  rn key.GetValue(
9ce0: 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c  name, defaultVal
9cf0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
9d00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9d10: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d50: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9d60: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
9d70: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65  kRegistryKey Ope
9d80: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
9d90: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9da0: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   subKeyName..   
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9dc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9de0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
9df0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9e00: 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75     return OpenSu
9e10: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c  bKey(subKeyName,
9e20: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
9e30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9e40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9e90: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9ea0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
9eb0: 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20   OpenSubKey(..  
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
9ed0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
9ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ef0: 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d    bool writable.
9f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f10: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9f20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9f30: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
9f40: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9f50: 20 20 20 20 20 20 20 69 66 20 28 77 72 69 74 61         if (writa
9f60: 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ble)..          
9f70: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
9f80: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9fa0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
9fd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9fe0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
9ff0: 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65  subKey = key.Ope
a000: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
a020: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
a030: 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61   ? false : writa
a040: 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ble);....       
a050: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a060: 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29  (subKey != null)
a070: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
a080: 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b          new Mock
a090: 52 65 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b  RegistryKey(subK
a0a0: 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ey, whatIf, read
a0b0: 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75  Only, safe) : nu
a0c0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
a0d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a0e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a130: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
a140: 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   SetValue(..    
a150: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a160: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
a170: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
a180: 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
a190: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
a1a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a1b0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
a1c0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
a1e0: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
a1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a200: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
a210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a220: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
a230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a240: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a260: 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28     key.SetValue(
a270: 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  name, value);.. 
a280: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a290: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
a2a0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
a2b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a300: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
a310: 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
a320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a330: 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65  blic string Name
a340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a360: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20   get..          
a370: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a390: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
a3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a3b0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
a3c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
a3e0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a400: 20 20 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e     return !Strin
a410: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
a420: 73 75 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20  subKeyName) ?.. 
a430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a440: 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
a450: 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c  rmat("{0}\\{1}",
a460: 20 6b 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65   key.Name, subKe
a470: 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20  yName) :..      
a480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a490: 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20    key.Name;..   
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a510: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a520: 70 72 69 76 61 74 65 20 52 65 67 69 73 74 72 79  private Registry
a530: 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20  Key key;..      
a540: 20 20 20 20 20 20 70 75 62 6c 69 63 20 52 65 67        public Reg
a550: 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20  istryKey Key..  
a560: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a570: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
a580: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
a590: 28 29 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b  (); CheckSafe();
a5a0: 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a   return key; }..
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a5c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a610: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a620: 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 73  private string s
a630: 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  ubKeyName;..    
a640: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
a650: 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65  tring SubKeyName
a660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a680: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
a690: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73  osed(); return s
a6a0: 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20  ubKeyName; }..  
a6b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a6c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a720: 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49  ivate bool whatI
a730: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
a740: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74  public bool What
a750: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
a760: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a770: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
a780: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
a790: 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20   whatIf; }..    
a7a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a7b0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a800: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a810: 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c  ate bool readOnl
a820: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
a830: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64  public bool Read
a840: 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  Only..          
a850: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a860: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
a870: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
a880: 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a  rn readOnly; }..
a890: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a900: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65  public bool safe
a910: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
a920: 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d  ublic bool Safe.
a930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a950: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
a960: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61  sed(); return sa
a970: 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  fe; }..         
a980: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a990: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a9f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
aa00: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d  region Private M
aa10: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
aa20: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
aa30: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
aa40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
aa50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aa60: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
aa70: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e       // NOTE: In
aa80: 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64   "read-only" mod
aa90: 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61  e, we disallow a
aaa0: 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73 73 2e  ll write access.
aab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aac0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
aad0: 20 20 20 20 20 20 69 66 20 28 21 72 65 61 64 4f        if (!readO
aae0: 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nly)..          
aaf0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ab00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ab10: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
ab20: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
ab30: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20  xception();..   
ab40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ab50: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ab60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
aba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
abb0: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53  vate void CheckS
abc0: 61 66 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  afe()..         
abd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
abe0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
abf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
ac00: 45 3a 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64  E: In "safe" mod
ac10: 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61  e, we disallow a
ac20: 6c 6c 20 64 69 72 65 63 74 20 61 63 63 65 73 73  ll direct access
ac30: 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
ac40: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
ac50: 20 20 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69    contained regi
ac60: 73 74 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20  stry key...     
ac70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
ac90: 66 20 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20  f (!safe)..     
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
acb0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
acc0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
acd0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
ace0: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
acf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ad00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
ad10: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
ad20: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ad30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ad70: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
ad80: 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20  n System.Object 
ad90: 4f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20  Overrides..     
ada0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
adb0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f  erride string To
adc0: 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20  String()..      
add0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ade0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
adf0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ae10: 75 72 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a  urn this.Name;..
ae20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ae30: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
ae40: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
ae50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae90: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
aea0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
aeb0: 49 6d 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73  Implicit Convers
aec0: 69 6f 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20  ion Operators.. 
aed0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
aee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55             // BU
aef0: 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f  GBUG: Remove me?
af00: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65    This should be
af10: 20 73 61 66 65 20 62 65 63 61 75 73 65 20 69 6e   safe because in
af20: 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20   'what-if'..    
af30: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
af40: 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73     mode all keys
af50: 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64   are opened read
af60: 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20  -only...        
af70: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
af80: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
af90: 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61  c implicit opera
afa0: 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65 79 28  tor RegistryKey(
afb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afc0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
afd0: 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  y key..         
afe0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
aff0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b000: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
b010: 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (key != null) ? 
b020: 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d  key.Key : null;.
b030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b040: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
b050: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b060: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b0b0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b0c0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
b0d0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
b0f0: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
b100: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
b110: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
b120: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
b130: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
b140: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b150: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
b160: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
b180: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
b190: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
b1a0: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
b1b0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1d0: 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73  typeof(MockRegis
b1e0: 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a  tryKey).Name);..
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b260: 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65  private /* prote
b270: 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20  cted virtual */ 
b280: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20  void Dispose(.. 
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
b2a0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20  ool disposing.. 
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
b2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
b2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b2e0: 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d   if (!disposed).
b2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b310: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
b320: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
b330: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b350: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20       // dispose 
b3a0: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
b3b0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b410: 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75     if (key != nu
b420: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
b430: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b450: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
b460: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
b470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b480: 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c        key = null
b490: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b4a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
b4d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b500: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b510: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
b520: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
b530: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b590: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
b5a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
b5b0: 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73  : This object is
b5c0: 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a   now disposed...
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5e0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
b5f0: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70              disp
b600: 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  osed = true;..  
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
b620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b630: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
b640: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b650: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b6a0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b6b0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d   IDisposable Mem
b6c0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  bers..          
b6d0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69    public void Di
b6e0: 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  spose()..       
b6f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b700: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
b710: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
b720: 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72          GC.Suppr
b730: 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73  essFinalize(this
b740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b750: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
b760: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
b770: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
b7d0: 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a  ion Destructor..
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63              ~Moc
b7f0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a  kRegistryKey()..
b800: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
b820: 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a  ispose(false);..
b830: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b840: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
b850: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
b860: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
b870: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b8d0: 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73     #region Regis
b8e0: 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d  tryHelper Class.
b8f0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
b900: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65   static class Re
b910: 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20  gistryHelper..  
b920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b930: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
b940: 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f 70 65  lic Static Prope
b950: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
b960: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
b970: 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65  c int subKeysCre
b980: 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ated;..         
b990: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
b9a0: 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61   int SubKeysCrea
b9b0: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
b9c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b9d0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
b9e0: 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b   subKeysCreated;
b9f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ba00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ba10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ba20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ba60: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
ba70: 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65  ic int subKeysDe
ba80: 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  leted;..        
ba90: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
baa0: 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c  c int SubKeysDel
bab0: 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  eted..          
bac0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bad0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
bae0: 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64  n subKeysDeleted
baf0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
bb00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
bb10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
bb60: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
bb70: 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65  tic int keyValue
bb80: 73 53 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  sSet;..         
bb90: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
bba0: 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65   int KeyValuesSe
bbb0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
bbc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bbd0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b    get { return k
bbe0: 65 79 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a  eyValuesSet; }..
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
bc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bc60: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
bc70: 6e 74 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65  nt keyValuesDele
bc80: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
bc90: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bca0: 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c  int KeyValuesDel
bcb0: 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  eted..          
bcc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bcd0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
bce0: 6e 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  n keyValuesDelet
bcf0: 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ed; }..         
bd00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
bd10: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
bd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
bd70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
bd80: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74  region Public St
bd90: 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
bda0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
bdb0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
bdc0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
bdd0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
bde0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bdf0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
be00: 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
be10: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
be20: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
be30: 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
be40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
be50: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
be60: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
be70: 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  writable,..     
be80: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
be90: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
bea0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
beb0: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
bec0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
bed0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bee0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
bef0: 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
bf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf10: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
bf20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
bf30: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
bf40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf50: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
bf60: 62 75 67 41 6e 64 54 72 61 63 65 28 77 72 69 74  bugAndTrace(writ
bf70: 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20 20  able ?..        
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf90: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
bfa0: 67 68 65 73 74 20 3a 20 54 72 61 63 65 50 72 69  ghest : TracePri
bfb0: 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20  ority.Higher,.. 
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfd0: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
bfe0: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
bff0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
c000: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f               "ro
c020: 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62  otKey = {0}, sub
c030: 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77  KeyName = {1}, w
c040: 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d  ritable = {2}",.
c050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c060: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
c070: 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f  lay(rootKey), Fo
c080: 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e  rDisplay(subKeyN
c090: 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
c0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
c0b0: 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74 61 62  orDisplay(writab
c0c0: 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  le)), traceCateg
c0d0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
c0e0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
c100: 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f 72  HACK: Always for
c110: 62 69 64 20 77 72 69 74 61 62 6c 65 20 61 63 63  bid writable acc
c120: 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61 74 69  ess when operati
c130: 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20  ng in..         
c140: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
c150: 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d  'what-if' mode..
c160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c170: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
c180: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
c190: 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b  yKey key = rootK
c1a0: 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  ey.OpenSubKey(..
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1c0: 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20      subKeyName, 
c1d0: 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a  whatIf ? false :
c1e0: 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20   writable);.... 
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c200: 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75  eturn (key != nu
c210: 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ll) ?..         
c220: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d             new M
c230: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b  ockRegistryKey(k
c240: 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73  ey, whatIf, fals
c250: 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c 6c  e, false) : null
c260: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
c270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
c2d0: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
c2e0: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
c2f0: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
c300: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
c310: 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67  c static MockReg
c320: 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65 53  istryKey CreateS
c330: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
c340: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
c350: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
c360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c370: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
c380: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
c390: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
c3a0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
c3b0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
c3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c3d0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
c3e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c3f0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
c400: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c420: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c440: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
c450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c460: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
c470: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
c480: 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
c4b0: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
c4c0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
c4d0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f               "ro
c4f0: 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62  otKey = {0}, sub
c500: 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d  KeyName = {1}",.
c510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c520: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
c530: 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f  lay(rootKey), Fo
c540: 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e  rDisplay(subKeyN
c550: 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
c580: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c590: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
c5a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 2f 2f 20 48 41 43 4b 3a 20         // HACK: 
c5e0: 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20 6b 65  Always open a ke
c5f0: 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 63  y, rather than c
c600: 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e  reating one when
c610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c620: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
c630: 70 65 72 61 74 69 6e 67 20 69 6e 20 27 77 68 61  perating in 'wha
c640: 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20  t-if' mode...   
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c660: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
c670: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68 61           if (wha
c680: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
c690: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6d0: 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70   // HACK: Attemp
c6e0: 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70  t to open the sp
c6f0: 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e  ecified sub-key.
c700: 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20    If..          
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c720: 20 20 20 20 20 20 20 74 68 69 73 20 66 61 69 6c         this fail
c730: 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c  s, we will simpl
c740: 79 20 72 65 74 75 72 6e 20 74 68 65 20 72 6f 6f  y return the roo
c750: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
c760: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
c770: 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 20 73      key itself s
c780: 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61  ince no writes a
c790: 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20  re allowed in.. 
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
c7c0: 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 61  'what-if' mode a
c7d0: 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  nyhow...        
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
c800: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
c810: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
c820: 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75  = rootKey.OpenSu
c830: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
c840: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c860: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
c870: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c890: 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52   key : new MockR
c8a0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
c8d0: 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65  tKey, subKeyName
c8e0: 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c  , whatIf, false,
c8f0: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
c910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c920: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
c940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c950: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c960: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
c970: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74     rootKey.Creat
c9a0: 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  eSubKey(subKeyNa
c9b0: 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 66 61 6c  me), whatIf, fal
c9c0: 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
ca00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ca10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ca20: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca50: 20 20 20 20 73 75 62 4b 65 79 73 43 72 65 61 74      subKeysCreat
ca60: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
ca70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ca80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ca90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
caa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cae0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
caf0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
cb00: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
cb10: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
cb20: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
cb30: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
cb40: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
cb50: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
cb60: 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
cb80: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
cb90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cba0: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
cbb0: 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
cbc0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
cbd0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
cbe0: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
cbf0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
cc00: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
cc10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cc20: 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
cc30: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
cc60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
cc70: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
cc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
cc90: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
cca0: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
ccb0: 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccd0: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
cce0: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
ccf0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
cd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd10: 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b            "rootK
cd20: 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79  ey = {0}, subKey
cd30: 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20  Name = {1}",..  
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd50: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
cd60: 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69  (rootKey), ForDi
cd70: 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65  splay(subKeyName
cd80: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
cda0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdc0: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65    rootKey.Delete
cdf0: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
ce00: 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
ce10: 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  g);....         
ce20: 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65         subKeysDe
ce30: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
ce40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ce50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ce60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cea0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
ceb0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
cec0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
ced0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
cee0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
cef0: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
cf00: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
cf10: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
cf20: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
cf30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cf40: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
cf50: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
cf60: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
cf70: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
cf80: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
cf90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cfa0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
cfb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
cfc0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
cfd0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cff0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
d000: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
d010: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
d020: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
d030: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
d040: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
d050: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d070: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
d080: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
d090: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0b0: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
d0c0: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
d0d0: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
d100: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
d110: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
d120: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d130: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
d140: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
d150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d160: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d180: 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75  rootKey.DeleteSu
d190: 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e  bKeyTree(subKeyN
d1a0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
d1b0: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73           subKeys
d1c0: 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Deleted++;..    
d1d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d1e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d230: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
d240: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
d250: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
d260: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
d270: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
d280: 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75  c string[] GetSu
d290: 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20  bKeyNames(..    
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
d2b0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
d2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d2d0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2f0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d330: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
d340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d350: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
d360: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
d370: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d380: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d390: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
d3a0: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
d3b0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
d3c0: 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
d3e0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
d3f0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
d400: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46    "key = {0}", F
d430: 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 29 2c  orDisplay(key)),
d440: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
d450: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d460: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
d470: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
d480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d490: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
d4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
d4f0: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
d500: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
d510: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
d520: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
d530: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47   static object G
d540: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
d550: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
d560: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d580: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
d5a0: 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75  ject defaultValu
d5b0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
d5c0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
d5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d5e0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d620: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
d630: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d640: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
d650: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
d660: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
d670: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
d680: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
d690: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
d6a0: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
d6b0: 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
d6d0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
d6e0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
d6f0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d710: 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20      "key = {0}, 
d720: 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66 61  name = {1}, defa
d730: 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22 2c  ultValue = {2}",
d740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d750: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
d760: 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69  play(key), ForDi
d770: 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20 20  splay(name),..  
d780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d790: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
d7a0: 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29 29 2c  (defaultValue)),
d7b0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
d7c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d7d0: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
d7e0: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65  etValue(name, de
d7f0: 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20  faultValue);..  
d800: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
d810: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
d820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
d870: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
d880: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
d890: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
d8a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
d8b0: 74 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75  tic void SetValu
d8c0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
d8d0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
d8e0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
d8f0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
d900: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
d910: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
d920: 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alue,..         
d930: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
d940: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
d950: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
d960: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
d970: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
d980: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d990: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
d9a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
d9b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d9c0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
d9d0: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d9e0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d9f0: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
da00: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
da10: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
da20: 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
da30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
da40: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
da50: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
da60: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da80: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
da90: 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c   name = {1}, val
daa0: 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  ue = {2}",..    
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dac0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b      ForDisplay(k
dad0: 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ey), ForDisplay(
dae0: 6e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61  name), ForDispla
daf0: 79 28 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20  y(value)),..    
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db10: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
db20: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
db30: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
db40: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
db50: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74           key.Set
db60: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75  Value(name, valu
db70: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
db80: 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73         keyValues
db90: 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  Set++;..        
dba0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
dbb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
dbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbf0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
dc00: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
dc10: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
dc20: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
dc30: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
dc40: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
dc50: 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d  id DeleteValue(.
dc60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dc70: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
dc80: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
dc90: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
dca0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
dcb0: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
dcc0: 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
dcd0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
dce0: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
dcf0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
dd00: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
dd10: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
dd20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dd30: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
dd40: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
dd60: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
dd70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
dd80: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
dda0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
ddb0: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
ddc0: 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
ddf0: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
de00: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
de10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de20: 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20           "key = 
de30: 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22  {0}, name = {1}"
de40: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79  , ForDisplay(key
de50: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
de60: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
de70: 69 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74  isplay(name)), t
de80: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
de90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dea0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61      key.DeleteVa
ded0: 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f  lue(name, throwO
dee0: 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20  nMissing);....  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
df00: 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b  yValuesDeleted++
df10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
df20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
df30: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
df40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
df50: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
df60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
df70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dfa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
dfb0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74        #region St
dfc0: 72 69 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a  ringList Class..
dfd0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
dfe0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72  sealed class Str
dff0: 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73  ingList : List<s
e000: 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20  tring>..        
e010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
e020: 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
e030: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
e040: 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20      : base()..  
e050: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
e070: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
e080: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
e090: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
e0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
e0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e0f0: 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49  lic StringList(I
e100: 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e  Enumerable<strin
e110: 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a  g> collection)..
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e130: 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f  : base(collectio
e140: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
e150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e160: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
e170: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
e180: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
e190: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
e1a0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
e1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
e200: 65 67 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74  egion StringDict
e210: 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20  ionary Class..  
e220: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
e230: 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e  aled class Strin
e240: 67 44 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69  gDictionary : Di
e250: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
e260: 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20   string>..      
e270: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e280: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69   public StringDi
e290: 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20  ctionary()..    
e2a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e2b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
e2c0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
e2d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e2e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
e2f0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
e300: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
e350: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65        #region Ve
e360: 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d  rsionList Class.
e370: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
e380: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65   sealed class Ve
e390: 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74  rsionList : List
e3a0: 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20  <Version>..     
e3b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e3c0: 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
e3d0: 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
e3e0: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29          : base()
e3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e410: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
e420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
e440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e480: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
e490: 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c   public VersionL
e4a0: 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c  ist(IEnumerable<
e4b0: 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74  Version> collect
e4c0: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
e4d0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c        : base(col
e4e0: 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  lection)..      
e4f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e500: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e510: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e520: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e530: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e540: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e550: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e590: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e5a0: 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73      #region Vers
e5b0: 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20  ionMap Class..  
e5c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
e5d0: 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73 69  aled class Versi
e5e0: 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61  onMap : Dictiona
e5f0: 72 79 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69  ry<string, Versi
e600: 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20  onList>..       
e610: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e620: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61  public VersionMa
e630: 70 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  p()..           
e640: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e650: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
e660: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
e670: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
e680: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
e690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
e6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
e6f0: 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 43  region Package C
e700: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e  lass..        in
e710: 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c  ternal sealed cl
e720: 61 73 73 20 50 61 63 6b 61 67 65 0d 0a 20 20 20  ass Package..   
e730: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e740: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
e750: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
e760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e770: 6c 69 63 20 50 61 63 6b 61 67 65 28 29 0d 0a 20  lic Package().. 
e780: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e7a0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
e7b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e7c0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
e7d0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
e7e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e820: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e830: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
e840: 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
e850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
e860: 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
e870: 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  e assemblyName;.
e880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e890: 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  lic AssemblyName
e8a0: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20   AssemblyName.. 
e8b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
e8d0: 74 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d  t { return assem
e8e0: 62 6c 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  blyName; }..    
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
e900: 7b 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  { assemblyName =
e910: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
e920: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e930: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e980: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
e990: 74 65 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73  te bool globalAs
e9a0: 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20  semblyCache;..  
e9b0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
e9c0: 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65   bool GlobalAsse
e9d0: 6d 62 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20  mblyCache..     
e9e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e9f0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ea00: 72 65 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73  return globalAss
ea10: 65 6d 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20  emblyCache; }.. 
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ea30: 65 74 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d  et { globalAssem
ea40: 62 6c 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65  blyCache = value
ea50: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ea60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ea70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ea80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eab0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eac0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
ead0: 64 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20  d packageId;..  
eae0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
eaf0: 20 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d   Guid PackageId.
eb00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb20: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63  get { return pac
eb30: 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  kageId; }..     
eb40: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
eb50: 20 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c   packageId = val
eb60: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
eb70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
eb80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
eb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ebd0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
ebe0: 75 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a  uid serviceId;..
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ec00: 69 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49  ic Guid ServiceI
ec10: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
ec20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ec30: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
ec40: 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20  erviceId; }..   
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
ec60: 20 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76   { serviceId = v
ec70: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
ec80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ec90: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ece0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
ecf0: 20 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65   Guid dataSource
ed00: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
ed10: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
ed20: 61 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  aSourceId..     
ed30: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ed40: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ed50: 72 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63  return dataSourc
ed60: 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  eId; }..        
ed70: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61          set { da
ed80: 74 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c  taSourceId = val
ed90: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
eda0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
edb0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
edc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ee00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
ee10: 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72  uid dataProvider
ee20: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
ee30: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
ee40: 61 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20  aProviderId..   
ee50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
ee70: 7b 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f  { return dataPro
ee80: 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20  viderId; }..    
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
eea0: 7b 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  { dataProviderId
eeb0: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
eec0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
eed0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
eee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ef20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
ef30: 76 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74  vate Guid adoNet
ef40: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20  TechnologyId;.. 
ef50: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
ef60: 63 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63  c Guid AdoNetTec
ef70: 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20  hnologyId..     
ef80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef90: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
efa0: 72 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63  return adoNetTec
efb0: 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20  hnologyId; }..  
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
efd0: 74 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f  t { adoNetTechno
efe0: 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20  logyId = value; 
eff0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
f000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
f010: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
f020: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
f030: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
f040: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f090: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
f0a0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73  nfiguration Clas
f0b0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
f0c0: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
f0d0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  Configuration.. 
f0e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f0f0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
f100: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
f110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f120: 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20  vate const char 
f130: 53 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20  Switch = '-';.. 
f140: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f150: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c  te const char Al
f160: 74 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a  tSwitch = '/';..
f170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f1d0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
f1e0: 72 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20  readonly char[] 
f1f0: 53 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d  SwitchChars = {.
f200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f210: 20 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74   Switch, AltSwit
f220: 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
f230: 7d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  };..            
f240: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
f250: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
f2a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
f2b0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
f2c0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
f2d0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 43         private C
f2e0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20  onfiguration(.. 
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
f300: 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
f310: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f320: 20 20 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c     string logFil
f330: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
f340: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
f350: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
f360: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
f370: 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d  g coreFileName,.
f380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f390: 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
f3a0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
f3b0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
f3c0: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d  signerFileName,.
f3d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3e0: 20 73 74 72 69 6e 67 20 72 65 67 69 73 74 72 79   string registry
f3f0: 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
f400: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f410: 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 2c 0d   configVersion,.
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f430: 20 73 74 72 69 6e 67 20 76 73 56 65 72 73 69 6f   string vsVersio
f440: 6e 53 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20  nSuffix,..      
f450: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f460: 20 64 65 62 75 67 46 6f 72 6d 61 74 2c 0d 0a 20   debugFormat,.. 
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f480: 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61  tring traceForma
f490: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
f4a0: 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
f4b0: 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d 0a   installFlags,..
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4d0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
f4e0: 62 75 67 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  bugPriority,..  
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
f500: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
f510: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
f520: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
f530: 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
f540: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f550: 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20 20 20 20  install,..      
f560: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
f570: 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
f580: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 52 75         bool noRu
f590: 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20  ntimeVersion,.. 
f5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f5b0: 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a  ool noDesktop,..
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5d0: 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d  bool noCompact,.
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f5f0: 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c   bool noNetFx20,
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 4e 65 74 46 78 33 35    bool noNetFx35
f620: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f630: 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34     bool noNetFx4
f640: 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
f650: 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
f660: 34 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  45,..           
f670: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
f680: 78 34 35 31 2c 0d 0a 20 20 20 20 20 20 20 20 20  x451,..         
f690: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
f6a0: 32 30 30 35 2c 0d 0a 20 20 20 20 20 20 20 20 20  2005,..         
f6b0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
f6c0: 32 30 30 38 2c 0d 0a 20 20 20 20 20 20 20 20 20  2008,..         
f6d0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
f6e0: 32 30 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  2010,..         
f6f0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
f700: 32 30 31 32 2c 0d 0a 20 20 20 20 20 20 20 20 20  2012,..         
f710: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
f720: 32 30 31 33 2c 0d 0a 20 20 20 20 20 20 20 20 20  2013,..         
f730: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72         bool noTr
f740: 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ace,..          
f750: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e        bool noCon
f760: 73 6f 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sole,..         
f770: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f         bool noLo
f780: 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
f790: 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
f7a0: 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
f7b0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
f7c0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
f7d0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 65 62          bool deb
f7e0: 75 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug,..           
f7f0: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
f800: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
f810: 20 20 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d      bool confirm
f820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f830: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
f840: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f850: 20 20 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c      this.assembl
f860: 79 20 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20  y = assembly;.. 
f870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f880: 68 69 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20  his.logFileName 
f890: 3d 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a  = logFileName;..
f8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8b0: 74 68 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d  this.directory =
f8c0: 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20   directory;..   
f8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
f8e0: 73 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  s.coreFileName =
f8f0: 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a   coreFileName;..
f900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f910: 74 68 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  this.linqFileNam
f920: 65 20 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  e = linqFileName
f930: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f940: 20 20 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72     this.designer
f950: 46 69 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67  FileName = desig
f960: 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  nerFileName;..  
f970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f980: 69 73 2e 72 65 67 69 73 74 72 79 56 65 72 73 69  is.registryVersi
f990: 6f 6e 20 3d 20 72 65 67 69 73 74 72 79 56 65 72  on = registryVer
f9a0: 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
f9b0: 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66         this.conf
f9c0: 69 67 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e 66  igVersion = conf
f9d0: 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  igVersion;..    
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f9f0: 2e 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78  .vsVersionSuffix
fa00: 20 3d 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66   = vsVersionSuff
fa10: 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix;..           
fa20: 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 46       this.debugF
fa30: 6f 72 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72  ormat = debugFor
fa40: 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
fa50: 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65        this.trace
fa60: 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f  Format = traceFo
fa70: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
fa80: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74         this.inst
fa90: 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61  allFlags = insta
faa0: 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
fab0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64            this.d
fac0: 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64  ebugPriority = d
fad0: 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
fae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
faf0: 68 69 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74  his.tracePriorit
fb00: 79 20 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74  y = tracePriorit
fb10: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
fb20: 20 20 20 20 74 68 69 73 2e 70 65 72 55 73 65 72      this.perUser
fb30: 20 3d 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20   = perUser;..   
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fb50: 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74  s.install = inst
fb60: 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  all;..          
fb70: 20 20 20 20 20 20 74 68 69 73 2e 77 6f 77 36 34        this.wow64
fb80: 20 3d 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20   = wow64;..     
fb90: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fba0: 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
fbb0: 20 3d 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   = noRuntimeVers
fbc0: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
fbd0: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73        this.noDes
fbe0: 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70  ktop = noDesktop
fbf0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fc00: 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63     this.noCompac
fc10: 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a  t = noCompact;..
fc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc30: 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  this.noNetFx20 =
fc40: 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fc60: 73 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 6e 6f  s.noNetFx35 = no
fc70: 4e 65 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20  NetFx35;..      
fc80: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
fc90: 6f 4e 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74  oNetFx40 = noNet
fca0: 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx40;..         
fcb0: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
fcc0: 74 46 78 34 35 20 3d 20 6e 6f 4e 65 74 46 78 34  tFx45 = noNetFx4
fcd0: 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
fce0: 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
fcf0: 34 35 31 20 3d 20 6e 6f 4e 65 74 46 78 34 35 31  451 = noNetFx451
fd00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fd10: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 35     this.noVs2005
fd20: 20 3d 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20   = noVs2005;..  
fd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fd40: 69 73 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f  is.noVs2008 = no
fd50: 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20  Vs2008;..       
fd60: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
fd70: 56 73 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31  Vs2010 = noVs201
fd80: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
fd90: 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31      this.noVs201
fda0: 32 20 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20  2 = noVs2012;.. 
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fdc0: 68 69 73 2e 6e 6f 56 73 32 30 31 33 20 3d 20 6e  his.noVs2013 = n
fdd0: 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20  oVs2013;..      
fde0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
fdf0: 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63 65  oTrace = noTrace
fe00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fe10: 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c     this.noConsol
fe20: 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a  e = noConsole;..
fe30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe40: 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c  this.noLog = noL
fe50: 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
fe60: 20 20 20 20 20 74 68 69 73 2e 74 68 72 6f 77 4f       this.throwO
fe70: 6e 4d 69 73 73 69 6e 67 20 3d 20 74 68 72 6f 77  nMissing = throw
fe80: 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20  OnMissing;..    
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fea0: 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66  .whatIf = whatIf
feb0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fec0: 20 20 20 74 68 69 73 2e 64 65 62 75 67 20 3d 20     this.debug = 
fed0: 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20  debug;..        
fee0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 65 72          this.ver
fef0: 62 6f 73 65 20 3d 20 76 65 72 62 6f 73 65 3b 0d  bose = verbose;.
ff00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff10: 20 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d 20   this.confirm = 
ff20: 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20  confirm;..      
ff30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ff40: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
ff50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
ff60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ffa0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
ffb0: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
ffc0: 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  e Static Methods
ffd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
ffe0: 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
fff0: 64 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65  d GetDefaultFile
10000 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
10010 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
10020 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10040 65 66 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69  ef string coreFi
10050 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
10060 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
10070 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing linqFileName
10080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10090 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 65     ref string de
100a0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a  signerFileName..
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
100d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
100e0 20 20 69 66 20 28 74 68 69 73 41 73 73 65 6d 62    if (thisAssemb
100f0 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly == null)..   
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10110 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
10120 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65              dire
10130 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  ctory = Path.Get
10140 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 74 68  DirectoryName(th
10150 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74  isAssembly.Locat
10160 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
10170 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
10180 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
10190 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  y(directory)).. 
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101b0 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
101c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
101d0 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  reFileName = Pat
101e0 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
101f0 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
10200 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
10210 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ler.CoreFileName
10220 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
10230 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61        linqFileNa
10240 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
10250 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  e(directory,..  
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10270 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71    Installer.Linq
10280 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
10290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
102a0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
102b0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
102c0 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
102e0 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72  staller.Designer
102f0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
10300 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
10310 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
10320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
10360 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
10370 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
10380 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20  CheckOption(..  
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
103a0 66 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20 20  f string arg..  
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
103c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103e0 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20  string result = 
103f0 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  arg;....        
10400 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
10410 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
10420 79 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20 20  y(result))..    
10430 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10450 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
10460 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
10470 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c  TE: Remove all l
10480 65 61 64 69 6e 67 20 73 77 69 74 63 68 20 63 68  eading switch ch
10490 61 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ars...          
104a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104c0 20 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75 6c    result = resul
104d0 74 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69 74  t.TrimStart(Swit
104e0 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20  chChars);....   
104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10500 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
10510 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
10520 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72 73  : How many chars
10530 20 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a   were removed?..
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10550 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
10560 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
10570 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67  count = arg.Leng
10580 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67  th - result.Leng
10590 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  th;....         
105a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
105b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105c0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73 20     // NOTE: Was 
105d0 74 68 65 72 65 20 61 74 20 6c 65 61 73 74 20 6f  there at least o
105e0 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne?..           
105f0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10610 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d   if (count > 0).
10620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10630 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10650 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
10660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
10670 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65  OTE: Ok, replace
10680 20 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d   their original.
10690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
106a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
106b0 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20    argument...   
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
106e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106f0 20 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a   arg = result;..
10700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10710 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10730 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59        // NOTE: Y
10740 65 73 2c 20 74 68 69 73 20 69 73 20 61 20 73 77  es, this is a sw
10750 69 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20  itch...         
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10770 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10780 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10790 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
107b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
107d0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
107e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
107f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10800 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
10810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10840 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
10850 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
10860 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74  ic bool MatchOpt
10870 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
10880 20 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67        string arg
10890 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
108a0 20 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e     string option
108b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
108c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
108d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
108e0 20 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d 20      if ((arg == 
108f0 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e  null) || (option
10900 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
10930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10940 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 43   return String.C
10950 6f 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20 6f  ompare(arg, 0, o
10960 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20  ption, 0,..     
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
10980 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e  rg.Length, Strin
10990 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
109a0 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
109b0 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
109c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
109d0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
109e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a10 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
10a20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
10a30 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65  atic bool? Parse
10a40 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20  Boolean(..      
10a50 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10a60 20 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20   text..         
10a70 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
10a80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10a90 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
10aa0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
10ab0 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  ty(text))..     
10ac0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ae0 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d    bool value;...
10af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b00 20 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72       if (bool.Tr
10b10 79 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75 74  yParse(text, out
10b20 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20   value))..      
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b40 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
10b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10b70 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
10b80 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
10b90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10ba0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
10bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10be0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
10bf0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
10c00 69 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65 45  ic object ParseE
10c10 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
10c20 20 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d 54        Type enumT
10c30 79 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ype,..          
10c40 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
10c50 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
10c60 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d      bool noCase.
10c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c80 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
10c90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10ca0 20 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70 65     if ((enumType
10cb0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e   == null) || !en
10cc0 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a  umType.IsEnum)..
10cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ce0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
10cf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10d00 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
10d10 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65  IsNullOrEmpty(te
10d20 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  xt))..          
10d30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
10d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10d60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d80 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72   return Enum.Par
10d90 73 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65 78  se(enumType, tex
10da0 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20  t, noCase);..   
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
10dd0 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10df0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10e10 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
10e40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10e50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10e60 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
10e70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10e80 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
10e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
10ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10ef0 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
10f00 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  tatic Methods.. 
10f10 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
10f20 63 20 73 74 61 74 69 63 20 43 6f 6e 66 69 67 75  c static Configu
10f30 72 61 74 69 6f 6e 20 43 72 65 61 74 65 44 65 66  ration CreateDef
10f40 61 75 6c 74 28 29 0d 0a 20 20 20 20 20 20 20 20  ault()..        
10f50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10f60 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
10f70 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d  rectory = null;.
10f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f90 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
10fa0 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Name = null;..  
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10fc0 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
10fd0 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
10fe0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10ff0 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
11000 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  me = null;....  
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
11020 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65  tDefaultFileName
11030 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
11040 20 20 20 20 20 20 20 20 72 65 66 20 64 69 72 65          ref dire
11050 63 74 6f 72 79 2c 20 72 65 66 20 63 6f 72 65 46  ctory, ref coreF
11060 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e  ileName, ref lin
11070 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  qFileName,..    
11080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11090 72 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ref designerFile
110a0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
110b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
110c0 20 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69   new Configurati
110d0 6f 6e 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  on(thisAssembly,
110e0 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79   null, directory
110f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11100 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e         coreFileN
11110 61 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ame, linqFileNam
11120 65 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  e, designerFileN
11130 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ame, null, null,
11140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11150 20 20 20 20 20 20 6e 75 6c 6c 2c 20 54 72 61 63        null, Trac
11160 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74  eOps.DebugFormat
11170 2c 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65  , TraceOps.Trace
11180 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
111a0 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c  tallFlags.Defaul
111b0 74 2c 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  t, TracePriority
111c0 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20 20 20  .Default,..     
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
111e0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
111f0 61 75 6c 74 2c 20 66 61 6c 73 65 2c 20 74 72 75  ault, false, tru
11200 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
11210 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20   false,..       
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
11230 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
11240 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
11250 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
11260 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lse,..          
11270 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c            false,
11280 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
11290 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
112a0 73 65 2c 20 74 72 75 65 2c 20 74 72 75 65 2c 0d  se, true, true,.
112b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
112c0 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73       false, fals
112d0 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
112e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
112f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
11300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
11340 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
11350 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
11360 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
11370 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
11380 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
11390 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72 67 73 28  c bool FromArgs(
113a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
113b0 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c    string[] args,
113c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
113d0 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a    bool strict,..
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113f0 72 65 66 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ref Configuratio
11400 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
11410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11420 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
11430 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
11440 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
11450 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11460 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
11470 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11490 20 20 69 66 20 28 61 72 67 73 20 3d 3d 20 6e 75    if (args == nu
114a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
114c0 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114e0 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
114f0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
11500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11510 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
11520 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72 61 74 69  on = Configurati
11530 6f 6e 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74  on.CreateDefault
11540 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
11550 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
11560 65 6e 67 74 68 20 3d 20 61 72 67 73 2e 4c 65 6e  ength = args.Len
11570 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
11580 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
11590 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
115a0 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20  index < length; 
115b0 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
115c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
115d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
115e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
115f0 61 72 67 20 3d 20 61 72 67 73 5b 69 6e 64 65 78  arg = args[index
11600 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11630 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
11640 45 3a 20 53 6b 69 70 20 61 6e 79 20 61 72 67 75  E: Skip any argu
11650 6d 65 6e 74 20 74 68 61 74 20 69 73 20 6e 75 6c  ment that is nul
11660 6c 20 28 3f 29 20 6f 72 20 61 6e 20 65 6d 70 74  l (?) or an empt
11670 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
11680 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11690 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20      string...   
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 20 20 20 2f 2f 0d 0a 20 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 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
116e0 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67 29 29 0d  llOrEmpty(arg)).
116f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
11710 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11750 20 4e 4f 54 45 3a 20 57 65 20 61 72 65 20 67 6f   NOTE: We are go
11760 69 6e 67 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  ing to modify th
11770 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d  e original argum
11780 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ent..           
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
117a0 20 20 20 20 20 20 62 79 20 72 65 6d 6f 76 69 6e        by removin
117b0 67 20 61 6e 79 20 6c 65 61 64 69 6e 67 20 6f 70  g any leading op
117c0 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72 73 3b  tion characters;
117d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
117e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
117f0 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 77 65     therefore, we
11800 20 75 73 65 20 61 20 6e 65 77 20 73 74 72 69 6e   use a new strin
11810 67 20 74 6f 20 68 6f 6c 64 20 74 68 65 0d 0a 20  g to hold the.. 
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11830 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
11840 6d 6f 64 69 66 69 65 64 20 61 72 67 75 6d 65 6e  modified argumen
11850 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
11860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
11870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11880 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
11890 65 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a  ewArg = arg;....
118a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118d0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c      // NOTE: All
118e0 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63   the supported c
118f0 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
11900 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20  ons must..      
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 20 20 2f 2f 20 20 20 20 20 20 20 62 65 67 69 6e    //       begin
11930 20 77 69 74 68 20 61 6e 20 6f 70 74 69 6f 6e 20   with an option 
11940 63 68 61 72 61 63 74 65 72 20 28 65 2e 67 2e 20  character (e.g. 
11950 61 20 6d 69 6e 75 73 0d 0a 20 20 20 20 20 20 20  a minus..       
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 20 2f 2f 20 20 20 20 20 20 20 6f 72 20 66 6f 72   //       or for
11980 77 61 72 64 20 73 6c 61 73 68 29 3b 20 61 74 74  ward slash); att
11990 65 6d 70 74 20 74 6f 20 76 61 6c 69 64 61 74 65  empt to validate
119a0 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20   that..         
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
119c0 2f 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 49 66  /       now.  If
119d0 20 77 65 20 66 61 69 6c 20 69 6e 20 73 74 72 69   we fail in stri
119e0 63 74 20 6d 6f 64 65 2c 20 77 65 20 61 72 65 20  ct mode, we are 
119f0 64 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  done;..         
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11a10 2f 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73  /       otherwis
11a20 65 2c 20 6a 75 73 74 20 73 6b 69 70 20 74 68 69  e, just skip thi
11a30 73 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61  s argument and a
11a40 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  dvance..        
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a60 2f 2f 20 20 20 20 20 20 20 74 6f 20 74 68 65 20  //       to the 
11a70 6e 65 78 74 20 6f 6e 65 2e 0d 0a 20 20 20 20 20  next one...     
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a90 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11ab0 66 20 28 21 43 68 65 63 6b 4f 70 74 69 6f 6e 28  f (!CheckOption(
11ac0 72 65 66 20 6e 65 77 41 72 67 29 29 0d 0a 20 20  ref newArg))..  
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ae0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b00 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
11b10 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
11b20 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b40 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
11b50 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
11b60 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
11b90 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
11ba0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bc0 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 73 75             "Unsu
11bd0 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
11be0 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 3a 20 7b  line argument: {
11bf0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
11c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c10 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
11c20 28 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74  (arg)), traceCat
11c30 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c50 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
11c60 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c80 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
11c90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cb0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cf0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11d00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11d10 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75  NOTE: All the su
11d20 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
11d30 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73  line options mus
11d40 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
11d50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11d60 20 20 20 20 68 61 76 65 20 61 20 76 61 6c 75 65      have a value
11d70 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 61 74 74  ; therefore, att
11d80 65 6d 70 74 20 74 6f 20 61 64 76 61 6e 63 65 0d  empt to advance.
11d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11da0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11db0 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20 20 49 66    to it now.  If
11dc0 20 77 65 20 66 61 69 6c 2c 20 77 65 20 61 72 65   we fail, we are
11dd0 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20   done...        
11de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11df0 2f 2f 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 69 6e 64 65              inde
11e10 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x++;....        
11e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e30 69 66 20 28 69 6e 64 65 78 20 3e 3d 20 6c 65 6e  if (index >= len
11e40 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gth)..          
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
11e80 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
11e90 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
11ec0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
11ed0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
11ee0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
11f10 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
11f20 28 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 20 20 20 20 20                  
11f40 20 20 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75     "Missing valu
11f50 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30  e for option: {0
11f60 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f80 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
11f90 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65  arg)), traceCate
11fa0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
11fd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ff0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
12000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
12060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12070 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
12080 3a 20 47 72 61 62 20 74 68 65 20 74 65 78 74 75  : Grab the textu
12090 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  al value of this
120a0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20   command line.. 
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120c0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
120d0 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  option...       
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
12110 69 6e 67 20 74 65 78 74 20 3d 20 61 72 67 73 5b  ing text = args[
12120 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12140 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12160 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  / NOTE: Figure o
12170 75 74 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64  ut which command
12180 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69   line option thi
12190 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  s is..          
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
121b0 20 20 20 20 20 20 20 28 62 61 73 65 64 20 6f 6e         (based on
121c0 20 61 20 70 61 72 74 69 61 6c 20 6e 61 6d 65 20   a partial name 
121d0 6d 61 74 63 68 29 20 61 6e 64 20 74 68 65 6e 20  match) and then 
121e0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
121f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12200 20 20 20 20 20 20 74 6f 20 69 6e 74 65 72 70 72        to interpr
12210 65 74 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  et the textual v
12220 61 6c 75 65 20 61 73 20 74 68 65 20 63 6f 72 72  alue as the corr
12230 65 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ect..           
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12250 20 20 20 20 20 20 74 79 70 65 2e 0d 0a 20 20 20        type...   
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12270 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12290 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
122a0 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 67  (newArg, "config
122b0 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122f0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12300 2e 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d  .configVersion =
12310 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12330 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
12340 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
12350 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12360 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d  newArg, "confirm
12370 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123a0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
123b0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
123c0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
123d0 0a 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 20 69 66 20               if 
123f0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
12400 0a 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 7b 0d 0a               {..
12420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12440 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
12450 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
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 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
12490 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
124a0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
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 20 20 20 20 20 20 74                 t
124d0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
124e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
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 20 20 20 20 20 20 20 20 20                  
12510 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
12520 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
12530 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
12540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12550 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
12560 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
12570 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
12580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125a0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
125b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125d0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
125e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12600 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
12610 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12630 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
12640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
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 63                 c
12680 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
12690 66 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  firm = (bool)val
126a0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
126e0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
126f0 41 72 67 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61  Arg, "coreFileNa
12700 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
12740 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65  nfiguration.core
12750 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b  FileName = text;
12760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12770 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12790 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
127a0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
127b0 2c 20 22 64 65 62 75 67 22 29 29 0d 0a 20 20 20  , "debug"))..   
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
127e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127f0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
12800 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
12810 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12830 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
12840 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12860 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12880 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
12890 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
128a0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
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 20 20 20 20 54 72 61               Tra
128d0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
128e0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
128f0 2c 0d 0a 20 20 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 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
12920 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
12930 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
12960 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
12970 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129a0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
129b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
129c0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
129f0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12a20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12a50 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12a80 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ac0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12ad0 74 69 6f 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f  tion.debug = (bo
12ae0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
12b20 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12b30 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75  on(newArg, "debu
12b40 67 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20  gFormat"))..    
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b80 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12b90 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 74  .debugFormat = t
12ba0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bc0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
12bd0 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75  Format = configu
12be0 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d  ration.debugForm
12bf0 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
12c30 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
12c40 41 72 67 2c 20 22 64 65 62 75 67 50 72 69 6f 72  Arg, "debugPrior
12c50 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ity"))..        
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
12c90 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61  bject value = Pa
12ca0 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
12cd0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c  (TracePriority),
12ce0 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d   text, true);...
12cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12d10 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
12d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d60 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
12d70 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
12d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12da0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
12db0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
12dc0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12df0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
12e00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e30 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76    "Invalid {0} v
12e40 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
12e80 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
12e90 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12ec0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12ef0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12f20 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12f50 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f90 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12fa0 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69  tion.debugPriori
12fb0 74 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72  ty = (TracePrior
12fc0 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ity)value;..    
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fe0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
12ff0 2e 44 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d  .DebugPriority =
13000 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
13010 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13030 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
13060 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
13070 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
13080 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 20 63 6f 6e 66              conf
130c0 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
130d0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  erFileName = tex
130e0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
130f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13110 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13120 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
13130 72 67 2c 20 22 64 69 72 65 63 74 6f 72 79 22 29  rg, "directory")
13140 29 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 7b 0d 0a 20 20             {..  
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
13180 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
13190 79 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20  y = text;....   
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131b0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
131e0 3a 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75 73 74  : *SPECIAL* Must
131f0 20 72 65 66 72 65 73 68 20 74 68 65 20 66 69 6c   refresh the fil
13200 65 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  e names..       
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 65       //       he
13230 72 65 20 62 65 63 61 75 73 65 20 74 68 65 20 75  re because the u
13240 6e 64 65 72 6c 79 69 6e 67 20 64 69 72 65 63 74  nderlying direct
13250 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13270 20 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63 68   //       has ch
13280 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  anged...        
13290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132c0 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46      string coreF
132d0 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67  ileName = config
132e0 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
132f0 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13310 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
13320 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
13330 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  oreFileName)).. 
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13360 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
13370 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63  th.GetFileName(c
13380 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
13390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
133b0 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
133c0 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61  Empty(coreFileNa
133d0 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133f0 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61        coreFileNa
13400 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43  me = Installer.C
13410 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  oreFileName;....
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
13440 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
13450 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
13460 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13480 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
13490 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
134a0 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d   coreFileName);.
134b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
134d0 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
134e0 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  me = configurati
134f0 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  on.linqFileName;
13500 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
13530 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69  llOrEmpty(linqFi
13540 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
13570 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65  leName = Path.Ge
13580 74 46 69 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69  tFileName(linqFi
13590 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
135a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135b0 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
135c0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
135d0 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d  (linqFileName)).
135e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
13610 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69  Installer.LinqFi
13620 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13640 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
13650 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  tion.linqFileNam
13660 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
13670 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
136a0 2e 64 69 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71  .directory, linq
136b0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
136e0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
136f0 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
13700 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.designerFileNa
13710 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
13720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13730 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
13740 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
13750 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
13760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
13790 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  e = Path.GetFile
137a0 4e 61 6d 65 28 64 65 73 69 67 6e 65 72 46 69 6c  Name(designerFil
137b0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137d0 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
137e0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
137f0 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
13800 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65      designerFile
13830 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72  Name = Installer
13840 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .DesignerFileNam
13850 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13870 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
13880 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
13890 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
138a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
138b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138c0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
138d0 64 69 72 65 63 74 6f 72 79 2c 20 64 65 73 69 67  directory, desig
138e0 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  nerFileName);.. 
138f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13900 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
13930 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
13940 69 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20  install"))..    
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13960 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13980 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
13990 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
139a0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139c0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
139d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
13a20 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13a30 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a50 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
13a60 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
13a70 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
13a80 0d 0a 20 20 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 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13ab0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13ac0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
13af0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
13b00 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
13b40 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
13b50 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13b80 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13bb0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
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 20 72 65 74               ret
13be0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
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 20 20 63 6f                co
13c10 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c50 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13c60 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62  ion.install = (b
13c70 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13cb0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
13cc0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73  ion(newArg, "ins
13cd0 74 61 6c 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20  tallFlags"))..  
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d10 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
13d20 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  e = ParseEnum(..
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 20 20 20 20 20 20                  
13d50 74 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c  typeof(InstallFl
13d60 61 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65  ags), text, true
13d70 29 3b 0d 0a 0d 0a 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 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
13da0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
13df0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
13e00 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
13e30 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
13e40 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e70 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
13e80 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
13e90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13eb0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
13ec0 69 6e 73 74 61 6c 6c 20 66 6c 61 67 73 20 76 61  install flags va
13ed0 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  lue: {0}",..    
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f00 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
13f10 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
13f20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13f50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
13f80 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fa0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
13fb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13fd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e  configuration.in
14000 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e  stallFlags = (In
14010 73 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65  stallFlags)value
14020 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14030 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14050 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
14060 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
14070 67 2c 20 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  g, "linqFileName
14080 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
140c0 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69  iguration.linqFi
140d0 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
14120 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
14130 22 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d  "logFileName")).
14140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14150 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
14180 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
14190 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
141d0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
141e0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f  on(newArg, "noCo
141f0 6d 70 61 63 74 22 29 29 0d 0a 20 20 20 20 20 20  mpact"))..      
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14210 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14230 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
14240 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
14250 29 3b 0d 0a 0d 0a 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 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
14280 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
142b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
142d0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
142e0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
14310 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
14320 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14350 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
14360 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
14370 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
143a0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
143b0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
143e0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
143f0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
14400 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14420 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
14430 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
14460 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14480 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
14490 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
144c0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14500 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
14510 6e 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62  n.noCompact = (b
14520 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14540 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14560 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
14570 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43  ion(newArg, "noC
14580 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20  onsole"))..     
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
145d0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
145e0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14600 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
14610 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14650 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
14660 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
14670 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
146a0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
146b0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
146c0 0a 20 20 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 20                  
146e0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
146f0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
14700 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
14730 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
14740 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
14770 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
14780 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
14790 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
147a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
147c0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
147f0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14810 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
14820 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
14850 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14890 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
148a0 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28  on.noConsole = (
148b0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
14900 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
14910 44 65 73 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20  Desktop"))..    
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
14960 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
14970 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
149a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
149f0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
14a00 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
14a30 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
14a40 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
14a50 0d 0a 20 20 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 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
14a80 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
14a90 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
14ac0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
14ad0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b00 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
14b10 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
14b20 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
14b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b40 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14b50 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14b80 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
14bb0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14be0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
14c30 69 6f 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20  ion.noDesktop = 
14c40 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
14c90 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
14ca0 6f 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20 20  oLog"))..       
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ce0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
14cf0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
14d00 3b 0d 0a 0d 0a 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 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
14d30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d70 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
14d80 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
14d90 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
14dc0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
14dd0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
14de0 20 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 20 20 20                  
14e00 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
14e10 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
14e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e40 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
14e50 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
14e60 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
14e90 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
14ea0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
14eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ed0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
14ee0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
14f10 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
14f40 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f60 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
14f70 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fb0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
14fc0 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76  .noLog = (bool)v
14fd0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15000 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
15010 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
15020 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32  ewArg, "noNetFx2
15030 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  0"))..          
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
15070 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
15080 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
15090 0d 0a 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 20 69 66                if
150b0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
150c0 0d 0a 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 7b 0d                {.
150e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
150f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15100 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
15110 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
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 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
15150 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
15160 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
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 20 20 20 20 20 20                  
15190 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
151a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151d0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
151e0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
151f0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15210 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
15220 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
15230 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15260 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
15270 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15290 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
152a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
152d0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
15300 3b 0d 0a 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 7d                 }
15320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
15350 4e 65 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29  NetFx20 = (bool)
15360 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15380 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15390 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
153a0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
153b0 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78  newArg, "noNetFx
153c0 33 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  35"))..         
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
153e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
15400 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
15410 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
15420 0a 0d 0a 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 20 69                 i
15440 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
15450 29 0d 0a 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 7b                 {
15470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15490 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
154a0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
154b0 28 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 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
154e0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
154f0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
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 20 20 20 20 20                  
15520 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
15530 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15560 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
15570 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
15580 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
15590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155a0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
155b0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
155c0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155f0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
15600 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
15630 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15650 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
15660 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
15670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15680 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
15690 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
156e0 6f 4e 65 74 46 78 33 35 20 3d 20 28 62 6f 6f 6c  oNetFx35 = (bool
156f0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15710 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15720 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
15730 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
15740 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
15750 78 34 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20  x40"))..        
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
15790 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
157a0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
157b0 0d 0a 0d 0a 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 20                  
157d0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
157e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15820 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
15830 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
15840 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15860 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
15870 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
15880 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
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 20 20 20 20                  
158b0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
158c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
158d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158f0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
15900 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
15910 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15930 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
15940 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
15950 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
15960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15980 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
15990 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
159c0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
159f0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a10 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
15a20 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
15a70 6e 6f 4e 65 74 46 78 34 30 20 3d 20 28 62 6f 6f  noNetFx40 = (boo
15a80 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15aa0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
15ac0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
15ad0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74  n(newArg, "noNet
15ae0 46 78 34 35 22 29 29 0d 0a 20 20 20 20 20 20 20  Fx45"))..       
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
15b30 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
15b40 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
15b70 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
15bc0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
15bd0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
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 54 72 61 63 65 50 72           TracePr
15c00 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
15c10 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
15c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
15c50 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
15c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c80 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
15c90 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
15ca0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
15cd0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
15ce0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
15cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
15d20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d40 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
15d50 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 20 20 72 65 74 75 72 6e            return
15d80 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15da0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
15db0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15df0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
15e00 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 28 62 6f  .noNetFx45 = (bo
15e10 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
15e50 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
15e60 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
15e70 74 46 78 34 35 31 22 29 29 0d 0a 20 20 20 20 20  tFx451"))..     
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
15ec0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
15ed0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
15f00 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
15f50 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
15f60 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f80 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
15f90 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
15fa0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
15fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
15fe0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
15ff0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
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 22 49 6e 76 61 6c 69 64          "Invalid
16020 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
16030 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
16060 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
16070 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
16080 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
16090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
160b0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
160e0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
16110 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
16140 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16160 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16180 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
16190 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20  on.noNetFx451 = 
161a0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
161f0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
16200 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22  oRuntimeVersion"
16210 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
16220 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16240 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
16250 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
16260 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
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 20 69 66 20 28              if (
16290 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
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 7b 0d 0a 20              {.. 
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
162e0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
162f0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
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 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
16330 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
16340 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
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 20 20 20 20 20 20 74 72                tr
16370 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
16380 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
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 20 20 20 20 20 20 20 20 20                  
163b0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
163c0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
163d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
163e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163f0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
16400 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
16410 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
16450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
16480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
164b0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164d0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
164e0 0a 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 7d 0d 0a               }..
16500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16520 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 75  nfiguration.noRu
16530 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 28  ntimeVersion = (
16540 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16560 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16580 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
16590 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
165a0 54 72 61 63 65 22 29 29 0d 0a 20 20 20 20 20 20  Trace"))..      
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165e0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
165f0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
16600 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16620 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
16630 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
16680 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
16690 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
166a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166b0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
166c0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
166d0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
166e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16700 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16710 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16720 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
16750 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
16760 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
16790 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
167a0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
167b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
167e0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
16810 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16840 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
16850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16860 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
16870 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
168c0 6e 2e 6e 6f 54 72 61 63 65 20 3d 20 28 62 6f 6f  n.noTrace = (boo
168d0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
16910 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
16920 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
16930 30 30 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20  005"))..        
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
16970 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
16980 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
16990 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169b0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
169c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a00 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
16a10 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
16a20 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
16a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a40 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
16a50 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
16a60 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
16a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a90 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
16aa0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
16ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ad0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
16ae0 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
16af0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b10 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
16b20 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
16b30 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
16b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b60 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
16b70 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
16ba0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16bd0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bf0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
16c00 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c40 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
16c50 6e 6f 56 73 32 30 30 35 20 3d 20 28 62 6f 6f 6c  noVs2005 = (bool
16c60 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16c90 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
16ca0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
16cb0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30  (newArg, "noVs20
16cc0 30 38 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  08"))..         
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
16d00 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
16d10 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
16d20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16d40 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
16d50 29 0d 0a 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 20 20 20 20 7b                 {
16d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
16da0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
16db0 28 0d 0a 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 20 20 20                  
16dd0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
16de0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
16df0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
16e30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
16e70 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
16e80 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
16eb0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
16ec0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
16ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
16f00 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
16f30 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
16f60 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f80 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
16f90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fd0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
16fe0 6f 56 73 32 30 30 38 20 3d 20 28 62 6f 6f 6c 29  oVs2008 = (bool)
16ff0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 7d 0d 0a 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 65 6c 73 65 20             else 
17030 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
17040 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31  newArg, "noVs201
17050 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  0"))..          
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
17090 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
170a0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
170b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
170d0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
170e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
17130 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
17140 0d 0a 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 20 20 20 20 20                  
17160 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
17170 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
17180 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
17190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
171c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
17200 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
17210 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17230 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
17240 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
17250 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17290 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172b0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
172c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
172f0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17310 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
17320 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
17370 56 73 32 30 31 30 20 3d 20 28 62 6f 6f 6c 29 76  Vs2010 = (bool)v
17380 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
173a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
173b0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
173c0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
173d0 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 32  ewArg, "noVs2012
173e0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
17420 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
17430 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
17440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17460 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
17470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
174c0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
174d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174f0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
17500 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
17510 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17540 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
17550 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
17590 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
175a0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175c0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
175d0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
175e0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
175f0 20 20 20 20 20 20 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 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
17620 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17640 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
17650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
17680 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176a0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
176b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
176d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
176f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
17700 73 32 30 31 32 20 3d 20 28 62 6f 6f 6c 29 76 61  s2012 = (bool)va
17710 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17740 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
17750 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
17760 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 33 22  wArg, "noVs2013"
17770 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
17780 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
177b0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
177c0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
177f0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17810 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17840 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
17850 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17880 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
17890 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
178a0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
178b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
178d0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
178e0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
17920 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
17930 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
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 46 6f 72 44 69 73 70 6c          ForDispl
17960 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
17970 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
179b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
179e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
17a10 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a30 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
17a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17a80 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
17a90 32 30 31 33 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  2013 = (bool)val
17aa0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ad0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
17ae0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
17af0 41 72 67 2c 20 22 70 65 72 55 73 65 72 22 29 29  Arg, "perUser"))
17b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17b10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
17b40 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
17b50 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
17b80 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ba0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
17bd0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
17be0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
17c20 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
17c30 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17c60 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
17c70 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17ca0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
17cb0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
17cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ce0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
17cf0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
17d00 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
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 20 20 20 20 20 20 74                 t
17d30 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
17d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
17da0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dc0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17de0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e00 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
17e10 69 67 75 72 61 74 69 6f 6e 2e 70 65 72 55 73 65  iguration.perUse
17e20 72 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  r = (bool)value;
17e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
17e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e60 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
17e70 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
17e80 2c 20 22 72 65 67 69 73 74 72 79 56 65 72 73 69  , "registryVersi
17e90 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  on"))..         
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17ed0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 72 65 67 69  nfiguration.regi
17ee0 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 74 65  stryVersion = te
17ef0 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
17f30 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
17f40 41 72 67 2c 20 22 73 74 72 69 63 74 22 29 29 0d  Arg, "strict")).
17f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f80 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
17f90 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
17fa0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
17fd0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ff0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18000 20 20 20 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 20 65 72 72 6f              erro
18020 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
18030 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
18040 20 20 20 20 20 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 20 20 20                  
18060 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
18070 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
18080 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
180b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
180c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
180d0 20 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 20 22 49                "I
180f0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
18100 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
18110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18130 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
18140 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
18150 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
18180 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
18190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181b0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
181f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
18280 54 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20 63 6f  TE: Allow the co
18290 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d  mmand line argum
182a0 65 6e 74 73 20 74 6f 0d 0a 20 20 20 20 20 20 20  ents to..       
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 76       //       ov
182d0 65 72 72 69 64 65 20 74 68 65 20 22 73 74 72 69  erride the "stri
182e0 63 74 6e 65 73 73 22 20 73 65 74 74 69 6e 67 0d  ctness" setting.
182f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
18310 20 20 20 20 20 20 70 72 6f 76 69 64 65 64 20 62        provided b
18320 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20  y our caller... 
18330 20 20 20 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 2f 2f 0d 0a 20             //.. 
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18360 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 63             stric
18370 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  t = (bool)value;
18380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18390 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183b0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
183c0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
183d0 2c 20 22 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  , "throwOnMissin
183e0 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  g"))..          
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
18420 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
18430 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
18440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18460 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
18470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184b0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
184c0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
184d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184f0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
18500 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
18510 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
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 20 20 20 20                  
18540 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
18550 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
18590 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
185a0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185c0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
185d0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
185e0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
18620 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18640 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
18650 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18670 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
18680 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186a0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
186b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
186c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 68  configuration.th
18700 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 28  rowOnMissing = (
18710 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18730 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
18760 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72  tion(newArg, "tr
18770 61 63 65 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20  aceFormat"))..  
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187b0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
187c0 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d  on.traceFormat =
187d0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
18800 63 65 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69  ceFormat = confi
18810 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f  guration.traceFo
18820 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18850 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
18860 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
18870 65 77 41 72 67 2c 20 22 74 72 61 63 65 50 72 69  ewArg, "tracePri
18880 6f 72 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20  ority"))..      
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188c0 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
188d0 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20  ParseEnum(..    
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
18900 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  of(TracePriority
18910 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d  ), text, true);.
18920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18940 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
18950 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18990 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
189a0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
189b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189d0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
189e0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
189f0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
18a30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
18a70 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18aa0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
18ab0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
18ac0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
18af0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18b20 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
18b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
18bd0 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f  ration.tracePrio
18be0 72 69 74 79 20 3d 20 28 54 72 61 63 65 50 72 69  rity = (TracePri
18bf0 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20  ority)value;..  
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
18c20 70 73 2e 54 72 61 63 65 50 72 69 6f 72 69 74 79  ps.TracePriority
18c30 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
18c40 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d  .tracePriority;.
18c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
18c90 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
18ca0 20 22 76 65 72 62 6f 73 65 22 29 29 0d 0a 20 20   "verbose"))..  
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
18cf0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
18d00 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
18d30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
18d80 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
18d90 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
18dc0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
18dd0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
18de0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e00 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
18e10 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
18e20 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
18e50 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
18e60 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e90 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
18ea0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
18eb0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
18ee0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18f10 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18f40 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
18fc0 61 74 69 6f 6e 2e 76 65 72 62 6f 73 65 20 3d 20  ation.verbose = 
18fd0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
19020 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76  ption(newArg, "v
19030 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 22 29  sVersionSuffix")
19040 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19050 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
19080 75 72 61 74 69 6f 6e 2e 76 73 56 65 72 73 69 6f  uration.vsVersio
19090 6e 53 75 66 66 69 78 20 3d 20 74 65 78 74 3b 0d  nSuffix = text;.
190a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
190b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
190e0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
190f0 20 22 77 68 61 74 49 66 22 29 29 0d 0a 20 20 20   "whatIf"))..   
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19130 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
19140 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
19150 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
19180 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
191d0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
191e0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19210 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
19220 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
19230 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19250 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
19260 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
19270 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19290 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
192a0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
192b0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192e0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
192f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
19300 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
19310 20 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 20 74 72 61 63 65 43            traceC
19330 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19360 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19390 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
193c0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
19410 74 69 6f 6e 2e 77 68 61 74 49 66 20 3d 20 28 62  tion.whatIf = (b
19420 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
19460 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
19470 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77 6f 77  ion(newArg, "wow
19480 36 34 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  64"))..         
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
194a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
194c0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
194d0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
194e0 0a 0d 0a 20 20 20 20 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 69                 i
19500 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
19510 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
19560 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
19570 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19590 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
195a0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
195b0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
195f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
19630 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
19640 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
19670 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
19680 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
196c0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
196f0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
19720 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
19750 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77   configuration.w
197a0 6f 77 36 34 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  ow64 = (bool)val
197b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
197f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19800 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
19830 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
19840 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
19870 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
19880 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
198b0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
198c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 73 75             "Unsu
198f0 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
19900 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d  line option: {0}
19910 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
19940 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  rg)), traceCateg
19950 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19970 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
19980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
199b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
199c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
199f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19a00 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
19a10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19a20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
19a30 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19a60 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
19a70 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
19a80 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
19a90 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
19ab0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
19ac0 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72  eCallback, e, tr
19ad0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
19ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19af0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61       error = "Fa
19b00 69 6c 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 63  iled to modify c
19b10 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d  onfiguration.";.
19b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19b30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19b40 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
19b50 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
19b60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19b70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
19b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bb0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
19bc0 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
19bd0 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
19be0 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
19bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
19c00 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
19c10 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20  Process(..      
19c20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
19c30 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20  [] args,..      
19c40 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
19c50 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
19c60 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
19c70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72          bool str
19c80 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ict,..          
19c90 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
19ca0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
19cb0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
19cc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19cd0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d00 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
19d10 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
19d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69   error = "Invali
19d60 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  d configuration.
19d70 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
19d80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19d90 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
19da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19dc0 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
19dd0 20 61 73 73 65 6d 62 6c 79 20 3d 20 63 6f 6e 66   assembly = conf
19de0 69 67 75 72 61 74 69 6f 6e 2e 61 73 73 65 6d 62  iguration.assemb
19df0 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ly;....         
19e00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
19e10 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29  ssembly == null)
19e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19e30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69   error = "Invali
19e60 64 20 61 73 73 65 6d 62 6c 79 2e 22 3b 0d 0a 20  d assembly.";.. 
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
19e90 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
19ea0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ec0 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
19ed0 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 29 0d 0a  ation.noTrace)..
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19f10 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
19f20 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20  n.noLog &&..    
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f40 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 49          String.I
19f50 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e  sNullOrEmpty(con
19f60 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
19f70 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fb0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 20 74 68   // NOTE: Use th
19fe0 65 20 64 65 66 61 75 6c 74 20 6c 6f 67 20 66 69  e default log fi
19ff0 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  le name...      
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a030 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1a040 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20  ion.logFileName 
1a050 3d 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65  = GetLogFileName
1a060 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a080 20 20 20 22 74 72 61 63 65 22 29 3b 0d 0a 20 20     "trace");..  
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1a0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
1a120 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f  guration.noConso
1a130 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le)..           
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1a190 4f 54 45 3a 20 49 6e 20 76 65 72 62 6f 73 65 20  OTE: In verbose 
1a1a0 6d 6f 64 65 2c 20 64 65 62 75 67 20 6f 75 74 70  mode, debug outp
1a1b0 75 74 20 28 74 68 61 74 20 6d 65 65 74 73 0d 0a  ut (that meets..
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a1e0 20 20 20 20 20 74 68 65 20 63 6f 6e 66 69 67 75       the configu
1a1f0 72 65 64 20 70 72 69 6f 72 69 74 79 20 63 72 69  red priority cri
1a200 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65 0d 0a  teria) will be..
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a230 20 20 20 20 20 64 69 73 70 6c 61 79 65 64 20 74       displayed t
1a240 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 3b 20 6f  o the console; o
1a250 74 68 65 72 77 69 73 65 2c 20 74 72 61 63 65 0d  therwise, trace.
1a260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a280 20 20 20 20 20 20 6f 75 74 70 75 74 20 28 74 68        output (th
1a290 61 74 20 6d 65 65 74 73 20 74 68 65 20 63 6f 6e  at meets the con
1a2a0 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74 79  figured priority
1a2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a2d0 20 20 20 20 20 20 20 63 72 69 74 65 72 69 61 29         criteria)
1a2e0 20 77 69 6c 6c 20 62 65 20 64 69 73 70 6c 61 79   will be display
1a2f0 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c  ed to the consol
1a300 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a320 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a340 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
1a350 6e 2e 64 65 62 75 67 29 0d 0a 20 20 20 20 20 20  n.debug)..      
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a370 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a3c0 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f  NOTE: Add the co
1a3d0 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74  nsole trace list
1a3e0 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20  ener to the..   
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a410 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20 74 72        list of tr
1a420 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20 6d 61  ace listeners ma
1a430 69 6e 74 61 69 6e 65 64 20 62 79 0d 0a 20 20 20  intained by..   
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a460 20 20 20 20 20 20 74 68 65 20 54 72 61 63 65 4f        the TraceO
1a470 70 73 20 63 6c 61 73 73 20 28 69 2e 65 2e 20 6f  ps class (i.e. o
1a480 6e 6c 79 20 6d 65 73 73 61 67 65 73 0d 0a 20 20  nly messages..  
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a4b0 20 20 20 20 20 20 20 74 68 61 74 20 6d 65 65 74         that meet
1a4c0 20 74 68 65 20 64 65 62 75 67 20 70 72 69 6f 72   the debug prior
1a4d0 69 74 79 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  ity will be..   
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a500 20 20 20 20 20 20 73 65 65 6e 20 6f 6e 20 74 68        seen on th
1a510 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20  e console)...   
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1a540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a560 20 54 72 61 63 65 4f 70 73 2e 53 65 74 75 70 44   TraceOps.SetupD
1a570 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28 29 3b  ebugListeners();
1a580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a5a0 0a 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 65 6c 73               els
1a5c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1a5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
1a630 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74  dd the console t
1a640 72 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f  race listener to
1a650 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
1a680 69 73 74 20 6f 66 20 62 75 69 6c 74 2d 69 6e 20  ist of built-in 
1a690 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20  trace listeners 
1a6a0 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  (i.e...         
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1a6d0 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73 20 74 68  only messages th
1a6e0 61 74 20 6d 65 65 74 20 74 68 65 20 74 72 61 63  at meet the trac
1a6f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 69 6f     //       prio
1a720 72 69 74 79 20 77 69 6c 6c 20 62 65 20 73 65 65  rity will be see
1a730 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65  n on the console
1a740 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a780 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69          Trace.Li
1a790 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20  steners.Add(new 
1a7a0 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74  ConsoleTraceList
1a7b0 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  ener());..      
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a840 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a860 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
1a870 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20  ion.noLog &&..  
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a890 20 20 20 20 20 20 20 20 20 20 21 53 74 72 69 6e            !Strin
1a8a0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
1a8b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f  configuration.lo
1a8c0 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  gFileName))..   
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a900 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e      Trace.Listen
1a910 65 72 73 2e 41 64 64 28 6e 65 77 20 54 65 78 74  ers.Add(new Text
1a920 57 72 69 74 65 72 54 72 61 63 65 4c 69 73 74 65  WriterTraceListe
1a930 6e 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ner(..          
1a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a950 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1a960 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
1a970 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a990 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9b0 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 65 63 68 6e    // NOTE: Techn
1a9c0 69 63 61 6c 6c 79 2c 20 77 65 20 63 72 65 61 74  ically, we creat
1a9d0 65 64 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e  ed the log file.
1a9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1aa00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
1aa20 6c 65 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20  lesCreated++;.. 
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1aa60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1aa70 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1aa90 2f 20 4e 4f 54 45 3a 20 44 75 6d 70 20 74 68 65  / NOTE: Dump the
1aaa0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6e   configuration n
1aab0 6f 77 20 69 6e 20 63 61 73 65 20 77 65 20 6e 65  ow in case we ne
1aac0 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  ed to..         
1aad0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1aae0 20 20 20 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74      troubleshoot
1aaf0 20 61 6e 79 20 69 73 73 75 65 73 2e 0d 0a 20 20   any issues...  
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab10 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1ab20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1ab30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
1ab40 67 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61  gPriority <= Tra
1ab50 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
1ab60 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1ab80 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 64  iguration.Dump(d
1ab90 65 62 75 67 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a  ebugCallback);..
1aba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1abb0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
1abc0 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69  uration.tracePri
1abd0 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50 72  ority <= TracePr
1abe0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a  iority.Medium)..
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1ac10 61 74 69 6f 6e 2e 44 75 6d 70 28 74 72 61 63 65  ation.Dump(trace
1ac20 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20  Callback);....  
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac40 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1ac50 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1ac60 45 3a 20 53 68 6f 77 20 77 68 65 72 65 20 77 65  E: Show where we
1ac70 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 66 72 6f   are running fro
1ac80 6d 20 61 6e 64 20 68 6f 77 20 77 65 20 77 65 72  m and how we wer
1ac90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1aca0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1acb0 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20  invoked...      
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1acd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ace0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 63        string loc
1acf0 61 74 69 6f 6e 20 3d 20 61 73 73 65 6d 62 6c 79  ation = assembly
1ad00 2e 4c 6f 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20  .Location;....  
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1ad30 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1ad40 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77  iority.MediumLow
1ad50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ad60 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1ad70 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1ad80 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1ad90 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 20 22 52 75 6e 6e 69 6e 67 20 65 78 65 63 75 74   "Running execut
1adc0 61 62 6c 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46  able is: {0}", F
1add0 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 74 69  orDisplay(locati
1ade0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ae00 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1ae10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ae20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
1ae30 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
1ae40 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
1ae50 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  mLow,..         
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1ae70 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1ae80 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1ae90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aeb0 20 20 20 20 20 22 4f 72 69 67 69 6e 61 6c 20 63       "Original c
1aec0 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20  ommand line is: 
1aed0 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
1aef0 6e 76 69 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61  nvironment.Comma
1af00 6e 64 4c 69 6e 65 29 2c 20 74 72 61 63 65 43 61  ndLine), traceCa
1af10 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af30 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1af40 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1af50 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d  rity.MediumLow,.
1af60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1af70 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1af80 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1af90 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1afa0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1afc0 52 75 6e 6e 69 6e 67 20 70 72 6f 63 65 73 73 20  Running process 
1afd0 69 73 20 7b 30 7d 2e 22 2c 20 49 73 36 34 42 69  is {0}.", Is64Bi
1afe0 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20  tProcess() ?..  
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b000 20 20 20 20 20 20 20 20 20 20 22 36 34 2d 62 69            "64-bi
1b010 74 22 20 3a 20 22 33 32 2d 62 69 74 22 29 2c 20  t" : "32-bit"), 
1b020 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1b030 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b040 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
1b050 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66  iguration.whatIf
1b060 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b070 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b090 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b0b0 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 64 65   NOTE: If the de
1b0c0 62 75 67 67 65 72 20 69 73 20 61 74 74 61 63 68  bugger is attach
1b0d0 65 64 20 61 6e 64 20 57 68 61 74 2d 49 66 20 6d  ed and What-If m
1b0e0 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ode..           
1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1b100 20 20 20 20 20 20 69 73 20 5b 6e 6f 77 5d 20 64        is [now] d
1b110 69 73 61 62 6c 65 64 2c 20 69 73 73 75 65 20 61  isabled, issue a
1b120 20 77 61 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20   warning...     
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b140 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b160 66 20 28 44 65 62 75 67 67 65 72 2e 49 73 41 74  f (Debugger.IsAt
1b170 74 61 63 68 65 64 29 0d 0a 20 20 20 20 20 20 20  tached)..       
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1b1a0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1b1b0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1b1c0 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1e0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
1b1f0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
1b200 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 20 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f        "Forced to
1b230 20 64 69 73 61 62 6c 65 20 5c 22 77 68 61 74 2d   disable \"what-
1b240 69 66 5c 22 20 6d 6f 64 65 20 77 69 74 68 20 22  if\" mode with "
1b250 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 20 20 20 20 22 64 65 62 75 67 67 65 72 20 61 74      "debugger at
1b280 74 61 63 68 65 64 2e 22 2c 20 74 72 61 63 65 43  tached.", traceC
1b290 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b2c0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b2f0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1b300 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1b310 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1b320 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b340 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1b350 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1b360 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 20 20 20 20 22 4e 6f 20 61 63 74 75 61 6c 20 63      "No actual c
1b390 68 61 6e 67 65 73 20 77 69 6c 6c 20 62 65 20 6d  hanges will be m
1b3a0 61 64 65 20 74 6f 20 74 68 69 73 20 22 20 2b 0d  ade to this " +.
1b3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 79               "sy
1b3d0 73 74 65 6d 20 62 65 63 61 75 73 65 20 5c 22 77  stem because \"w
1b3e0 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73  hat-if\" mode is
1b3f0 20 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20   enabled.",..   
1b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b410 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1b420 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b440 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b450 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b470 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63  / NOTE: If the c
1b480 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61 73 20  ommand line has 
1b490 6e 6f 74 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c  not been manuall
1b4a0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1b4b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1b4c0 63 6f 6e 66 69 72 6d 65 64 20 28 69 2e 65 2e 20  confirmed (i.e. 
1b4d0 76 69 61 20 74 68 65 20 65 78 70 6c 69 63 69 74  via the explicit
1b4e0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20   command line.. 
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69     //       opti
1b510 6f 6e 29 2c 20 74 68 65 6e 20 73 74 6f 70 20 70  on), then stop p
1b520 72 6f 63 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20  rocessing now.  
1b530 57 65 20 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20  We enforce..    
1b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b550 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20 72 75  //       this ru
1b560 6c 65 20 73 6f 20 74 68 61 74 20 73 69 6d 70 6c  le so that simpl
1b570 79 20 64 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e  y double-clickin
1b580 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  g the..         
1b590 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1b5a0 20 20 20 20 65 78 65 63 75 74 61 62 6c 65 20 77      executable w
1b5b0 69 6c 6c 20 6e 6f 74 20 72 65 73 75 6c 74 20 69  ill not result i
1b5c0 6e 20 61 6e 79 20 63 68 61 6e 67 65 73 20 62 65  n any changes be
1b5d0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
1b5e0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1b5f0 20 20 6d 61 64 65 20 74 6f 20 74 68 65 20 73 79    made to the sy
1b600 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20  stem...         
1b610 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
1b640 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a  ation.confirm)..
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b660 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1b680 72 72 6f 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63  rror = "Cannot c
1b690 6f 6e 74 69 6e 75 65 2c 20 74 68 65 20 5c 22 63  ontinue, the \"c
1b6a0 6f 6e 66 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20  onfirm\" option 
1b6b0 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  is " +..        
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6d0 20 20 20 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64      "not enabled
1b6e0 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  .";....         
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b700 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b720 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1b730 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b740 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
1b750 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1b760 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1b770 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
1b780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b7a0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1b7b0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1b7c0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
1b7d0 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1b7f0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1b800 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20  aceCallback, e, 
1b810 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1b820 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b830 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1b840 46 61 69 6c 65 64 20 74 6f 20 70 72 6f 63 65 73  Failed to proces
1b850 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  s configuration.
1b860 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1b870 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b880 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b890 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1b8a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b8b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1b8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1b900 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
1b910 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
1b920 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
1b930 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
1b940 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f  public static bo
1b950 6f 6c 20 43 68 65 63 6b 52 75 6e 74 69 6d 65 56  ol CheckRuntimeV
1b960 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
1b970 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
1b980 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
1b990 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
1b9a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69         bool stri
1b9b0 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct,..           
1b9c0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1b9d0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
1b9e0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1b9f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ba00 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1ba20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ba30 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
1ba40 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ration == null).
1ba50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ba60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba80 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64  error = "Invalid
1ba90 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
1baa0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bab0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1bac0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1bae0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1baf0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bb10 2f 20 4e 4f 54 45 3a 20 57 68 61 74 20 76 65 72  / NOTE: What ver
1bb20 73 69 6f 6e 20 6f 66 20 74 68 65 20 72 75 6e 74  sion of the runt
1bb30 69 6d 65 20 77 61 73 20 74 68 65 20 63 6f 72 65  ime was the core
1bb40 20 28 70 72 69 6d 61 72 79 29 0d 0a 20 20 20 20   (primary)..    
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb60 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c  //       assembl
1bb70 79 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e  y compiled again
1bb80 73 74 20 28 65 2e 67 2e 20 22 76 32 2e 30 2e 35  st (e.g. "v2.0.5
1bb90 30 37 32 37 22 20 6f 72 0d 0a 20 20 20 20 20 20  0727" or..      
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bbb0 20 20 20 20 20 20 20 22 76 34 2e 30 2e 33 30 33         "v4.0.303
1bbc0 31 39 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  19")...         
1bbd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 49 6d     string coreIm
1bc00 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1bc10 6e 20 3d 20 47 65 74 49 6d 61 67 65 52 75 6e 74  n = GetImageRunt
1bc20 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  imeVersion(..   
1bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc40 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1bc50 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.coreFileName)
1bc60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1bc70 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc90 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61 6c 6c   // NOTE: We all
1bca0 6f 77 20 74 68 65 20 61 63 74 75 61 6c 20 69 6d  ow the actual im
1bcb0 61 67 65 20 72 75 6e 74 69 6d 65 20 63 68 65 63  age runtime chec
1bcc0 6b 69 6e 67 20 74 6f 20 62 65 0d 0a 20 20 20 20  king to be..    
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bce0 2f 2f 20 20 20 20 20 20 20 62 79 70 61 73 73 65  //       bypasse
1bcf0 64 20 76 69 61 20 74 68 65 20 22 2d 6e 6f 52 75  d via the "-noRu
1bd00 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 20 63 6f  ntimeVersion" co
1bd10 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20  mmand line..    
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd30 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e  //       option.
1bd40 20 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69    The command li
1bd50 6e 65 20 6f 70 74 69 6f 6e 20 69 73 20 69 6e 74  ne option is int
1bd60 65 6e 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20  ended for..     
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bd80 2f 20 20 20 20 20 20 20 65 78 70 65 72 74 20 75  /       expert u
1bd90 73 65 20 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20  se only...      
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bdc0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
1bdd0 75 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d  uration.noRuntim
1bde0 65 56 65 72 73 69 6f 6e 29 0d 0a 20 20 20 20 20  eVersion)..     
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1be00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1be20 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1be30 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1be40 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1be70 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1be80 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1be90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1beb0 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
1bec0 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
1bed0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20   Framework {0}; 
1bee0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 20 22 68 6f 77 65 76 65 72 2c 20 69 6e 73 74 61   "however, insta
1bf10 6c 6c 61 74 69 6f 6e 20 72 65 73 74 72 69 63 74  llation restrict
1bf20 69 6f 6e 73 20 62 61 73 65 64 20 6f 6e 20 74 68  ions based on th
1bf30 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  is " +..        
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf50 20 20 20 20 22 66 61 63 74 20 68 61 76 65 20 62      "fact have b
1bf60 65 65 6e 20 64 69 73 61 62 6c 65 64 20 76 69 61  een disabled via
1bf70 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
1bf80 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfa0 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69    coreImageRunti
1bfb0 6d 65 56 65 72 73 69 6f 6e 29 2c 20 74 72 61 63  meVersion), trac
1bfc0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfe0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1bff0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1c000 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c020 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1c030 20 20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44            // TOD
1c040 4f 3a 20 52 65 73 74 72 69 63 74 20 74 68 65 20  O: Restrict the 
1c050 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 61  configuration ba
1c060 73 65 64 20 6f 6e 20 77 68 69 63 68 20 69 6d 61  sed on which ima
1c070 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ge..            
1c080 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1c090 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e   runtime version
1c0a0 73 20 28 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72  s (which more-or
1c0b0 2d 6c 65 73 73 20 63 6f 72 72 65 73 70 6f 6e 64  -less correspond
1c0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
1c0e0 6f 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  o .NET Framework
1c0f0 20 76 65 72 73 69 6f 6e 73 29 20 61 72 65 20 73   versions) are s
1c100 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 65 0d  upported by the.
1c110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c120 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 76 65       //       ve
1c130 72 73 69 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c  rsions of Visual
1c140 20 53 74 75 64 69 6f 20 74 68 61 74 20 61 72 65   Studio that are
1c150 20 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20   installed...   
1c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c170 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1c180 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
1c190 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1c1a0 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69  y(coreImageRunti
1c1b0 6d 65 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20  meVersion))..   
1c1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1c1f0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 63 6f 72  r = "invalid cor
1c200 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e  e file image run
1c210 74 69 6d 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  time version";..
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 72 65 74 75 72 6e 20 66          return f
1c240 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1c250 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e    else if (Strin
1c280 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  g.Equals(..     
1c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2a0 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65         coreImage
1c2b0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20  RuntimeVersion, 
1c2c0 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
1c2d0 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  eVersion,..     
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2f0 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d         StringCom
1c300 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29  parison.Ordinal)
1c310 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c320 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c340 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c360 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 43   NOTE: For the C
1c370 4c 52 20 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c  LR v2.0 runtime,
1c380 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64 69   make sure we di
1c390 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  sable..         
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c3b0 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74 74 65  /       any atte
1c3c0 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20 66 6f  mpt to use it fo
1c3d0 72 20 74 68 69 6e 67 73 20 74 68 61 74 20 72 65  r things that re
1c3e0 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20  quire..         
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c400 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73 65 6d  /       an assem
1c410 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72  bly compiled for
1c420 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20   the CLR v4.0.  
1c430 49 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  It is..         
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c450 2f 20 20 20 20 20 20 20 75 6e 63 65 72 74 61 69  /       uncertai
1c460 6e 20 69 66 20 74 68 69 73 20 69 73 20 61 63 74  n if this is act
1c470 75 61 6c 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20  ually a problem 
1c480 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  in..            
1c490 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1c4a0 20 20 20 20 20 70 72 61 63 74 69 63 65 20 61 73       practice as
1c4b0 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20 63 61   the CLR v4.0 ca
1c4c0 6e 20 6c 6f 61 64 20 61 6e 64 20 75 73 65 20 61  n load and use a
1c4d0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
1c4e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1c4f0 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d      assembly com
1c500 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 43  piled with the C
1c510 4c 52 20 76 32 2e 30 3b 20 68 6f 77 65 76 65 72  LR v2.0; however
1c520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c530 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1c540 20 20 20 20 73 69 6e 63 65 20 74 68 69 73 20 70      since this p
1c550 72 6f 6a 65 63 74 20 6f 66 66 65 72 73 20 62 6f  roject offers bo
1c560 74 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  th configuration
1c570 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
1c580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1c590 20 20 20 20 20 77 65 20 63 75 72 72 65 6e 74 6c       we currentl
1c5a0 79 20 64 69 73 61 6c 6c 6f 77 20 74 68 69 73 20  y disallow this 
1c5b0 6d 69 73 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20  mismatch...     
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1c5f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
1c600 65 74 46 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a  etFx40 = true;..
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1c630 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20  ation.noNetFx45 
1c640 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c660 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1c670 6f 4e 65 74 46 78 34 35 31 20 3d 20 74 72 75 65  oNetFx451 = true
1c680 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c690 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c6a0 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
1c6b0 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  0 = true;..     
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6d0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1c6e0 2e 6e 6f 56 73 32 30 31 32 20 3d 20 74 72 75 65  .noVs2012 = true
1c6f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c700 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c710 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
1c720 33 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  3 = true;....   
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1c750 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1c760 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1c770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1c790 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1c7a0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1c7b0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7d0 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
1c7e0 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66  ly is compiled f
1c7f0 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  or the .NET Fram
1c800 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a  ework {0}, " +..
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c820 20 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70              "sup
1c830 70 6f 72 74 20 66 6f 72 20 74 68 65 20 2e 4e 45  port for the .NE
1c840 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20  T Framework {1} 
1c850 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e  is now disabled.
1c860 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c880 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
1c890 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49  eVersion, CLRv4I
1c8a0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1c8b0 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8d0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1c8e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c8f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1c910 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71  se if (String.Eq
1c920 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c940 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74     coreImageRunt
1c950 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76  imeVersion, CLRv
1c960 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
1c970 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
1c9a0 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c9f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1ca00 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76  E: For the CLR v
1ca10 34 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b  4.0 runtime, mak
1ca20 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c  e sure we disabl
1ca30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1ca40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1ca50 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20      any attempt 
1ca60 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74 68  to use it for th
1ca70 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69 72  ings that requir
1ca80 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1ca90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1caa0 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20      an assembly 
1cab0 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
1cac0 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20   CLR v2.0...    
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb00 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1cb10 4e 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d  NetFx20 = true;.
1cb20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb30 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1cb40 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35  ration.noNetFx35
1cb50 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb70 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1cb80 6e 6f 56 73 32 30 30 35 20 3d 20 74 72 75 65 3b  noVs2005 = true;
1cb90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cba0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1cbb0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
1cbc0 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbe0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1cbf0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1cc00 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c  Priority.Medium,
1cc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1cc30 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1cc40 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1cc50 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
1cc80 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f  y is compiled fo
1cc90 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
1cca0 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20  work {0}, " +.. 
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccc0 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70 70             "supp
1ccd0 6f 72 74 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  ort for the .NET
1cce0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69   Framework {1} i
1ccf0 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22  s now disabled."
1cd00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1cd20 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49  orDisplay(CLRv4I
1cd30 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1cd40 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd60 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
1cd70 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
1cd80 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1cdb0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
1cdc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cde0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
1ce20 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce40 20 20 20 20 20 20 20 20 20 20 20 22 75 6e 73 75             "unsu
1ce50 70 70 6f 72 74 65 64 20 63 6f 72 65 20 66 69 6c  pported core fil
1ce60 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20  e image runtime 
1ce70 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a 20 20 20  version " +..   
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce90 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2c 20 6d           "{0}, m
1cea0 75 73 74 20 62 65 20 7b 31 7d 20 6f 72 20 7b 32  ust be {1} or {2
1ceb0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ced0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65   ForDisplay(core
1cee0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1cef0 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf10 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c     ForDisplay(CL
1cf20 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv2ImageRuntimeV
1cf30 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf50 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1cf60 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69  (CLRv4ImageRunti
1cf70 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a  meVersion));....
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1cfa0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1cfb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfd0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
1cfe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cff0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d000 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1d010 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
1d020 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d040 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1d050 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1d060 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1d090 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1d0a0 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61  back, e, traceCa
1d0b0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0d0 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20  error = "Failed 
1d0e0 74 6f 20 63 68 65 63 6b 20 69 6d 61 67 65 20 72  to check image r
1d0f0 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 2e 22  untime version."
1d100 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1d120 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1d130 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1d140 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1d150 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1d160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1d170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d1b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1d1c0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65  region Public Me
1d1d0 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
1d1e0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 48     public bool H
1d1f0 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20  asFlags(..      
1d200 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
1d210 6c 46 6c 61 67 73 20 68 61 73 46 6c 61 67 73 2c  lFlags hasFlags,
1d220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d230 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20    bool all..    
1d240 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1d250 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1d270 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   (all)..        
1d280 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1d290 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67  rn ((installFlag
1d2a0 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 3d 3d  s & hasFlags) ==
1d2b0 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20 20   hasFlags);..   
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1d2d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1d2e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28         return ((
1d2f0 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68  installFlags & h
1d300 61 73 46 6c 61 67 73 29 20 21 3d 20 49 6e 73 74  asFlags) != Inst
1d310 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d  allFlags.None);.
1d320 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1d340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d380 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1d390 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 4c   public bool IsL
1d3a0 69 6e 71 53 75 70 70 6f 72 74 65 64 28 29 0d 0a  inqSupported()..
1d3b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d3d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1d3e0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75     // NOTE: Retu
1d3f0 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  rn non-zero if t
1d400 68 65 20 4c 49 4e 51 20 61 73 73 65 6d 62 6c 79  he LINQ assembly
1d410 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20   should be..    
1d420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1d430 20 20 20 20 20 70 72 6f 63 65 73 73 65 64 20 64       processed d
1d440 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61 6c  uring the instal
1d450 6c 2e 20 20 49 66 20 74 68 65 20 74 61 72 67 65  l.  If the targe
1d460 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  t is..          
1d470 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 56        //       V
1d480 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30  isual Studio 200
1d490 35 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 72  5, this should r
1d4a0 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20  eturn zero...   
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1d4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d4d0 20 72 65 74 75 72 6e 20 21 6e 6f 4e 65 74 46 78   return !noNetFx
1d4e0 33 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 30  35 || !noNetFx40
1d4f0 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 20 7c   || !noNetFx45 |
1d500 7c 20 21 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a  | !noNetFx451;..
1d510 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d520 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1d530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d580 70 75 62 6c 69 63 20 76 6f 69 64 20 44 75 6d 70  public void Dump
1d590 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1d5a0 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
1d5b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 0d 0a   traceCallback..
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1d5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d5f0 20 20 69 66 20 28 74 72 61 63 65 43 61 6c 6c 62    if (traceCallb
1d600 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack != null)..  
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1d620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d630 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1d640 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1d650 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1d660 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1d680 73 73 65 6d 62 6c 79 22 2c 20 46 6f 72 44 69 73  ssembly", ForDis
1d690 70 6c 61 79 28 61 73 73 65 6d 62 6c 79 29 29 2c  play(assembly)),
1d6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6b0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d6c0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1d6f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1d700 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1d710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d720 20 20 20 20 20 20 20 20 20 20 22 4c 6f 67 46 69            "LogFi
1d730 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
1d740 6c 61 79 28 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  lay(logFileName)
1d750 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1d760 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d770 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d790 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1d7a0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1d7b0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1d7c0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 69 72              "Dir
1d7e0 65 63 74 6f 72 79 22 2c 20 46 6f 72 44 69 73 70  ectory", ForDisp
1d7f0 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
1d800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d810 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d820 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1d830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d840 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1d850 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1d860 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1d870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d880 20 20 20 20 20 20 20 20 20 20 22 43 6f 72 65 46            "CoreF
1d890 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
1d8a0 70 6c 61 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d  play(coreFileNam
1d8b0 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d8d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d8f0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1d900 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1d910 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1d920 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c                "L
1d940 69 6e 71 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  inqFileName", Fo
1d950 72 44 69 73 70 6c 61 79 28 6c 69 6e 71 46 69 6c  rDisplay(linqFil
1d960 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1d990 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d9a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d9b0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1d9c0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1d9d0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9f0 20 20 22 44 65 73 69 67 6e 65 72 46 69 6c 65 4e    "DesignerFileN
1da00 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
1da10 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  (designerFileNam
1da20 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1da40 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1da50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1da60 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1da70 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1da80 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1da90 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52                "R
1dab0 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 22 2c  egistryVersion",
1dac0 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 67 69   ForDisplay(regi
1dad0 73 74 72 79 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  stryVersion)),..
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1db00 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1db10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1db20 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1db30 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1db40 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db60 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 67 56          "ConfigV
1db70 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70  ersion", ForDisp
1db80 6c 61 79 28 63 6f 6e 66 69 67 56 65 72 73 69 6f  lay(configVersio
1db90 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1dbb0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1dbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dbd0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1dbe0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1dbf0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1dc00 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56                "V
1dc20 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 22 2c  sVersionSuffix",
1dc30 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
1dc40 72 73 69 6f 6e 53 75 66 66 69 78 29 29 2c 0d 0a  rsionSuffix)),..
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1dc70 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1dc90 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1dca0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1dcb0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 20 20 20 20 20 20 22 44 65 62 75 67 46 6f          "DebugFo
1dce0 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61  rmat", ForDispla
1dcf0 79 28 64 65 62 75 67 46 6f 72 6d 61 74 29 29 2c  y(debugFormat)),
1dd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dd10 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1dd20 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd40 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1dd50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1dd60 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1dd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dd80 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65            "Trace
1dd90 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70  Format", ForDisp
1dda0 6c 61 79 28 74 72 61 63 65 46 6f 72 6d 61 74 29  lay(traceFormat)
1ddb0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ddd0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddf0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1de00 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1de10 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1de20 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1de30 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73              "Ins
1de40 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46 6f 72 44  tallFlags", ForD
1de50 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 46 6c  isplay(installFl
1de60 61 67 73 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ags)),..        
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1de90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1dea0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1deb0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1dec0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ded0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1def0 22 44 65 62 75 67 50 72 69 6f 72 69 74 79 22 2c  "DebugPriority",
1df00 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75   ForDisplay(debu
1df10 67 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20  gPriority)),..  
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df30 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1df40 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1df50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1df60 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1df70 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1df80 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1df90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfa0 20 20 20 20 20 20 22 54 72 61 63 65 50 72 69 6f        "TracePrio
1dfb0 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61  rity", ForDispla
1dfc0 79 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 29  y(tracePriority)
1dfd0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1dfe0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1dff0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e010 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e020 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e030 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e040 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e050 20 20 20 20 20 20 20 20 20 20 20 20 22 50 65 72              "Per
1e060 55 73 65 72 22 2c 20 46 6f 72 44 69 73 70 6c 61  User", ForDispla
1e070 79 28 70 65 72 55 73 65 72 29 29 2c 0d 0a 20 20  y(perUser)),..  
1e080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e090 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e0a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e0c0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e0d0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e0e0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e100 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 22 2c        "Install",
1e110 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74   ForDisplay(inst
1e120 61 6c 6c 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  all)),..        
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e140 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e150 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e160 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e170 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e180 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e190 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1b0 22 57 6f 77 36 34 22 2c 20 46 6f 72 44 69 73 70  "Wow64", ForDisp
1e1c0 6c 61 79 28 77 6f 77 36 34 29 29 2c 0d 0a 20 20  lay(wow64)),..  
1e1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e1f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e210 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e220 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e230 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e250 20 20 20 20 20 20 22 4e 6f 52 75 6e 74 69 6d 65        "NoRuntime
1e260 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73  Version", ForDis
1e270 70 6c 61 79 28 6e 6f 52 75 6e 74 69 6d 65 56 65  play(noRuntimeVe
1e280 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2a0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e2b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e2c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e2d0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1e2e0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1e2f0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e310 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c 20 46    "NoDesktop", F
1e320 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44 65 73 6b  orDisplay(noDesk
1e330 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  top)),..        
1e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e350 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e360 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e370 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e380 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e390 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e3a0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3c0 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46 6f 72  "NoCompact", For
1e3d0 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70 61 63  Display(noCompac
1e3e0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e400 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e420 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e430 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e440 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e450 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1e470 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f 72 44 69  oNetFx20", ForDi
1e480 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32 30 29  splay(noNetFx20)
1e490 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e4b0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e4e0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e4f0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e500 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e510 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e              "NoN
1e520 65 74 46 78 33 35 22 2c 20 46 6f 72 44 69 73 70  etFx35", ForDisp
1e530 6c 61 79 28 6e 6f 4e 65 74 46 78 33 35 29 29 2c  lay(noNetFx35)),
1e540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e550 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e560 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e580 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e590 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e5a0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e5c0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74            "NoNet
1e5d0 46 78 34 30 22 2c 20 46 6f 72 44 69 73 70 6c 61  Fx40", ForDispla
1e5e0 79 28 6e 6f 4e 65 74 46 78 34 30 29 29 2c 0d 0a  y(noNetFx40)),..
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e610 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e630 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1e640 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1e650 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e670 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
1e680 34 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  45", ForDisplay(
1e690 6e 6f 4e 65 74 46 78 34 35 29 29 2c 0d 0a 20 20  noNetFx45)),..  
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e6c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e6e0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e6f0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e700 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e720 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35        "NoNetFx45
1e730 31 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  1", ForDisplay(n
1e740 6f 4e 65 74 46 78 34 35 31 29 29 2c 0d 0a 20 20  oNetFx451)),..  
1e750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e760 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e770 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e790 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e7a0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e7b0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 35 22        "NoVs2005"
1e7e0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1e7f0 73 32 30 30 35 29 29 2c 0d 0a 20 20 20 20 20 20  s2005)),..      
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e810 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e820 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e830 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e840 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1e850 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1e860 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 20 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f    "NoVs2008", Fo
1e890 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30  rDisplay(noVs200
1e8a0 38 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  8)),..          
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e8c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e8e0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e8f0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e900 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e910 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1e930 6f 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69 73  oVs2010", ForDis
1e940 70 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29 2c  play(noVs2010)),
1e950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e960 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e970 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e990 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e9a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e9b0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e9d0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
1e9e0 30 31 32 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  012", ForDisplay
1e9f0 28 6e 6f 56 73 32 30 31 32 29 29 2c 0d 0a 20 20  (noVs2012)),..  
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1ea20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ea40 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ea50 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1ea60 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea80 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 33 22        "NoVs2013"
1ea90 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1eaa0 73 32 30 31 33 29 29 2c 0d 0a 20 20 20 20 20 20  s2013)),..      
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eac0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1ead0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1eae0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1eaf0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1eb00 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1eb10 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb30 20 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f 72    "NoTrace", For
1eb40 44 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65 29  Display(noTrace)
1eb50 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1eb70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1eba0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1ebb0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1ebc0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43              "NoC
1ebe0 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73 70  onsole", ForDisp
1ebf0 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c  lay(noConsole)),
1ec00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ec10 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1ec20 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec40 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1ec50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1ec60 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1ec70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ec80 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f 67            "NoLog
1ec90 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1eca0 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  Log)),..        
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecc0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ecd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ece0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1ecf0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1ed00 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ed10 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed30 22 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22  "ThrowOnMissing"
1ed40 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 68 72  , ForDisplay(thr
1ed50 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 29 2c 0d 0a  owOnMissing)),..
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1ed80 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1eda0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1edb0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1edc0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ede0 20 20 20 20 20 20 20 20 22 57 68 61 74 49 66 22          "WhatIf"
1edf0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61  , ForDisplay(wha
1ee00 74 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  tIf)),..        
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ee30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ee40 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1ee50 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1ee60 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ee70 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee90 22 44 65 62 75 67 22 2c 20 46 6f 72 44 69 73 70  "Debug", ForDisp
1eea0 6c 61 79 28 64 65 62 75 67 29 29 2c 0d 0a 20 20  lay(debug)),..  
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eec0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1eed0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1eef0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ef00 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1ef10 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef30 20 20 20 20 20 20 22 56 65 72 62 6f 73 65 22 2c        "Verbose",
1ef40 20 46 6f 72 44 69 73 70 6c 61 79 28 76 65 72 62   ForDisplay(verb
1ef50 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ose)),..        
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef70 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ef80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ef90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1efa0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1efb0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1efc0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efe0 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44 69  "Confirm", ForDi
1eff0 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29 2c  splay(confirm)),
1f000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f010 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f020 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f040 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f090 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
1f0a0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1f0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f0d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f0e0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1f0f0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1f100 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f120 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1f130 54 69 74 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20  Title",..       
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1f160 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  GetAssemblyTitle
1f170 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20  (assembly))),.. 
1f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f190 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1f1a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1f1d0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1f1e0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1f1f0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f210 20 20 20 22 41 73 73 65 6d 62 6c 79 43 6f 6e 66     "AssemblyConf
1f220 69 67 75 72 61 74 69 6f 6e 22 2c 0d 0a 20 20 20  iguration",..   
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1f250 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79 43  lay(GetAssemblyC
1f260 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 61 73 73  onfiguration(ass
1f270 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20  embly))),..     
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f290 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1f2a0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1f2d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1f2f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1f300 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f350 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1f360 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
1f370 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
1f380 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
1f390 79 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20  y assembly;..   
1f3a0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1f3b0 41 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c  Assembly Assembl
1f3c0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1f3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f3e0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61    get { return a
1f3f0 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20  ssembly; }..    
1f400 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1f410 7b 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c  { assembly = val
1f420 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1f430 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f440 20 20 20 20 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 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f490 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1f4a0 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d  tring logFileNam
1f4b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1f4c0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f  public string Lo
1f4d0 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  gFileName..     
1f4e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f4f0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1f500 72 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61  return logFileNa
1f510 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1f520 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 67         set { log
1f530 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
1f540 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f550 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f560 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f5b0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1f5c0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a  ing directory;..
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1f5e0 69 63 20 73 74 72 69 6e 67 20 44 69 72 65 63 74  ic string Direct
1f5f0 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
1f600 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f610 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1f620 20 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20   directory; }.. 
1f630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f640 65 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20 3d  et { directory =
1f650 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1f660 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f670 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f6c0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1f6d0 74 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69  te string coreFi
1f6e0 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
1f6f0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1f700 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d  ng CoreFileName.
1f710 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f730 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 72  get { return cor
1f740 65 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  eFileName; }..  
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1f760 74 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  t { coreFileName
1f770 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1f780 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f790 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1f7f0 76 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e 71  vate string linq
1f800 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
1f810 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1f820 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d  ring LinqFileNam
1f830 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
1f840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f850 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c    get { return l
1f860 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  inqFileName; }..
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 73 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61  set { linqFileNa
1f890 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
1f8a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f900 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1f910 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65  rivate string de
1f920 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
1f930 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1f940 6c 69 63 20 73 74 72 69 6e 67 20 44 65 73 69 67  lic string Desig
1f950 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  nerFileName..   
1f960 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f970 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1f980 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65  { return designe
1f990 72 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  rFileName; }..  
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1f9b0 74 20 7b 20 64 65 73 69 67 6e 65 72 46 69 6c 65  t { designerFile
1f9c0 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
1f9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1f9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa30 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1fa40 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1fa50 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b  registryVersion;
1fa60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1fa70 62 6c 69 63 20 73 74 72 69 6e 67 20 52 65 67 69  blic string Regi
1fa80 73 74 72 79 56 65 72 73 69 6f 6e 0d 0a 20 20 20  stryVersion..   
1fa90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1fab0 7b 20 72 65 74 75 72 6e 20 72 65 67 69 73 74 72  { return registr
1fac0 79 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20  yVersion; }..   
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1fae0 20 7b 20 72 65 67 69 73 74 72 79 56 65 72 73 69   { registryVersi
1faf0 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  on = value; }.. 
1fb00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1fb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1fb60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1fb70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63 6f  rivate string co
1fb80 6e 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  nfigVersion;..  
1fb90 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1fba0 20 73 74 72 69 6e 67 20 43 6f 6e 66 69 67 56 65   string ConfigVe
1fbb0 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  rsion..         
1fbc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1fbd0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1fbe0 72 6e 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e  rn configVersion
1fbf0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fc00 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69       set { confi
1fc10 67 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65  gVersion = value
1fc20 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fc30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1fc40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1fc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1fc90 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1fca0 69 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75 66  ing vsVersionSuf
1fcb0 66 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fix;..          
1fcc0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1fcd0 56 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 0d  VsVersionSuffix.
1fce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd00 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 73 56  get { return vsV
1fd10 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 20 7d 0d  ersionSuffix; }.
1fd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fd30 20 73 65 74 20 7b 20 76 73 56 65 72 73 69 6f 6e   set { vsVersion
1fd40 53 75 66 66 69 78 20 3d 20 76 61 6c 75 65 3b 20  Suffix = value; 
1fd50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1fd60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fdb0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1fdc0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
1fdd0 67 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a  g debugFormat;..
1fde0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1fdf0 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 46  ic string DebugF
1fe00 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20  ormat..         
1fe10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1fe20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1fe30 72 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20  rn debugFormat; 
1fe40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1fe50 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 46 6f     set { debugFo
1fe60 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  rmat = value; }.
1fe70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1fe80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1fe90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1feb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fed0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1fee0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1fef0 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20  traceFormat;..  
1ff00 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1ff10 20 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72   string TraceFor
1ff20 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mat..           
1ff30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ff40 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1ff50 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d   traceFormat; }.
1ff60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ff70 20 73 65 74 20 7b 20 74 72 61 63 65 46 6f 72 6d   set { traceForm
1ff80 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  at = value; }.. 
1ff90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1ffb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1fff0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20000 72 69 76 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c  rivate InstallFl
20010 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  ags installFlags
20020 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
20030 75 62 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61  ublic InstallFla
20040 67 73 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d  gs InstallFlags.
20050 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20070 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73  get { return ins
20080 74 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20  tallFlags; }..  
20090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
200a0 74 20 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  t { installFlags
200b0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
200c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
200d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
200e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20120 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20130 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69  vate TracePriori
20140 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79  ty debugPriority
20150 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
20160 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72  ublic TracePrior
20170 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74  ity DebugPriorit
20180 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
20190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
201a0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64    get { return d
201b0 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d 0d  ebugPriority; }.
201c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
201d0 20 73 65 74 20 7b 20 64 65 62 75 67 50 72 69 6f   set { debugPrio
201e0 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  rity = value; }.
201f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20260 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50 72   private TracePr
20270 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
20280 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
20290 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65 50     public TraceP
202a0 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72 69  riority TracePri
202b0 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
202c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
202d0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
202e0 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  rn tracePriority
202f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20300 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63 65       set { trace
20310 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65  Priority = value
20320 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20330 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20340 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20380 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20390 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
203a0 6c 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20 20  l perUser;..    
203b0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
203c0 6f 6f 6c 20 50 65 72 55 73 65 72 0d 0a 20 20 20  ool PerUser..   
203d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
203e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
203f0 7b 20 72 65 74 75 72 6e 20 70 65 72 55 73 65 72  { return perUser
20400 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20410 20 20 20 20 20 73 65 74 20 7b 20 70 65 72 55 73       set { perUs
20420 65 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  er = value; }.. 
20430 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20440 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 0d  ///////////////.
20490 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
204a0 72 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73 74  rivate bool inst
204b0 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  all;..          
204c0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e    public bool In
204d0 73 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  stall..         
204e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
204f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
20500 72 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20  rn install; }.. 
20510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20520 65 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20 76  et { install = v
20530 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20540 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20550 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
205a0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
205b0 20 62 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20 20   bool wow64;..  
205c0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
205d0 20 62 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20 20 20   bool Wow64..   
205e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
205f0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
20600 7b 20 72 65 74 75 72 6e 20 77 6f 77 36 34 3b 20  { return wow64; 
20610 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20620 20 20 20 73 65 74 20 7b 20 77 6f 77 36 34 20 3d     set { wow64 =
20630 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20640 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20650 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
206a0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
206b0 74 65 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d  te bool noRuntim
206c0 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  eVersion;..     
206d0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
206e0 6f 6c 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73  ol NoRuntimeVers
206f0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
20700 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20710 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20720 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
20730 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  n; }..          
20740 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 52 75        set { noRu
20750 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 76  ntimeVersion = v
20760 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20770 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20780 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
207d0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
207e0 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b   bool noDesktop;
207f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
20800 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b  blic bool NoDesk
20810 74 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20 20  top..           
20820 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20830 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20840 20 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20   noDesktop; }.. 
20850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20860 65 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20 3d  et { noDesktop =
20870 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20880 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20890 20 20 20 20 20 20 20 20 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 0d 0a 0d 0a 20  ///////////.... 
208e0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
208f0 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63  te bool noCompac
20900 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
20910 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f  public bool NoCo
20920 6d 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20 20  mpact..         
20930 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20940 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
20950 72 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d  rn noCompact; }.
20960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20970 20 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63 74   set { noCompact
20980 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
20990 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
209a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
209b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
209f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20a00 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
20a10 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  x20;..          
20a20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
20a30 4e 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20  NetFx20..       
20a40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20a50 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
20a60 74 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b 20  turn noNetFx20; 
20a70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20a80 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78     set { noNetFx
20a90 32 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  20 = value; }.. 
20aa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20ab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
20ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20b00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20b10 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65  rivate bool noNe
20b20 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx35;..        
20b30 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
20b40 4e 6f 4e 65 74 46 78 33 35 0d 0a 20 20 20 20 20  NoNetFx35..     
20b50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20b60 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20b70 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 33 35  return noNetFx35
20b80 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20b90 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74       set { noNet
20ba0 46 78 33 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Fx35 = value; }.
20bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20c20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
20c30 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20  NetFx40;..      
20c40 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
20c50 6c 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20  l NoNetFx40..   
20c60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20c70 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
20c80 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78  { return noNetFx
20c90 34 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  40; }..         
20ca0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e         set { noN
20cb0 65 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20  etFx40 = value; 
20cc0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20d30 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
20d40 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20  noNetFx45;..    
20d50 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
20d60 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 0d 0a 20  ool NoNetFx45.. 
20d70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20d90 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
20da0 46 78 34 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Fx45; }..       
20db0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
20dc0 6f 4e 65 74 46 78 34 35 20 3d 20 76 61 6c 75 65  oNetFx45 = value
20dd0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20de0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20df0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
20e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e30 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20e40 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
20e50 6c 20 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20  l noNetFx451;.. 
20e60 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
20e70 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35  c bool NoNetFx45
20e80 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  1..            {
20e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20ea0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
20eb0 6f 4e 65 74 46 78 34 35 31 3b 20 7d 0d 0a 20 20  oNetFx451; }..  
20ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
20ed0 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 31 20 3d  t { noNetFx451 =
20ee0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20ef0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20f00 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20f50 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20f60 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35  te bool noVs2005
20f70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
20f80 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
20f90 30 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  005..           
20fa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20fb0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20fc0 20 6e 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20   noVs2005; }..  
20fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
20fe0 74 20 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20 76  t { noVs2005 = v
20ff0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
21000 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21010 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21050 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21060 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
21070 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d   bool noVs2008;.
21080 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21090 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30  lic bool NoVs200
210a0 38 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  8..            {
210b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
210c0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
210d0 6f 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20  oVs2008; }..    
210e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
210f0 7b 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c  { noVs2008 = val
21100 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
21110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21120 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21160 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21170 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
21180 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20  ool noVs2010;.. 
21190 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
211a0 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d  c bool NoVs2010.
211b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211d0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56  get { return noV
211e0 73 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20  s2010; }..      
211f0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
21200 6e 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65  noVs2010 = value
21210 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21220 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21230 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21270 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21280 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
21290 6c 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20  l noVs2012;..   
212a0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
212b0 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a 20  bool NoVs2012.. 
212c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
212e0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32  t { return noVs2
212f0 30 31 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  012; }..        
21300 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
21310 56 73 32 30 31 32 20 3d 20 76 61 6c 75 65 3b 20  Vs2012 = value; 
21320 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21380 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
21390 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
213a0 6e 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20  noVs2013;..     
213b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
213c0 6f 6c 20 4e 6f 56 73 32 30 31 33 0d 0a 20 20 20  ol NoVs2013..   
213d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
213e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
213f0 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31  { return noVs201
21400 33 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  3; }..          
21410 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
21420 32 30 31 33 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2013 = value; }.
21430 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21490 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
214a0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
214b0 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20  Trace;..        
214c0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
214d0 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20 20 20 20  NoTrace..       
214e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
214f0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
21500 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d  turn noTrace; }.
21510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21520 20 73 65 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d   set { noTrace =
21530 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
21540 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21550 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
215a0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
215b0 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c  te bool noConsol
215c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
215d0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f  public bool NoCo
215e0 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  nsole..         
215f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21600 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
21610 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d  rn noConsole; }.
21620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21630 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65   set { noConsole
21640 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
21650 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21660 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
216b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
216c0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b  vate bool noLog;
216d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
216e0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d  blic bool NoLog.
216f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21710 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c  get { return noL
21720 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  og; }..         
21730 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c         set { noL
21740 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  og = value; }.. 
21750 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21760 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
217b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
217c0 72 69 76 61 74 65 20 62 6f 6f 6c 20 74 68 72 6f  rivate bool thro
217d0 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20  wOnMissing;..   
217e0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
217f0 62 6f 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73 73  bool ThrowOnMiss
21800 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
21810 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21820 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21830 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b   throwOnMissing;
21840 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21850 20 20 20 20 73 65 74 20 7b 20 74 68 72 6f 77 4f      set { throwO
21860 6e 4d 69 73 73 69 6e 67 20 3d 20 76 61 6c 75 65  nMissing = value
21870 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21880 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21890 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
218a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
218e0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
218f0 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  l whatIf;..     
21900 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
21910 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20  ol WhatIf..     
21920 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21930 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
21940 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d  return whatIf; }
21950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21960 20 20 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d    set { whatIf =
21970 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
21980 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21990 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
219a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
219e0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
219f0 74 65 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a  te bool debug;..
21a00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
21a10 69 63 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a 20  ic bool Debug.. 
21a20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21a40 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  t { return debug
21a50 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21a60 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67       set { debug
21a70 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
21a80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21a90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ac0 2f 2f 2f 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 0d 0a 0d  /////////////...
21ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
21af0 76 61 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73  vate bool verbos
21b00 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
21b10 70 75 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62  public bool Verb
21b20 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
21b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21b40 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21b50 20 76 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20   verbose; }..   
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
21b70 20 7b 20 76 65 72 62 6f 73 65 20 3d 20 76 61 6c   { verbose = val
21b80 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
21b90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21ba0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21be0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21bf0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
21c00 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  ool confirm;..  
21c10 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
21c20 20 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20   bool Confirm.. 
21c30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21c50 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69  t { return confi
21c60 72 6d 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  rm; }..         
21c70 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e         set { con
21c80 66 69 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  firm = value; }.
21c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
21cb0 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
21cc0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
21cd0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
21ce0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d20 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21d30 20 20 20 20 23 72 65 67 69 6f 6e 20 46 72 61 6d      #region Fram
21d40 65 77 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d  eworkList Class.
21d50 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
21d60 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 46 72   sealed class Fr
21d70 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20  ameworkList..   
21d80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21d90 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
21da0 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
21db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21dc0 6c 69 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  lic FrameworkLis
21dd0 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
21de0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21df0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
21e00 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
21e10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
21e20 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
21e30 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
21e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21e80 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
21e90 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
21ea0 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
21eb0 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
21ec0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b  stryKey rootKey;
21ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
21ee0 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
21ef0 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20  yKey RootKey..  
21f00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21f10 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
21f20 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65   { return rootKe
21f30 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
21f40 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74        set { root
21f50 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  Key = value; }..
21f60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
21f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21fd0 70 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69  private StringLi
21fe0 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20  st names;..     
21ff0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74         public St
22000 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a  ringList Names..
22010 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
22030 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65  et { return name
22040 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
22050 20 20 20 20 20 20 73 65 74 20 7b 20 6e 61 6d 65        set { name
22060 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
22070 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22080 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
220d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
220e0 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4d 61 70  ivate VersionMap
220f0 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20   versions;..    
22100 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56          public V
22110 65 72 73 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f  ersionMap Versio
22120 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
22130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22140 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
22150 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20  versions; }..   
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
22170 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61   { versions = va
22180 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
22190 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
221a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
221b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
221f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22200 53 74 72 69 6e 67 4c 69 73 74 20 70 6c 61 74 66  StringList platf
22210 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20  ormNames;..     
22220 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74         public St
22230 72 69 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f 72  ringList Platfor
22240 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20  mNames..        
22250 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22260 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
22270 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  urn platformName
22280 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
22290 20 20 20 20 20 20 73 65 74 20 7b 20 70 6c 61 74        set { plat
222a0 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75  formNames = valu
222b0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
222c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
222d0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
222e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
222f0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
22300 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22350 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
22360 20 56 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20   VsList Class.. 
22370 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
22380 65 61 6c 65 64 20 63 6c 61 73 73 20 56 73 4c 69  ealed class VsLi
22390 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  st..        {.. 
223a0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
223b0 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
223c0 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
223d0 20 20 20 20 70 75 62 6c 69 63 20 56 73 4c 69 73      public VsLis
223e0 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
223f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22400 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
22410 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
22420 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
22430 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
22440 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
22450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22490 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
224a0 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
224b0 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
224c0 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
224d0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
224e0 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey;..           
224f0 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
22500 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d  stryKey RootKey.
22510 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22530 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f  get { return roo
22540 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tKey; }..       
22550 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
22560 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20  ootKey = value; 
22570 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
22580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
225e0 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73 69     private Versi
225f0 6f 6e 4c 69 73 74 20 76 65 72 73 69 6f 6e 73 3b  onList versions;
22600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
22610 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  blic VersionList
22620 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20   Versions..     
22630 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22640 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
22650 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b  return versions;
22660 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22670 20 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f      set { versio
22680 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ns = value; }.. 
22690 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
226a0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
226b0 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
226c0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
226d0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ion..        #en
226e0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
226f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22740 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
22750 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20 44  ivate Constant D
22760 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ata..        pri
22770 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
22780 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  g CoreFileName =
22790 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
227a0 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20  Lite.dll";..    
227b0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
227c0 74 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c  t string LinqFil
227d0 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  eName = "System.
227e0 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
227f0 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20  .dll";..        
22800 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
22810 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c  ring DesignerFil
22820 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 2e  eName = "SQLite.
22830 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a  Designer.dll";..
22840 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22850 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
22860 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51 4c  viderName = "SQL
22870 69 74 65 20 44 61 74 61 20 50 72 6f 76 69 64 65  ite Data Provide
22880 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  r";..        pri
22890 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
228a0 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20  g ProjectName = 
228b0 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
228c0 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  ite";..        p
228d0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
228e0 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65 63  ing LegacyProjec
228f0 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 22  tName = "SQLite"
22900 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
22910 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
22920 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20  InvariantName = 
22930 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
22940 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  ite";..        p
22950 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
22960 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65 4e  ing FactoryTypeN
22970 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
22980 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
22990 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20  Factory";..     
229a0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
229b0 20 73 74 72 69 6e 67 20 44 65 73 63 72 69 70 74   string Descript
229c0 69 6f 6e 20 3d 20 22 2e 4e 45 54 20 46 72 61 6d  ion = ".NET Fram
229d0 65 77 6f 72 6b 20 44 61 74 61 20 50 72 6f 76 69  ework Data Provi
229e0 64 65 72 20 66 6f 72 20 53 51 4c 69 74 65 22 3b  der for SQLite";
229f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
22a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a40 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
22a50 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
22a60 69 6e 67 20 43 4c 52 76 32 49 6d 61 67 65 52 75  ing CLRv2ImageRu
22a70 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
22a80 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20  v2.0.50727";..  
22a90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
22aa0 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76 34  nst string CLRv4
22ab0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
22ac0 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33 30 33 31  ion = "v4.0.3031
22ad0 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  9";....        /
22ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b20 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22b30 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
22b40 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61  string NameAndVa
22b50 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d  lueFormat = "{0}
22b60 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20  : {1}";..       
22b70 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
22b80 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66  tring LogFileSuf
22b90 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d  fix = ".log";...
22ba0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
22bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
22c00 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
22c10 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d 20 22   RootKeyName = "
22c20 53 6f 66 74 77 61 72 65 22 3b 0d 0a 20 20 20 20  Software";..    
22c30 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
22c40 74 20 73 74 72 69 6e 67 20 57 6f 77 36 34 53 75  t string Wow64Su
22c50 62 4b 65 79 4e 61 6d 65 20 3d 20 22 57 6f 77 36  bKeyName = "Wow6
22c60 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20 20  432Node";....   
22c70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22cc0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
22cd0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65      // NOTE: The
22ce0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
22cf0 68 61 73 20 62 6f 74 68 20 33 32 2d 62 69 74 20  has both 32-bit 
22d00 61 6e 64 20 36 34 2d 62 69 74 20 65 64 69 74 69  and 64-bit editi
22d10 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ons...        //
22d20 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22d30 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
22d40 79 20 62 6f 6f 6c 20 4e 65 74 46 78 49 73 33 32  y bool NetFxIs32
22d50 42 69 74 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b  BitOnly = false;
22d60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
22d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22db0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
22dc0 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
22dd0 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69 73  TE: For now, Vis
22de0 75 61 6c 20 53 74 75 64 69 6f 20 69 73 20 61 6c  ual Studio is al
22df0 77 61 79 73 20 61 20 33 32 2d 62 69 74 20 61 70  ways a 32-bit ap
22e00 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  plication...    
22e10 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
22e20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
22e30 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73 49  eadonly bool VsI
22e40 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72 75  s32BitOnly = tru
22e50 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e;....        //
22e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ea0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22eb0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
22ec0 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
22ed0 56 73 49 64 46 6f 72 6d 61 74 20 3d 20 22 42 22  VsIdFormat = "B"
22ee0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
22f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f30 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22f40 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
22f50 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58  eadonly string X
22f60 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e  PathForAddElemen
22f70 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t =..           
22f80 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f   "configuration/
22f90 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72  system.data/DbPr
22fa0 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f  oviderFactories/
22fb0 61 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c  add[@invariant=\
22fc0 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20  "{0}\"]";....   
22fd0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
22fe0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
22ff0 69 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d 6f  ing XPathForRemo
23000 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20  veElement =..   
23010 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67           "config
23020 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64  uration/system.d
23030 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61  ata/DbProviderFa
23040 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b 40  ctories/remove[@
23050 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c  invariant=\"{0}\
23060 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  "]";..        #e
23070 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
23080 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
230d0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
230e0 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44 61  rivate Static Da
230f0 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ta..        priv
23100 61 74 65 20 73 74 61 74 69 63 20 41 73 73 65 6d  ate static Assem
23110 62 6c 79 20 74 68 69 73 41 73 73 65 6d 62 6c 79  bly thisAssembly
23120 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47 65 74 45   = Assembly.GetE
23130 78 65 63 75 74 69 6e 67 41 73 73 65 6d 62 6c 79  xecutingAssembly
23140 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ();....        p
23150 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
23160 72 69 6e 67 20 74 72 61 63 65 43 61 74 65 67 6f  ring traceCatego
23170 72 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  ry = Path.GetFil
23180 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
23190 20 20 20 20 74 68 69 73 41 73 73 65 6d 62 6c 79      thisAssembly
231a0 2e 4c 6f 63 61 74 69 6f 6e 29 3b 20 2f 2a 20 4e  .Location); /* N
231b0 4f 54 45 3a 20 53 61 6d 65 20 66 6f 72 20 64 65  OTE: Same for de
231c0 62 75 67 20 61 6e 64 20 74 72 61 63 65 2e 20 2a  bug and trace. *
231d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
231e0 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
231f0 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
23200 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 44 65 62  allback = AppDeb
23210 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ug;..        pri
23220 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
23230 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
23240 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54 72 61  allback = AppTra
23250 63 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ce;....        /
23260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
232b0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
232c0 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44 69   string systemDi
232d0 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d  rectory = null;.
232e0 0a 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a  ...#if WINDOWS..
232f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23300 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 73 79  static string sy
23310 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77  stemDirectoryWow
23320 36 34 20 3d 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64  64 = null;..#end
23330 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  if....        //
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 2f 2f 2f 2f 2f 2f 2f  ////////////////
23370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23380 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23390 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
233a0 69 6e 74 20 66 69 6c 65 73 43 72 65 61 74 65 64  int filesCreated
233b0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70   = 0;..        p
233c0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
233d0 74 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 20  t filesModified 
233e0 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  = 0;..        pr
233f0 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
23400 20 66 69 6c 65 73 44 65 6c 65 74 65 64 20 3d 20   filesDeleted = 
23410 30 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  0;..        #end
23420 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
23430 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23470 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23480 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61       #region Tra
23490 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ce Handling..   
234a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
234b0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 4c 6f  tic string GetLo
234c0 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20  gFileName(..    
234d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
234e0 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ypeName..       
234f0 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20       ) /* throw 
23500 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  */..        {.. 
23510 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
23520 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  g fileName = Pat
23530 68 2e 47 65 74 54 65 6d 70 46 69 6c 65 4e 61 6d  h.GetTempFileNam
23540 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
23550 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
23560 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72  ry = Path.GetDir
23570 65 63 74 6f 72 79 4e 61 6d 65 28 66 69 6c 65 4e  ectoryName(fileN
23580 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
23590 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
235a0 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68 2e 47 65  meOnly = Path.Ge
235b0 74 46 69 6c 65 4e 61 6d 65 57 69 74 68 6f 75 74  tFileNameWithout
235c0 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61  Extension(fileNa
235d0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
235e0 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 46 69      string newFi
235f0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
23600 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
23610 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
23620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23630 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 72   "{0}{1}{2}", tr
23640 61 63 65 43 61 74 65 67 6f 72 79 2c 20 21 53 74  aceCategory, !St
23650 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
23660 74 79 28 74 79 70 65 4e 61 6d 65 29 20 3f 0d 0a  ty(typeName) ?..
23670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23680 20 20 20 20 22 2e 22 20 2b 20 74 79 70 65 4e 61      "." + typeNa
23690 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74  me : String.Empt
236a0 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65 4e 61 6d  y, "." + fileNam
236b0 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20 20 20 20  eOnly +..       
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
236d0 46 69 6c 65 53 75 66 66 69 78 29 29 3b 0d 0a 0d  FileSuffix));...
236e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 69 6c  .            Fil
236f0 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61 6d 65 2c  e.Move(fileName,
23700 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a   newFileName);..
23710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
23720 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e 61 6d 65  turn newFileName
23730 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
23740 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
23780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23790 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
237a0 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41  te static void A
237b0 70 70 44 65 62 75 67 28 0d 0a 20 20 20 20 20 20  ppDebug(..      
237c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
237d0 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
237e0 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
237f0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
23800 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
23810 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
23820 70 73 2e 44 65 62 75 67 43 6f 72 65 28 53 74 72  ps.DebugCore(Str
23830 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
23840 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
23850 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61  ceOps.DebugForma
23860 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74  t, TraceOps.Next
23870 44 65 62 75 67 49 64 28 29 2c 0d 0a 20 20 20 20  DebugId(),..    
23880 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
23890 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44  eOps.TimeStamp(D
238a0 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c  ateTime.UtcNow),
238b0 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67   message), categ
238c0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ory);..        }
238d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
238e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23920 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
23930 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
23940 69 64 20 41 70 70 54 72 61 63 65 28 0d 0a 20 20  id AppTrace(..  
23950 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
23960 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
23970 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
23980 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
23990 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
239a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
239b0 61 63 65 4f 70 73 2e 54 72 61 63 65 43 6f 72 65  aceOps.TraceCore
239c0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
239d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239e0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46   TraceOps.TraceF
239f0 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e  ormat, TraceOps.
23a00 4e 65 78 74 54 72 61 63 65 49 64 28 29 2c 0d 0a  NextTraceId(),..
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61  TraceOps.TimeSta
23a30 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e  mp(DateTime.UtcN
23a40 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63  ow), message), c
23a50 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
23a60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
23a70 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
23a80 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23ad0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47         #region G
23ae0 65 6e 65 72 69 63 20 50 6c 61 74 66 6f 72 6d 20  eneric Platform 
23af0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
23b00 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
23b10 20 62 6f 6f 6c 20 49 73 36 34 42 69 74 50 72 6f   bool Is64BitPro
23b20 63 65 73 73 28 29 0d 0a 20 20 20 20 20 20 20 20  cess()..        
23b30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
23b40 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
23b50 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20  / NOTE: Returns 
23b60 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72 72  true if the curr
23b70 65 6e 74 20 70 72 6f 63 65 73 73 20 69 73 20 36  ent process is 6
23b80 34 2d 62 69 74 2e 20 20 49 66 20 74 68 69 73 0d  4-bit.  If this.
23b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
23ba0 20 20 20 20 20 20 69 73 20 74 72 75 65 2c 20 77        is true, w
23bb0 65 20 2a 6b 6e 6f 77 2a 20 74 68 61 74 20 77 65  e *know* that we
23bc0 20 6d 75 73 74 20 62 65 20 72 75 6e 6e 69 6e 67   must be running
23bd0 20 6f 6e 20 61 20 36 34 2d 62 69 74 0d 0a 20 20   on a 64-bit..  
23be0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
23bf0 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73     operating sys
23c00 74 65 6d 20 61 73 20 77 65 6c 6c 2e 20 20 48 6f  tem as well.  Ho
23c10 77 65 76 65 72 2c 20 69 66 20 74 68 69 73 20 69  wever, if this i
23c20 73 20 66 61 6c 73 65 2c 20 77 65 0d 0a 20 20 20  s false, we..   
23c30 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
23c40 20 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61    do not necessa
23c50 72 69 6c 79 20 6b 6e 6f 77 20 74 68 61 74 20 77  rily know that w
23c60 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e  e are running on
23c70 20 61 20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20   a 32-bit..     
23c80 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
23c90 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
23ca0 2c 20 64 75 65 20 74 6f 20 57 6f 57 36 34 20 28  , due to WoW64 (
23cb0 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36 34 29 2c  Win32-on-Win64),
23cc0 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20   etc...         
23cd0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
23ce0 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 50 74     return (IntPt
23cf0 72 2e 53 69 7a 65 20 3d 3d 20 73 69 7a 65 6f 66  r.Size == sizeof
23d00 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e 4f 54 45  (long)); // NOTE
23d10 3a 20 50 6f 69 6e 74 65 72 20 69 73 20 36 34 2d  : Pointer is 64-
23d20 62 69 74 73 3f 0d 0a 20 20 20 20 20 20 20 20 7d  bits?..        }
23d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
23d90 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
23da0 6f 6c 20 49 73 53 75 70 70 6f 72 74 65 64 52 6f  ol IsSupportedRo
23db0 6f 74 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  otKey(..        
23dc0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
23dd0 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20   registry,..    
23de0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
23df0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 0d  stryKey rootKey.
23e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
23e10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23e20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4f 62         return Ob
23e30 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
23e40 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65  uals(rootKey, re
23e50 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
23e60 65 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  er) ||..        
23e70 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74 2e 52          Object.R
23e80 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
23e90 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79  ootKey, registry
23ea0 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 3b 0d  .LocalMachine);.
23eb0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
23ec0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23f10 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23f20 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
23f30 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a  etRootKeyName(..
23f40 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
23f50 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
23f60 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
23f70 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
23f80 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
23f90 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
23fa0 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46           // BUGF
23fb0 49 58 3a 20 41 70 70 61 72 65 6e 74 6c 79 2c 20  IX: Apparently, 
23fc0 74 68 65 20 70 65 72 2d 75 73 65 72 20 72 65 67  the per-user reg
23fd0 69 73 74 72 79 20 68 69 76 65 20 64 6f 65 73 20  istry hive does 
23fe0 6e 6f 74 20 75 73 65 0d 0a 20 20 20 20 20 20 20  not use..       
23ff0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
24000 74 68 65 20 22 57 6f 77 36 34 33 32 4e 6f 64 65  the "Wow6432Node
24010 22 20 6e 6f 64 65 20 74 6f 20 73 74 6f 72 65 20  " node to store 
24020 73 65 74 74 69 6e 67 73 20 66 6f 72 20 33 32 2d  settings for 32-
24030 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bit..           
24040 20 2f 2f 20 20 20 20 20 20 20 20 20 61 70 70 6c   //         appl
24050 69 63 61 74 69 6f 6e 73 20 72 75 6e 6e 69 6e 67  ications running
24060 20 6f 6e 20 61 20 36 34 2d 62 69 74 20 6f 70 65   on a 64-bit ope
24070 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2e 0d 0a  rating system...
24080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
24090 20 20 20 20 20 20 20 54 69 63 6b 65 74 20 5b 61         Ticket [a
240a0 30 36 37 37 33 30 39 66 30 5d 20 68 61 73 20 66  0677309f0] has f
240b0 75 72 74 68 65 72 20 64 65 74 61 69 6c 73 2e 0d  urther details..
240c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
240d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
240e0 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  urn String.Forma
240f0 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52 6f 6f 74  t("{0}{1}", Root
24100 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
24110 20 20 20 20 20 20 20 20 20 20 21 70 65 72 55 73            !perUs
24120 65 72 20 26 26 20 77 6f 77 36 34 20 26 26 20 49  er && wow64 && I
24130 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
24140 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
24150 20 20 20 20 20 20 20 22 5c 5c 22 20 2b 20 57 6f         "\\" + Wo
24160 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20  w64SubKeyName : 
24170 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
24180 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24190 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
241a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
241e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
241f0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
24200 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  tSystemDirectory
24210 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
24220 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
24230 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
24240 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53    {..#if WINDOWS
24250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24260 20 28 77 6f 77 36 34 29 0d 0a 20 20 20 20 20 20   (wow64)..      
24270 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24280 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
24290 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
242a0 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  4 == null)..    
242b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
242c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242d0 20 20 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f     systemDirecto
242e0 72 79 57 6f 77 36 34 20 3d 0d 0a 20 20 20 20 20  ryWow64 =..     
242f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24300 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
24310 65 74 68 6f 64 73 2e 47 65 74 53 79 73 74 65 6d  ethods.GetSystem
24320 44 69 72 65 63 74 6f 72 79 28 29 3b 0d 0a 20 20  Directory();..  
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24350 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d     return system
24360 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 3b 0d  DirectoryWow64;.
24370 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24380 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
24390 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
243a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
243b0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
243c0 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 3d 20  temDirectory == 
243d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
243e0 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65             syste
243f0 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 45 6e 76  mDirectory = Env
24400 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44  ironment.SystemD
24410 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20  irectory;....   
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
24430 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74  urn systemDirect
24440 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
24450 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
24460 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
24470 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
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 2f  ////////////////
244c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
244d0 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63   #region Generic
244e0 20 53 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67   String Handling
244f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
24500 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
24510 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
24520 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
24530 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
24540 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
24550 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
24560 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
24570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24580 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22   return "<null>"
24590 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
245a0 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d   string result;.
245b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70  .            Typ
245c0 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47  e type = value.G
245d0 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20  etType();....   
245e0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
245f0 65 20 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45  e == typeof(XmlE
24600 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20  lement))..      
24610 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24620 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
24630 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58  ent element = (X
24640 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b  mlElement)value;
24650 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24660 20 20 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65      result = ele
24670 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a  ment.OuterXml;..
24680 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
24690 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
246a0 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
246b0 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20  of(Version))..  
246c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
246e0 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28  sion version = (
246f0 56 65 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a  Version)value;..
24700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24710 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e    result = Strin
24720 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
24730 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20   version);..    
24740 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24750 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
24760 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24770 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
24780 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72  lt = value.ToStr
24790 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ing();....      
247a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
247b0 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  sult.Length == 0
247c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
247d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
247e0 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20  empty>";....    
247f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
24800 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
24810 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
24820 20 20 20 20 20 20 20 20 20 74 79 70 65 2e 49 73           type.Is
24830 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f  SubclassOf(typeo
24840 66 28 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20  f(ValueType)) ? 
24850 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22  "{0}" : "\"{0}\"
24860 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
24870 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b          result);
24880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
248a0 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
248b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
248c0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
248d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
248e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24920 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
24930 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41 74 74 72  on Assembly Attr
24940 69 62 75 74 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  ibute Handling..
24950 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
24960 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
24970 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
24980 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ation(..        
24990 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
249a0 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
249b0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
249c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
249d0 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
249e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
249f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24a00 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
24a10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
24a30 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65  f (assembly.IsDe
24a40 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20  fined(..        
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a60 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
24a70 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
24a80 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
24a90 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
24aa0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ac0 20 20 20 20 41 73 73 65 6d 62 6c 79 43 6f 6e 66      AssemblyConf
24ad0 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
24ae0 74 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te configuration
24af0 20 3d 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 20 20 20                  
24b10 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  (AssemblyConfigu
24b20 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  rationAttribute)
24b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
24b50 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d  sembly.GetCustom
24b60 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20  Attributes(..   
24b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
24b90 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66  eof(AssemblyConf
24ba0 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
24bb0 74 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  te),..          
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bd0 20 20 20 20 20 20 66 61 6c 73 65 29 5b 30 5d 3b        false)[0];
24be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24c00 72 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  rn configuration
24c10 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3b 0d  .Configuration;.
24c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24c40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24c50 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
24c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24c70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24c80 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
24c90 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
24ca0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
24cb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24cc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24cd0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
24ce0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
24cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
24d40 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
24d50 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 54  ing GetAssemblyT
24d60 69 74 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  itle(..         
24d70 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
24d80 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
24d90 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
24da0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24db0 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
24dc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24de0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
24df0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24e10 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66   (assembly.IsDef
24e20 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20  ined(..         
24e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e40 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
24e50 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
24e60 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  ), false))..    
24e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24e90 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
24ea0 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
24eb0 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20  e title =..     
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ed0 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79         (Assembly
24ee0 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 0d  TitleAttribute).
24ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
24f10 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41  embly.GetCustomA
24f20 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20  ttributes(..    
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f40 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
24f50 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  of(AssemblyTitle
24f60 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
24f70 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  e)[0];....      
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f90 20 20 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54    return title.T
24fa0 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  itle;..         
24fb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24fe0 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
24ff0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25010 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25040 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
25050 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
25060 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25070 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
25080 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
250d0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
250e0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
250f0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
25100 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
25110 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
25120 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  workRootKeyName(
25130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
25140 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
25150 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
25160 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
25170 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
25180 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25190 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
251a0 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
251b0 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c  \.NETFramework",
251c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
251d0 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65    GetRootKeyName
251e0 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29  (perUser, wow64)
251f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
25200 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
25210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25250 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
25260 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
25270 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65  g GetFrameworkKe
25280 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
25290 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
252a0 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
252b0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
252c0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
252d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
252e0 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
252f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25300 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
25310 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
25320 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20  wow64..         
25330 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
25340 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
25350 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74  ing format = !St
25360 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
25370 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ty(platformName)
25380 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
25390 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73      "{0}\\Micros
253a0 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c  oft\\{1}\\v{2}\\
253b0 7b 33 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20 20  {3}" :..        
253c0 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69          "{0}\\Mi
253d0 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b  crosoft\\{1}\\v{
253e0 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2}";....        
253f0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
25400 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c  g.Format(format,
25410 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
25420 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c  perUser, wow64),
25430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25440 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
25450 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
25460 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  n, platformName)
25470 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
25480 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
254d0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
254e0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
254f0 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65   GetImageRuntime
25500 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  Version(..      
25510 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
25520 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
25530 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
25540 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
25550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
25560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25570 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
25580 6c 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ly =..          
25590 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
255a0 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c  ly.ReflectionOnl
255b0 79 4c 6f 61 64 46 72 6f 6d 28 66 69 6c 65 4e 61  yLoadFrom(fileNa
255c0 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
255d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
255e0 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
255f0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25610 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49  eturn assembly.I
25620 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
25630 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
25640 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25650 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
25660 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25670 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
25680 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
25690 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
256a0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
256b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
256c0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
256d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25710 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25720 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
25730 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63  etFrameworkDirec
25740 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
25750 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
25760 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
25770 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
25780 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
25790 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
257a0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
257b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
257c0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
257d0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
257e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
257f0 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
25800 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
25810 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25820 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
25830 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
25840 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
25850 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25870 6f 6f 74 4b 65 79 2c 20 47 65 74 46 72 61 6d 65  ootKey, GetFrame
25880 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  workRootKeyName(
25890 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c  perUser, wow64),
258a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
258b0 20 20 20 20 20 20 66 61 6c 73 65 2c 20 77 68 61        false, wha
258c0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
258d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
258f0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
25900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25910 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
25920 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25930 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
25940 65 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  e = RegistryHelp
25950 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.GetValue(..  
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25970 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 52    key, "InstallR
25980 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  oot", null, what
25990 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
259a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
259b0 20 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20   if (!(value is 
259c0 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20  string))..      
259d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
259e0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
259f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25a00 74 75 72 6e 20 50 61 74 68 2e 43 6f 6d 62 69 6e  turn Path.Combin
25a10 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
25a20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29          (string)
25a30 76 61 6c 75 65 2c 20 53 74 72 69 6e 67 2e 46 6f  value, String.Fo
25a40 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 66 72 61  rmat("v{0}", fra
25a50 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 3b  meworkVersion));
25a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25a70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
25a80 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
25a90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
25aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ae0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
25af0 67 69 6f 6e 20 50 65 72 2d 46 72 61 6d 65 77 6f  gion Per-Framewo
25b00 72 6b 2f 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64  rk/Platform Hand
25b10 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
25b20 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
25b30 64 20 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d  d InitializeFram
25b40 65 77 6f 72 6b 4c 69 73 74 28 0d 0a 20 20 20 20  eworkList(..    
25b50 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
25b60 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
25b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  ..            Co
25b80 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
25b90 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
25ba0 20 20 20 20 20 20 20 20 72 65 66 20 46 72 61 6d          ref Fram
25bb0 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77  eworkList framew
25bc0 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20  orkList..       
25bd0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
25be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
25bf0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
25c00 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
25c10 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
25c20 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 65 77 20 46  workList = new F
25c30 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 3b 0d  rameworkList();.
25c40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25c50 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
25c60 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  .RootKey == null
25c70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25c80 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
25c90 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b  .RootKey = rootK
25ca0 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
25cb0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25cf0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25d00 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
25d10 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d  orkList.Names ==
25d20 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25d30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25d40 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
25d50 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 20 6e 65 77  List.Names = new
25d60 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a   StringList();..
25d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25d80 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
25d90 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
25da0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
25db0 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20  NoDesktop)..    
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dd0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
25de0 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61  mes.Add(".NETFra
25df0 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20  mework");....   
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
25e10 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
25e20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
25e30 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d  figuration.NoCom
25e40 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  pact)..         
25e50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
25e70 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
25e80 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
25e90 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
25ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25eb0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
25ec0 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
25ed0 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72  TCompactFramewor
25ee0 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
25ef0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
25f00 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64  orkList.Names.Ad
25f10 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72  d(".NETCompactFr
25f20 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20  amework");..    
25f30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
25f40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25f50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
25f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
25fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25fb0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
25fc0 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c  .Versions == nul
25fd0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
25fe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25ff0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
26000 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20  .Versions = new 
26010 56 65 72 73 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d  VersionMap();...
26020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26030 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
26040 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
26050 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
26060 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20  oDesktop)..     
26070 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26090 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 64 65    VersionList de
260a0 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
260b0 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
260c0 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
260d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
260e0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
260f0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
26100 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74  figuration.NoNet
26110 46 78 32 30 29 0d 0a 20 20 20 20 20 20 20 20 20  Fx20)..         
26120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
26130 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
26140 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
26150 6e 28 32 2c 20 30 2c 20 35 30 37 32 37 29 29 3b  n(2, 0, 50727));
26160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26170 20 20 20 20 20 20 20 20 2f 2a 0d 0a 20 20 20 20          /*..    
26180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26190 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
261a0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
261b0 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   The .NET Framew
261c0 6f 72 6b 20 33 2e 35 20 64 6f 65 73 20 6e 6f 74  ork 3.5 does not
261d0 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20   have its own.. 
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261f0 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65     //       dire
26200 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  ctory...        
26210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
26220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26230 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
26240 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
26250 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
26260 6e 2e 4e 6f 4e 65 74 46 78 33 35 29 0d 0a 20 20  n.NoNetFx35)..  
26270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26280 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
26290 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
262a0 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 32   Version(3, 5, 2
262b0 31 30 32 32 29 29 3b 0d 0a 20 20 20 20 20 20 20  1022));..       
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0d               */.
262d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
262e0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
262f0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
26300 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
26310 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d  tion.NoNetFx40).
26320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26330 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
26340 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
26350 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 30  new Version(4, 0
26360 2c 20 33 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20  , 30319));....  
26370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26380 20 20 2f 2a 0d 0a 20 20 20 20 20 20 20 20 20 20    /*..          
26390 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
263a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263b0 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e    // NOTE: The .
263c0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e  NET Framework 4.
263d0 35 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  5 does not have 
263e0 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20  its own..       
263f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
26400 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 2e        directory.
26410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26420 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26440 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
26450 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
26460 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65  nfiguration.NoNe
26470 74 46 78 34 35 29 0d 0a 20 20 20 20 20 20 20 20  tFx45)..        
26480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26490 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
264a0 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
264b0 6f 6e 28 34 2c 20 35 2c 20 35 30 37 30 39 29 29  on(4, 5, 50709))
264c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
264d0 20 20 20 20 20 20 20 2a 2f 0d 0a 0d 0a 20 20 20         */....   
264e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264f0 20 2f 2a 0d 0a 20 20 20 20 20 20 20 20 20 20 20   /*..           
26500 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
26510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26520 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e   // NOTE: The .N
26530 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35  ET Framework 4.5
26540 2e 31 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  .1 does not have
26550 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20   its own..      
26560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26570 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
26580 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26590 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
265a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
265b0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
265c0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
265d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
265e0 65 74 46 78 34 35 31 29 0d 0a 20 20 20 20 20 20  etFx451)..      
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26600 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
26610 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
26620 73 69 6f 6e 28 34 2c 20 35 2c 20 35 30 39 33 38  sion(4, 5, 50938
26630 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
26640 20 20 20 20 20 20 20 20 20 2a 2f 0d 0a 0d 0a 20           */.... 
26650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26660 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
26670 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e  .Versions.Add(".
26680 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a  NETFramework",..
26690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266a0 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
266b0 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20  ersionList);..  
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
266d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
266e0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
266f0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
26700 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
26710 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20  .NoCompact)..   
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
26730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26740 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
26750 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22  t.Versions.Add("
26760 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65  .NETCompactFrame
26770 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20  work",..        
26780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26790 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
267a0 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d  new Version[] {.
267b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
267c0 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72           new Ver
267d0 73 69 6f 6e 28 32 2c 20 30 2c 20 30 2c 20 30 29  sion(2, 0, 0, 0)
267e0 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 2c  , new Version(3,
267f0 20 35 2c 20 30 2c 20 30 29 0d 0a 20 20 20 20 20   5, 0, 0)..     
26800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26810 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
26820 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26830 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26840 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
26850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26880 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26890 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
268a0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
268b0 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  rmNames == null)
268c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
268d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
268e0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
268f0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e  latformNames = n
26900 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b  ew StringList();
26910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26920 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
26930 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
26940 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
26950 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20  n.NoDesktop)..  
26960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26970 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
26980 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64  PlatformNames.Ad
26990 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  d(null);....    
269a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
269b0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
269c0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
269d0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70  iguration.NoComp
269e0 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  act)..          
269f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
26a10 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
26a20 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 50 6f  ormNames.Add("Po
26a30 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20 20 20  cketPC");..     
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26a50 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
26a60 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22  tformNames.Add("
26a70 53 6d 61 72 74 70 68 6f 6e 65 22 29 3b 0d 0a 20  Smartphone");.. 
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a90 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
26aa0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41  .PlatformNames.A
26ab0 64 64 28 22 57 69 6e 64 6f 77 73 43 45 22 29 3b  dd("WindowsCE");
26ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26ad0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26ae0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
26af0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
26b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
26b50 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
26b60 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72  HaveFrameworkDir
26b70 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
26b80 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
26b90 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
26ba0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
26bb0 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
26bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
26bd0 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
26be0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
26bf0 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
26c00 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
26c10 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
26c20 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
26c30 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
26c40 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
26c50 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
26c60 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
26c70 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
26c80 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
26c90 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
26ca0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61  keyName = GetFra
26cb0 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a  meworkKeyName(..
26cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cd0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
26ce0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
26cf0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70   platformName, p
26d00 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
26d10 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b           wow64);
26d20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26d30 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
26d40 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
26d50 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
26d60 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
26d70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
26d80 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
26d90 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
26da0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
26db0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26dc0 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
26dd0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
26de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26df0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
26e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26e10 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  f (platformName 
26e20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45  != null) // NOTE
26e30 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74  : Skip non-deskt
26e40 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op...           
26e50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26e60 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
26e70 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
26e80 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46  directory = GetF
26e90 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
26ea0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
26eb0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
26ec0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
26ed0 6e 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  n, perUser, wow6
26ee0 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  4, whatIf,..    
26ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f00 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
26f10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26f20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
26f30 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
26f40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26f50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
26f60 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
26f70 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
26f80 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69  ectory.Exists(di
26f90 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
26fb0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
26fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fd0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
26fe0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
26ff0 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
27020 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
27030 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
27040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27050 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
27060 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61  rk {0} found via
27070 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22   directory {1}."
27080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27090 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
270a0 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
270b0 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on), ForDisplay(
270c0 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20  directory)),..  
270d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270e0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
270f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27100 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
27110 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
27120 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
27130 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27180 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
27190 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61  e static bool Ha
271a0 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  veFrameworkRegis
271b0 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
271c0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
271d0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
271e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
271f0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
27200 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
27210 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
27220 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
27230 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
27240 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
27250 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
27260 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
27270 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
27280 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
27290 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
272a0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
272b0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
272c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
272d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
272e0 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77  Name = GetFramew
272f0 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  orkKeyName(..   
27300 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
27310 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
27320 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
27330 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55  atformName, perU
27340 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
27350 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d        wow64);...
27360 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
27370 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
27380 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
27390 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
273a0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
273b0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
273c0 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
273d0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
273e0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
273f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27400 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
27410 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
27420 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27430 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
27440 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27450 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20  platformName != 
27460 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53  null) // NOTE: S
27470 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e  kip non-desktop.
27480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27490 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
274a0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
274b0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
274c0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
274d0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72  cePriority.Lower
274e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
274f0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
27500 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
27510 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
27520 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
27530 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
27540 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75  ramework {0} fou
27550 6e 64 20 76 69 61 20 72 65 67 69 73 74 72 79 20  nd via registry 
27560 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
27570 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
27580 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
27590 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73  Version), ForDis
275a0 70 6c 61 79 28 6b 65 79 4e 61 6d 65 29 29 2c 0d  play(keyName)),.
275b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
275c0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
275d0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
275e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
275f0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
27600 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
27610 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
27620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27660 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
27670 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
27680 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
27690 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
276a0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
276b0 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d  bool ForEachFram
276c0 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20  eworkConfig(..  
276d0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
276e0 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c  gistry registry,
276f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
27700 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
27710 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20  eworkList,..    
27720 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
27730 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20  kConfigCallback 
27740 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
27750 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 65         string ve
27760 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20  rsion, /* NOTE: 
27770 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20  Optional. */..  
27780 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
27790 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20   invariant,..   
277a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
277b0 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
277c0 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69     string descri
277d0 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
277e0 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
277f0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
27800 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
27810 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
27820 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
27830 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
27840 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
27850 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
27860 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
27870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
27880 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
27890 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
278a0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
278b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
278c0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
278d0 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
278e0 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
278f0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
27900 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
27910 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
27920 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
27930 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  gistry == null).
27940 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
27950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27960 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
27970 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20   registry";..   
27980 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27990 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
279a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
279b0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
279c0 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
279d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
279e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
279f0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
27a00 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c  alid framework l
27a10 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist";..         
27a20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
27a30 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
27a40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27a50 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
27a60 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61  ey rootKey = fra
27a70 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
27a80 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
27a90 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d     if (rootKey =
27aa0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27ab0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27ac0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
27ad0 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65  "invalid root ke
27ae0 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
27af0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27b00 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27b10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27b20 20 69 66 20 28 21 49 73 53 75 70 70 6f 72 74 65   if (!IsSupporte
27b30 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72  dRootKey(registr
27b40 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20  y, rootKey))..  
27b50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27b60 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
27b70 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d  or = "root key m
27b80 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20  ust be per-user 
27b90 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b  or per-machine";
27ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27bb0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
27bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
27be0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
27bf0 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
27c00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
27c20 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
27c30 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64  work names found
27c40 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
27c50 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
27c60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
27c70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27c80 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
27c90 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75  t.Versions == nu
27ca0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27cb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27cc0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
27cd0 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  framework versio
27ce0 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  ns found";..    
27cf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27d00 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
27d10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27d20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
27d30 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
27d40 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  rmNames == null)
27d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d70 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61   error = "no pla
27d80 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e  tform names foun
27d90 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
27da0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27db0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27dc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27dd0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
27de0 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21  st.Names.Count !
27df0 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
27e00 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
27e10 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  unt)..          
27e20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27e30 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
27e40 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d  ing.Format("fram
27e50 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74  ework name count
27e60 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20   {0} does not " 
27e70 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
27e80 20 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c         "match pl
27e90 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e  atform name coun
27ea0 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72  t {1}", framewor
27eb0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
27ec0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
27ed0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
27ee0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
27ef0 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  mes.Count);.... 
27f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27f10 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
27f20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27f30 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
27f40 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
27f50 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b  ndex < framework
27f60 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
27f70 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
27f80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27f90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
27fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
27fb0 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
27fc0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61   name of the fra
27fd0 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e  mework (e.g. ".N
27fe0 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20  ETFramework").. 
27ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28000 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20  /       and the 
28010 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74  name of the plat
28020 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64  form (e.g. "Wind
28030 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20  owsCE")...      
28040 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
28050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
28060 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
28070 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  me = frameworkLi
28080 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b  st.Names[index];
28090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
280a0 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
280b0 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72  mName = framewor
280c0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
280d0 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  mes[index];.... 
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
280f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
28100 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70     // NOTE: Skip
28110 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70   all non-desktop
28120 20 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65   frameworks (i.e
28130 2e 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72  . if the platfor
28140 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m..             
28150 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65     //       name
28160 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a   is not null)...
28170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28180 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
28190 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
281a0 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Name != null).. 
281b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281c0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
281d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281e0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
281f0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
28200 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20  b the supported 
28210 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73  versions of this
28220 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20   particular..   
28230 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
28240 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e        framework.
28250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28260 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
28270 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
28280 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t frameworkVersi
28290 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20  onList;....     
282a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
282b0 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d  ersion != null).
282c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
282d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
282e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
282f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28300 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20  // NOTE: Manual 
28310 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68 65 20  override of the 
28320 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20  *ONE* framework 
28330 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  version..       
28340 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
28350 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65 73 73        to process
28360 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28370 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
28380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
28390 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
283a0 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ist = new Versio
283b0 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 20  nList();..      
283c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
283d0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
283e0 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
283f0 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20  on(version));.. 
28400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28420 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
28430 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
28450 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73  f (!frameworkLis
28460 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65  t.Versions.TryGe
28470 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
28480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28490 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
284a0 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72  me, out framewor
284b0 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c  kVersionList) ||
284c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
284d0 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d 65            (frame
284e0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20  workVersionList 
284f0 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28520 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
28530 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
28540 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
28550 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28570 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f   foreach (Versio
28580 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
28590 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56  on in frameworkV
285a0 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20  ersionList)..   
285b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
285c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285d0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
285e0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
285f0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
28600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28610 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
28620 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
28630 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
28640 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
28650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
28660 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
28670 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  {0}, frameworkVe
28680 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b  rsion = {1}, " +
28690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
286a0 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66            "platf
286b0 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20  ormName = {2}", 
286c0 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
286d0 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  workName),..    
286e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286f0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
28700 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
28710 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28720 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
28730 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61  splay(platformNa
28740 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
28750 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
28760 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
28770 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44  (!HaveFrameworkD
28780 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
28790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287a0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
287b0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
287c0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
287d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
287e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c                pl
287f0 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55  atformName, perU
28800 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  ser, wow64, what
28810 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
28820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28830 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
28850 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
28860 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
28870 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
28880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28890 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
288a0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
288b0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
288c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
288d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
288e0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
288f0 30 7d 20 64 69 72 65 63 74 6f 72 79 20 6e 6f 74  0} directory not
28900 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 20   found, " +..   
28910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28920 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69           "skippi
28930 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c  ng...", ForDispl
28940 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
28950 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
28960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28970 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
28980 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
28990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
289a0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
289b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
289c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
289d0 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
289e0 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack == null)..  
289f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a00 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
28a10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28a20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
28a30 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61  rectory = GetFra
28a40 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
28a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a60 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
28a70 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  y, frameworkVers
28a80 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  ion, perUser, wo
28a90 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  w64, whatIf,..  
28aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ab0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
28ac0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28ad0 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
28ae0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
28af0 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
28b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28b20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
28b30 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
28b40 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
28b50 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
28b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b70 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
28b80 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
28b90 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
28ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
28bc0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
28bd0 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e   directory is in
28be0 76 61 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20  valid, " +..    
28bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c00 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e          "skippin
28c10 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61  g...", ForDispla
28c20 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
28c30 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
28c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
28c60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
28c80 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
28c90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
28ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28cb0 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory 
28cc0 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
28cd0 69 72 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69  irectory, "Confi
28ce0 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  g");....        
28cf0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28d00 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74  !Directory.Exist
28d10 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  s(directory)).. 
28d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
28d50 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
28d60 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
28d70 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
28d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d90 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
28da0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
28db0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
28dc0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
28de0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
28df0 30 7d 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d  0} directory {1}
28e00 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
28e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e20 20 20 20 20 20 20 20 20 20 20 20 22 65 78 69 73             "exis
28e30 74 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c  t, skipping...",
28e40 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
28e50 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
28e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e70 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
28e80 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79  isplay(directory
28e90 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
28ea0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
28eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
28ec0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
28ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
28ee0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28ef0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
28f00 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
28f10 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
28f20 20 22 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67   "machine.config
28f30 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
28f40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
28f50 46 69 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65  File.Exists(file
28f60 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
28f70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f90 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
28fa0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
28fb0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
28fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
28fe0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
28ff0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
29000 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29020 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
29030 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65  amework {0} file
29040 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78   {1} does not ex
29050 69 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  ist, " +..      
29060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29070 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e        "skipping.
29080 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
29090 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
290a0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290c0 46 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65 4e  ForDisplay(fileN
290d0 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ame)), traceCate
290e0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
290f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29100 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
29110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29120 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
29130 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c            bool l
29140 6f 63 61 6c 53 61 76 65 64 20 3d 20 66 61 6c 73  ocalSaved = fals
29150 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
29160 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
29170 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
29180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29190 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
291a0 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c  invariant, name,
291b0 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79   description, ty
291c0 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
291d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291e0 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d       assemblyNam
291f0 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 70  e, clientData, p
29200 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a  erUser, wow64,..
29210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29220 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
29230 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74  wOnMissing, what
29240 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
29250 20 6c 6f 63 61 6c 53 61 76 65 64 2c 0d 0a 20 20   localSaved,..  
29260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29270 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
29280 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
29290 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
292a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
292c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
292d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
292e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292f0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
29300 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29320 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 53 61       if (localSa
29330 76 65 64 20 26 26 20 21 73 61 76 65 64 29 0d 0a  ved && !saved)..
29340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29350 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65              save
29360 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  d = true;....   
29370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29380 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
29390 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
293a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
293b0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
293c0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
293d0 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20  ity.Lowest,..   
293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293f0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
29400 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
29410 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
29420 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
29430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29440 20 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63 61             "loca
29450 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c 20 73 61  lSaved = {0}, sa
29460 76 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ved = {1}",..   
29470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29480 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
29490 44 69 73 70 6c 61 79 28 6c 6f 63 61 6c 53 61 76  Display(localSav
294a0 65 64 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ed), ForDisplay(
294b0 73 61 76 65 64 29 29 2c 0d 0a 20 20 20 20 20 20  saved)),..      
294c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
294e0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
294f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
29500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29510 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
29520 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
29530 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
29540 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29550 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
295a0 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
295b0 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
295c0 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
295d0 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
295e0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
295f0 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b  ForEachFramework
29600 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
29610 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
29620 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20  try registry,.. 
29630 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
29640 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f  workList framewo
29650 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20  rkList,..       
29660 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 52 65       FrameworkRe
29670 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63  gistryCallback c
29680 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
29690 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 65 72        string ver
296a0 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f  sion, /* NOTE: O
296b0 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20  ptional. */..   
296c0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
296d0 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
296e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
296f0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
29700 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
29710 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
29720 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
29730 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
29740 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
29750 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
29760 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
29770 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
29780 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
29790 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
297a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
297b0 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c  registry == null
297c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
297d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
297e0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
297f0 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20  id registry";.. 
29800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29810 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
29820 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
29830 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
29840 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20  rameworkList == 
29850 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29860 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29870 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
29880 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
29890 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20   list";..       
298a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
298b0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
298c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
298d0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
298e0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66  yKey rootKey = f
298f0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
29900 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
29910 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
29920 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
29930 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29940 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
29950 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20  = "invalid root 
29960 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  key";..         
29970 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29980 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29990 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
299a0 20 20 20 69 66 20 28 21 49 73 53 75 70 70 6f 72     if (!IsSuppor
299b0 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73  tedRootKey(regis
299c0 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a  try, rootKey))..
299d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
299e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
299f0 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79  rror = "root key
29a00 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65   must be per-use
29a10 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65  r or per-machine
29a20 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
29a30 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
29a40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
29a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29a60 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
29a70 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  t.Names == null)
29a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29aa0 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61   error = "no fra
29ab0 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75  mework names fou
29ac0 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
29ad0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
29ae0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
29af0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
29b00 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
29b10 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
29b20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29b30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29b40 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
29b50 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  o framework vers
29b60 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ions found";..  
29b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29b80 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
29b90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29ba0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
29bb0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
29bc0 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  formNames == nul
29bd0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
29be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29bf0 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70     error = "no p
29c00 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f  latform names fo
29c10 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
29c20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29c30 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29c40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29c50 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
29c60 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
29c70 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73   != frameworkLis
29c80 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
29c90 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20  Count)..        
29ca0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29cb0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
29cc0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72  tring.Format("fr
29cd0 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75  amework name cou
29ce0 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20  nt {0} does not 
29cf0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
29d00 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 20           "match 
29d10 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f  platform name co
29d20 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77  unt {1}", framew
29d30 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
29d40 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
29d50 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
29d60 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
29d70 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d  Names.Count);...
29d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29d90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
29da0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
29db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
29dc0 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
29dd0 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f   index < framewo
29de0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
29df0 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  nt; index++)..  
29e00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29e10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
29e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29e30 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
29e40 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
29e50 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22  ramework (e.g. "
29e60 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d  .NETFramework").
29e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29e80 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68   //       and th
29e90 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c  e name of the pl
29ea0 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69  atform (e.g. "Wi
29eb0 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20  ndowsCE")...    
29ec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
29ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ee0 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
29ef0 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b  Name = framework
29f00 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78  List.Names[index
29f10 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
29f20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
29f30 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77  ormName = framew
29f40 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
29f50 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d  Names[index];...
29f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29f70 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
29f80 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
29f90 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64  ab the supported
29fa0 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69   versions of thi
29fb0 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20  s particular..  
29fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29fd0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
29fe0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29ff0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2a000 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69         VersionLi
2a010 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  st frameworkVers
2a020 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20  ionList;....    
2a030 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a040 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29  version != null)
2a050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a060 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a070 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a090 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c   // NOTE: Manual
2a0a0 20 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68 65   override of the
2a0b0 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b   *ONE* framework
2a0c0 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20   version..      
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a0e0 20 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65 73         to proces
2a0f0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
2a100 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a120 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2a130 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69  List = new Versi
2a140 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 20  onList();..     
2a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2a160 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2a170 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
2a180 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a  ion(version));..
2a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2a1b0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
2a1c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1e0 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69  if (!frameworkLi
2a1f0 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47  st.Versions.TryG
2a200 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a220 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
2a230 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f  ame, out framewo
2a240 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c  rkVersionList) |
2a250 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
2a260 20 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d             (fram
2a270 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
2a280 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
2a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a2b0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
2a2c0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
2a2d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a300 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69    foreach (Versi
2a310 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
2a320 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b  ion in framework
2a330 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20  VersionList)..  
2a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2a350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a360 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
2a370 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
2a380 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
2a390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a3a0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2a3b0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2a3c0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2a3d0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3f0 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d  "frameworkName =
2a400 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56   {0}, frameworkV
2a410 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20  ersion = {1}, " 
2a420 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2a430 20 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74             "plat
2a440 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c  formName = {2}",
2a450 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
2a460 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20  eworkName),..   
2a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a480 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2a490 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2a4a0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2a4b0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2a4c0 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e  isplay(platformN
2a4d0 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ame)), traceCate
2a4e0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a500 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b   (!HaveFramework
2a510 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
2a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a530 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2a540 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
2a550 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2a560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c                pl
2a580 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55  atformName, perU
2a590 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  ser, wow64, what
2a5a0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2a5e0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
2a5f0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
2a600 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
2a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a620 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2a630 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2a640 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2a650 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2a670 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
2a680 30 7d 20 72 65 67 69 73 74 72 79 20 6e 6f 74 20  0} registry not 
2a690 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 20 20  found, " +..    
2a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6b0 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e          "skippin
2a6c0 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61  g...", ForDispla
2a6d0 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
2a6e0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
2a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a700 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2a710 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2a730 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
2a740 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a760 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
2a770 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a790 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
2a7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a7b0 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62        if (!callb
2a7c0 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
2a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7e0 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
2a7f0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
2a800 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a820 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72           platfor
2a830 6d 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74  mName, clientDat
2a840 61 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  a, perUser, wow6
2a850 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a870 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20  throwOnMissing, 
2a880 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2a890 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
2a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2a8d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2a900 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2a910 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a920 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
2a930 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2a940 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2a950 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2a960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a9a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2a9b0 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20  gion Per-Visual 
2a9c0 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48  Studio Version H
2a9d0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
2a9e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2a9f0 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56  void InitializeV
2aa00 73 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20  sList(..        
2aa10 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2aa20 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2aa30 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
2aa40 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
2aa50 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
2aa60 20 20 20 20 72 65 66 20 56 73 4c 69 73 74 20 76      ref VsList v
2aa70 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20  sList..         
2aa80 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2aa90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2aaa0 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  (vsList == null)
2aab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aac0 20 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56    vsList = new V
2aad0 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  sList();....    
2aae0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69          if (vsLi
2aaf0 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  st.RootKey == nu
2ab00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2ab10 20 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74       vsList.Root
2ab20 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a  Key = rootKey;..
2ab30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2ab40 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e   (vsList.Version
2ab50 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
2ab60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ab70 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
2ab80 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77  t.Versions = new
2ab90 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
2aba0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2abb0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2abc0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2abd0 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2abe0 2e 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20 20  .NoVs2005)..    
2abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac00 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
2ac10 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2ac20 38 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d  8, 0)); // 2005.
2ac30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ac40 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2ac50 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2ac60 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2ac70 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20  .NoVs2008)..    
2ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac90 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
2aca0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2acb0 39 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d  9, 0)); // 2008.
2acc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2acd0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2ace0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2acf0 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2ad00 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20  .NoVs2010)..    
2ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
2ad30 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2ad40 31 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d  10, 0));// 2010.
2ad50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ad60 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2ad70 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2ad80 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2ad90 2e 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20 20  .NoVs2012)..    
2ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adb0 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
2adc0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2add0 31 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d  11, 0));// 2012.
2ade0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2adf0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2ae00 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2ae10 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2ae20 2e 4e 6f 56 73 32 30 31 33 29 0d 0a 20 20 20 20  .NoVs2013)..    
2ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae40 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
2ae50 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2ae60 31 32 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33 0d  12, 0));// 2013.
2ae70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ae80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ae90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2aea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2aee0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2aef0 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65  static bool Have
2af00 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  VsVersion(..    
2af10 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2af20 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2af30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2af40 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2af50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2af60 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
2af70 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
2af80 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
2af90 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2afa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2afb0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2afc0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2afd0 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
2afe0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b000 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
2b010 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2b020 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2b030 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b040 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
2b050 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
2b060 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
2b070 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2b080 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b090 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2b0a0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
2b0b0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2b0c0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b0e0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
2b0f0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
2b100 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2b110 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b120 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
2b130 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b150 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
2b160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b170 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
2b180 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47  RegistryHelper.G
2b190 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2b1b0 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c  y, "InstallDir",
2b1c0 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76   null, whatIf, v
2b1d0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2b1e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b1f0 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
2b200 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
2b210 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b220 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2b230 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2b240 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73 74   directory = (st
2b250 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ring)value;.... 
2b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2b270 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
2b280 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
2b290 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
2b2a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b2b0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2b2c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
2b2d0 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
2b2e0 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
2b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b300 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2b310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b320 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2b330 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
2b340 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b360 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2b370 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2b380 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2b390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b3a0 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 75       "Visual Stu
2b3b0 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69 6e  dio {0} found in
2b3c0 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22   directory {1}."
2b3d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b3e0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2b3f0 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20 46 6f  y(vsVersion), Fo
2b400 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f  rDisplay(directo
2b410 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ry)),..         
2b420 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2b430 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b450 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2b460 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2b470 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2b480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b4c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2b4d0 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2b4e0 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2b4f0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2b500 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2b510 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61  tatic bool ForEa
2b520 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73  chVsVersionRegis
2b530 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
2b540 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72    MockRegistry r
2b550 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
2b560 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c        VsList vsL
2b570 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ist,..          
2b580 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65    VisualStudioRe
2b590 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63  gistryCallback c
2b5a0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
2b5b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
2b5c0 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
2b5d0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
2b5e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b5f0 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
2b600 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
2b610 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
2b620 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2b630 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2b640 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
2b650 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
2b660 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2b670 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2b680 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2b690 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2b6a0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
2b6b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2b6c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b6d0 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20     if (registry 
2b6e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2b6f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b700 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2b710 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74   "invalid regist
2b720 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry";..          
2b730 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2b740 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2b750 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b760 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20    if (vsList == 
2b770 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2b780 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b790 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2b7a0 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b  nvalid VS list";
2b7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b7c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2b7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2b7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2b7f0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2b800 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52  otKey = vsList.R
2b810 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
2b820 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
2b830 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2b840 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b850 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2b860 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f  r = "invalid roo
2b870 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20  t key";..       
2b880 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b890 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2b8a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b8b0 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70       if (!IsSupp
2b8c0 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67  ortedRootKey(reg
2b8d0 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29  istry, rootKey))
2b8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b900 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b   error = "root k
2b910 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75  ey must be per-u
2b920 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69  ser or per-machi
2b930 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne";..          
2b940 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2b950 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2b960 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b970 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72    if (vsList.Ver
2b980 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
2b990 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2b9b0 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 65  rror = "no VS ve
2b9c0 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a  rsions found";..
2b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9e0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2b9f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2ba00 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
2ba10 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73 56  ach (Version vsV
2ba20 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74  ersion in vsList
2ba30 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20  .Versions)..    
2ba40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ba50 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2ba60 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2ba70 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2ba80 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
2ba90 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2baa0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2bab0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2bac0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76                "v
2bae0 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c  sVersion = {0}",
2baf0 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
2bb00 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2bb20 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2bb30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb40 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72 73   if (!HaveVsVers
2bb50 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
2bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2bb70 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
2bb80 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65  , suffix, perUse
2bb90 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  r, wow64, whatIf
2bba0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2bbb0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
2bbc0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2bbd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2bbf0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
2bc00 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
2bc10 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  y.Low,..        
2bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc30 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2bc40 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2bc50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc70 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74        "Visual St
2bc80 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20 66 6f 75  udio {0} not fou
2bc90 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22  nd, skipping..."
2bca0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2bcb0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2bcc0 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29  splay(vsVersion)
2bcd0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
2bce0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2bcf0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2bd00 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2bd10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2bd20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
2bd30 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
2bd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd50 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
2bd60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bd70 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
2bd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bd90 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2bda0 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  y, vsVersion, su
2bdb0 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 63  ffix, package, c
2bdc0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bde0 20 20 20 20 70 65 72 55 73 65 72 2c 20 77 6f 77      perUser, wow
2bdf0 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  64, throwOnMissi
2be00 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
2be10 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
2be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2be30 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
2be40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be60 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2be70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2be80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2be90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2bea0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2beb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2bec0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2bed0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2bee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2bf20 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2bf30 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on Configuration
2bf40 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a   File Handling..
2bf50 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
2bf60 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
2bf70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
2bf80 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
2bf90 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2bfa0 41 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 63  AddDbProviderFac
2bfb0 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
2bfc0 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
2bfd0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2bfe0 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
2bff0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2c000 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
2c010 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2c020 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
2c030 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2c040 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
2c050 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
2c060 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
2c070 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2c080 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2c090 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c0a0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2c0b0 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
2c0c0 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2c0d0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2c0e0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2c0f0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2c100 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c110 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dirty = false;..
2c120 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44              XmlD
2c130 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74  ocument document
2c140 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65   = new XmlDocume
2c150 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt();....       
2c160 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72       document.Pr
2c170 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65  eserveWhitespace
2c180 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2c190 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c        document.L
2c1a0 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  oad(fileName);..
2c1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
2c1c0 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d  lElement addElem
2c1d0 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53  ent = document.S
2c1e0 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28  electSingleNode(
2c1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c200 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
2c210 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
2c220 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20  nt, invariant)) 
2c230 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a  as XmlElement;..
2c240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2c250 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20   (addElement == 
2c260 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2c270 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c280 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 65        string[] e
2c290 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d  lementNames = {.
2c2a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c2b0 20 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74       "system.dat
2c2c0 61 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46  a", "DbProviderF
2c2d0 61 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20  actories"..     
2c2e0 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d             };...
2c2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c300 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76   XmlElement prev
2c310 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20  iousElement =.. 
2c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c330 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75     document.Docu
2c340 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20  mentElement; /* 
2c350 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
2c360 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c370 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72      foreach (str
2c380 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20  ing elementName 
2c390 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29  in elementNames)
2c3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c3b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c3c0 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d           addElem
2c3d0 65 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45 6c  ent = previousEl
2c3e0 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ement.SelectSing
2c3f0 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
2c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c410 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73   elementName) as
2c420 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
2c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c440 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65      if (addEleme
2c450 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nt == null)..   
2c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c470 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c480 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
2c490 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
2c4a0 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28  t.CreateElement(
2c4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2c4d0 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e  ementName, Strin
2c4e0 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20  g.Empty);....   
2c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c500 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65       previousEle
2c510 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64  ment.AppendChild
2c520 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20  (addElement);.. 
2c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c540 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2c550 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76              prev
2c560 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61 64  iousElement = ad
2c570 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20  dElement;..     
2c580 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5a0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
2c5b0 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d  ument.CreateElem
2c5c0 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ent(..          
2c5d0 20 20 20 20 20 20 20 20 20 20 22 61 64 64 22 2c            "add",
2c5e0 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
2c5f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c600 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65     previousEleme
2c610 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61  nt.AppendChild(a
2c620 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20  ddElement);.... 
2c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2c640 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
2c650 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c660 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2c670 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64  String.Equals(ad
2c680 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  dElement.GetAttr
2c690 69 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a  ibute("name"),..
2c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6b0 20 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67      name, String
2c6c0 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
2c6d0 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
2c6e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c6f0 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e       addElement.
2c700 53 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61  SetAttribute("na
2c710 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20  me", name);..   
2c720 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2c730 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2c740 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c750 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
2c760 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45  ring.Equals(addE
2c770 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62  lement.GetAttrib
2c780 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29  ute("invariant")
2c790 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c7a0 20 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74         invariant
2c7b0 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
2c7c0 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
2c7d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2c7f0 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  Element.SetAttri
2c800 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22  bute("invariant"
2c810 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20  , invariant);.. 
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2c830 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
2c840 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c850 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2c860 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64  String.Equals(ad
2c870 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  dElement.GetAttr
2c880 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74 69  ibute("descripti
2c890 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on"),..         
2c8a0 20 20 20 20 20 20 20 20 20 20 20 64 65 73 63 72             descr
2c8b0 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f  iption, StringCo
2c8c0 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
2c8d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2c8e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c8f0 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65     addElement.Se
2c900 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63  tAttribute("desc
2c910 72 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 69  ription", descri
2c920 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ption);..       
2c930 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
2c940 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2c950 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c960 20 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c 6c       string full
2c970 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e  TypeName = Strin
2c980 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b  g.Format("{0}, {
2c990 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
2c9a0 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20        typeName, 
2c9b0 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a  assemblyName);..
2c9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2c9d0 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
2c9e0 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
2c9f0 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22 29  ttribute("type")
2ca00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ca10 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e         fullTypeN
2ca20 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ame, StringCompa
2ca30 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
2ca40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca60 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74  addElement.SetAt
2ca70 74 72 69 62 75 74 65 28 22 74 79 70 65 22 2c 20  tribute("type", 
2ca80 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a  fullTypeName);..
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2caa0 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2cab0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2cac0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2cad0 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
2cae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2caf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cb00 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
2cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2cb30 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2cb40 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2cb50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cb60 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2cb70 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2cb80 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2cb90 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbb0 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30  "addElement = {0
2cbc0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61  }", ForDisplay(a
2cbd0 64 64 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20  ddElement)),..  
2cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbf0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2cc00 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2cc10 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
2cc20 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2cc30 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
2cc40 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d  ent.Save(fileNam
2cc50 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2cc60 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69         filesModi
2cc70 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  fied++;....     
2cc80 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64             saved
2cc90 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2cca0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ccb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2ccc0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
2ccd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2cce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ccf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd20 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
2cd30 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2cd40 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2cd50 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2cd60 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2cd70 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f  bool RemoveDbPro
2cd80 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
2cd90 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2cda0 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
2cdb0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2cdc0 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20  invariant,..    
2cdd0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2cde0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2cdf0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2ce00 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2ce10 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
2ce20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2ce30 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2ce40 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2ce50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ce60 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
2ce70 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2ce80 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
2ce90 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
2cea0 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
2cec0 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
2ced0 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
2cee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
2cef0 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
2cf00 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2cf10 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
2cf20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
2cf30 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ument.SelectSing
2cf40 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
2cf50 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
2cf60 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41  Format(XPathForA
2cf70 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  ddElement, invar
2cf80 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65  iant)) as XmlEle
2cf90 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ment;....       
2cfa0 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d       if (addElem
2cfb0 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent != null)..  
2cfc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2cfe0 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  Element.ParentNo
2cff0 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 61  de.RemoveChild(a
2d000 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  ddElement);..   
2d010 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2d020 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2d030 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2d040 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
2d050 65 6e 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  ent removeElemen
2d060 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
2d070 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
2d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d090 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50  String.Format(XP
2d0a0 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d  athForRemoveElem
2d0b0 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29  ent, invariant))
2d0c0 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
2d0d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2d0e0 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  f (removeElement
2d0f0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
2d100 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d110 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
2d120 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  Element.ParentNo
2d130 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72  de.RemoveChild(r
2d140 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a  emoveElement);..
2d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d160 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2d170 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2d180 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d190 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
2d1a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2d1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d1c0 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1e0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2d1f0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2d200 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2d210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d220 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2d230 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2d240 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2d250 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d270 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30  "addElement = {0
2d280 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  }, removeElement
2d290 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2b0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64    ForDisplay(add
2d2c0 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73  Element), ForDis
2d2d0 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65  play(removeEleme
2d2e0 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nt)),..         
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2d300 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2d310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d320 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
2d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d340 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76      document.Sav
2d350 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  e(fileName);....
2d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d370 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b  filesModified++;
2d380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d390 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
2d3a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d3b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d3c0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2d3d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d3e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2d3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2d430 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2d440 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
2d450 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
2d460 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2d470 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
2d480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2d490 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
2d4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d4b0 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
2d4c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2d4d0 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
2d4e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2d4f0 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
2d500 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
2d510 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
2d520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
2d530 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
2d540 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2d550 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
2d560 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2d570 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2d580 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
2d590 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2d5a0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2d5b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2d5c0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2d5d0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f            ref bo
2d5e0 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ol saved,..     
2d5f0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2d600 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2d610 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2d620 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
2d630 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2d640 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
2d650 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
2d660 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
2d670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d680 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
2d690 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2d6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d6b0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2d6c0 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e  id framework con
2d6d0 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64 61 74  fig callback dat
2d6e0 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
2d6f0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2d700 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2d710 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2d720 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
2d730 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d740 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2d750 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76  urn RemoveDbProv
2d760 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
2d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d780 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
2d790 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76  riant, whatIf, v
2d7a0 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
2d7b0 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
2d7c0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
2d7d0 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
2d7e0 20 20 20 20 20 20 20 41 64 64 44 62 50 72 6f 76         AddDbProv
2d7f0 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
2d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d810 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
2d820 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73  riant, name, des
2d830 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61  cription, typeNa
2d840 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2d850 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
2d860 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  yName, whatIf, v
2d870 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
2d880 64 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  d, ref error);..
2d890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2d8a0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
2d8b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8d0 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50  return RemoveDbP
2d8e0 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
2d8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d900 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
2d910 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66  nvariant, whatIf
2d920 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
2d930 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2d940 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
2d950 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
2d960 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2d970 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2d980 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2d990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d9d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2d9e0 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d     #region Assem
2d9f0 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64  bly Folders Hand
2da00 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
2da10 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
2da20 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46  ing GetAssemblyF
2da30 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a  oldersKeyName(..
2da40 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2da50 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2da60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2da70 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
2da80 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2da90 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
2daa0 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
2dab0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2dac0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2dad0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
2dae0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2daf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2db00 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2db10 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2db20 69 73 20 72 65 67 69 73 74 72 79 20 6b 65 79 20  is registry key 
2db30 61 70 70 65 61 72 73 20 74 6f 20 61 6c 77 61 79  appears to alway
2db40 73 20 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79  s be 32-bit only
2db50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2db60 20 20 20 20 20 20 20 28 69 2e 65 2e 20 70 72 6f         (i.e. pro
2db70 62 61 62 6c 79 20 62 65 63 61 75 73 65 20 69 74  bably because it
2db80 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79   is only used by
2db90 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20   Visual..       
2dba0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74       //       St
2dbb0 75 64 69 6f 2c 20 77 68 69 63 68 20 69 73 20 63  udio, which is c
2dbc0 75 72 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 20  urrently always 
2dbd0 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20  32-bit only)... 
2dbe0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2dbf0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2dc00 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69  g format = !Stri
2dc10 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2dc20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f  (platformName) ?
2dc30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dc40 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66    "{0}\\Microsof
2dc50 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33  t\\{1}\\v{2}\\{3
2dc60 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  }\\AssemblyFolde
2dc70 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20  rsEx" :..       
2dc80 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
2dc90 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
2dca0 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c  {2}\\AssemblyFol
2dcb0 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20  dersEx";....    
2dcc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
2dcd0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72  tring.Format(for
2dce0 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e  mat, GetRootKeyN
2dcf0 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77  ame(perUser, wow
2dd00 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
2dd10 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
2dd20 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2dd30 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
2dd40 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ame);..        }
2dd50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2dd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dda0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2ddb0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2ddc0 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79  ol AddToAssembly
2ddd0 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
2dde0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2ddf0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
2de00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2de10 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2de20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2de30 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
2de40 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2de50 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
2de60 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
2de70 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
2de80 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
2de90 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2dea0 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
2deb0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
2dec0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
2ded0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2dee0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2def0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2df00 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2df10 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2df20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2df30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2df40 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2df50 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2df60 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65  eyName = GetAsse
2df70 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
2df80 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2df90 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
2dfa0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2dfb0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2dfc0 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  me, perUser,..  
2dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f                wo
2dfe0 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
2dff0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2e000 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
2e010 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2e020 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e040 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2e050 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  me, true, whatIf
2e060 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2e070 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e080 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e090 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2e0b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e0c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2e0d0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0f0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2e100 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
2e110 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
2e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e130 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2e140 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
2e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e160 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e180 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e190 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2e1a0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
2e1b0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2e1c0 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
2e1d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e1e0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
2e1f0 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
2e200 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e230 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
2e240 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e270 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2e280 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2e290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2e2b0 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
2e2c0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2e2d0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
2e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2f0 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
2e300 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
2e310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e320 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2e330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e340 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2e360 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2e370 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e390 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64   subKey, null, d
2e3a0 69 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66  irectory, whatIf
2e3b0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
2e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2e3d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2e3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2e3f0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
2e400 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e450 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e460 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2e470 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f  c bool RemoveFro
2e480 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
2e490 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
2e4a0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2e4b0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
2e4c0 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
2e4d0 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
2e4e0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2e4f0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2e500 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2e510 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
2e520 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2e530 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
2e540 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2e550 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2e560 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e570 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2e580 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2e590 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2e5a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2e5b0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2e5c0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2e5d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2e5e0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2e5f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2e600 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e610 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
2e620 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79  me = GetAssembly
2e630 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d  FoldersKeyName(.
2e640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e650 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
2e660 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2e670 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
2e680 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2e690 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29            wow64)
2e6a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e6b0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2e6c0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
2e6d0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2e6e0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2e700 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
2e710 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2e720 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2e730 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e740 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2e750 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2e760 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e780 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2e790 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7b0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2e7c0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2e7d0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7f0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2e800 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2e810 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2e820 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2e830 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2e840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e850 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2e860 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
2e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e880 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
2e890 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  me, throwOnMissi
2e8a0 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
2e8b0 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
2e8c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e8d0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2e8e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2e8f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2e900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2e940 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2e950 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
2e960 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
2e970 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
2e980 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2e990 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2e9a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2e9b0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
2e9c0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2e9d0 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
2e9e0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2e9f0 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
2ea00 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2ea10 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
2ea20 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
2ea30 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2ea40 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2ea50 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2ea60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
2ea70 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2ea80 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2ea90 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2eaa0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2eab0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2eac0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2ead0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2eae0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2eaf0 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
2eb00 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
2eb10 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
2eb20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
2eb30 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
2eb40 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
2eb50 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
2eb60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2eb70 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2eb80 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d   = "invalid fram
2eb90 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64  ework callback d
2eba0 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
2ebb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ebc0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2ebd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2ebe0 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
2ebf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ec10 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d  eturn RemoveFrom
2ec20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
2ec30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ec40 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
2ec50 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
2ec60 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
2ec70 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
2ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec90 20 20 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74     LegacyProject
2eca0 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77  Name, perUser, w
2ecb0 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20 77 68 61  ow64, false, wha
2ecc0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  tIf, verbose,.. 
2ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ece0 20 20 20 72 65 66 20 65 72 72 6f 72 29 20 26 26     ref error) &&
2ecf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ed00 20 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46    AddToAssemblyF
2ed10 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
2ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2ed30 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
2ed40 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2ed50 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
2ed60 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2ed70 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63            Projec
2ed80 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 70  tName, pair.X, p
2ed90 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77  erUser, wow64, w
2eda0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
2edb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2edc0 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
2edd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ede0 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
2edf0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
2ee00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ee10 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46    return RemoveF
2ee20 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  romAssemblyFolde
2ee30 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
2ee40 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2ee50 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
2ee60 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2ee70 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
2ee80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ee90 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d        ProjectNam
2eea0 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  e, perUser, wow6
2eeb0 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  4, throwOnMissin
2eec0 67 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  g, whatIf,..    
2eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eee0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
2eef0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
2ef00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2ef10 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2ef20 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2ef30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2ef80 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20   #region Visual 
2ef90 53 74 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d  Studio Handling.
2efa0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2efb0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
2efc0 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  etVsRootKeyName(
2efd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2efe0 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
2eff0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2f000 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
2f010 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2f020 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2f030 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
2f040 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
2f050 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d  \VisualStudio",.
2f060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f070 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
2f080 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 29  perUser, wow64))
2f090 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2f0a0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2f0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2f0f0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2f100 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2f110 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a   GetVsKeyName(..
2f120 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2f130 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
2f140 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2f150 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
2f160 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2f170 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2f180 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
2f190 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2f1a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f1b0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2f1c0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f1e0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
2f1f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2f200 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f220 22 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 47  "{0}\\{1}{2}", G
2f230 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  etVsRootKeyName(
2f240 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c  perUser, wow64),
2f250 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
2f260 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 66               suf
2f270 66 69 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  fix);..        }
2f280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2f290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2f2e0 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
2f2f0 75 64 69 6f 20 44 61 74 61 20 53 6f 75 72 63 65  udio Data Source
2f300 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
2f310 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2f320 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61  c bool AddVsData
2f330 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
2f340 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2f350 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2f360 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2f370 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
2f380 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2f390 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
2f3a0 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
2f3b0 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
2f3c0 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2f3d0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2f3e0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2f3f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2f400 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2f410 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2f420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2f430 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2f440 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2f450 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f460 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
2f470 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
2f480 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2f4a0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2f4b0 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
2f4c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f4d0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2f4e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f4f0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
2f500 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
2f510 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f520 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2f530 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2f540 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
2f550 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f560 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2f570 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f580 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2f590 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
2f5a0 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
2f5b0 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72   suffix, perUser
2f5c0 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
2f5d0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2f5e0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2f5f0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
2f600 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
2f610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f620 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2f630 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
2f640 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2f650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2f660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f670 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
2f680 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f690 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f6a0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2f6b0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2f6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f6d0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2f6e0 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2f6f0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
2f700 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2f710 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2f720 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
2f730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f740 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2f750 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2f760 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f770 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2f780 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2f790 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
2f7a0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2f7b0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2f7d0 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73 22  y, "DataSources"
2f7e0 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
2f7f0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2f800 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f820 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
2f830 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2f840 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f860 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2f870 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f890 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2f8a0 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2f8b0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
2f8c0 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20  aSources",..    
2f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8e0 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
2f8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f900 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2f910 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2f920 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f940 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2f950 52 65 67 69 73 74 72 79 4b 65 79 20 64 61 74 61  RegistryKey data
2f960 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20 20  SourceKey =..   
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 52 65 67 69 73 74 72           Registr
2f990 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
2f9a0 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20  bKey(subKey,..  
2f9b0 20 20 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 70 61 63 6b 61 67            packag
2f9d0 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54  e.DataSourceId.T
2f9e0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2f9f0 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
2fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa10 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2fa20 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2fa30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa50 20 20 20 20 69 66 20 28 64 61 74 61 53 6f 75 72      if (dataSour
2fa60 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ceKey == null)..
2fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2faa0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2fab0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2fae0 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
2faf0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2fb00 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a  0}\\{1}", key,..
2fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb30 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
2fb40 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
2fb50 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20  IdFormat));.... 
2fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2fb80 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fba0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2fbc0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2fbd0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbf0 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b       dataSourceK
2fc00 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67  ey, null, String
2fc10 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc30 20 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61 62        "{0} Datab
2fc40 61 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a 65  ase File", Proje
2fc50 63 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c  ctName), whatIf,
2fc60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
2fc80 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fca0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2fcc0 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c  / NOTE: This val
2fcd0 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20  ue is new as of 
2fce0 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20  1.0.83.0...     
2fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd00 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2fd20 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2fd30 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd50 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b       dataSourceK
2fd60 65 79 2c 20 22 44 65 66 61 75 6c 74 50 72 6f 76  ey, "DefaultProv
2fd70 69 64 65 72 22 2c 0d 0a 20 20 20 20 20 20 20 20  ider",..        
2fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd90 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
2fda0 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72  ProviderId.ToStr
2fdb0 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
2fdc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
2fde0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2fdf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2fe00 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2fe10 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
2fe20 53 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63  SubKey(dataSourc
2fe30 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  eKey,..         
2fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe50 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
2fe60 28 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76  ("SupportingProv
2fe70 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20  iders\\{0}",..  
2fe80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe90 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
2fea0 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
2feb0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
2fec0 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  rmat)),..       
2fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fee0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2fef0 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
2ff00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ff20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ff30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2ff40 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2ff50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ff60 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2ffb0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2ffc0 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56  tic bool RemoveV
2ffd0 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
2ffe0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2fff0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
30000 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
30010 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
30020 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
30030 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
30040 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
30050 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
30060 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
30070 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
30080 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
30090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
300a0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
300b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
300c0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
300d0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
300e0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
300f0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
30100 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
30110 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
30120 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
30130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30140 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
30150 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
30160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30170 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
30180 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30190 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
301a0 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
301b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
301c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
301d0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
301e0 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
301f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30200 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
30210 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30220 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
30230 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
30240 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
30250 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65  sion, suffix, pe
30260 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a  rUser, wow64);..
30270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
30280 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
30290 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
302a0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
302b0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
302c0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
302d0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
302e0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
302f0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
30300 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30310 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
30320 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30330 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
30350 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
30360 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
30370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30380 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
30390 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
303a0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
303b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303c0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
303d0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
303e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
303f0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
30400 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
30410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
30420 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
30430 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
30440 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
30450 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
30460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30470 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75     key, "DataSou
30480 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  rces", true, wha
30490 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
304a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
304c0 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
304d0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
304e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30500 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
30510 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
30520 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30540 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
30550 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
30560 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d  \\DataSources",.
30570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30580 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
30590 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
305a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
305b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
305c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
305e0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
305f0 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53  ryHelper.DeleteS
30600 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
30610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30620 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
30630 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64  age.DataSourceId
30640 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
30650 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
30660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30670 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
30680 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30690 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
306a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
306b0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
306c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
306d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
306e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
306f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
30720 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
30730 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
30740 63 65 73 73 56 73 44 61 74 61 53 6f 75 72 63 65  cessVsDataSource
30750 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
30760 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
30770 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
30780 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
30790 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
307a0 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
307b0 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
307c0 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
307d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
307e0 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
307f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
30800 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
30810 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
30820 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
30830 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
30840 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
30850 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
30860 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
30870 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
30880 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
30890 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
308a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
308b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
308c0 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
308d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
308e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
308f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
30900 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
30910 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
30920 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
30930 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
30940 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
30950 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
30960 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
30970 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
30980 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
30990 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
309a0 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
309b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
309c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
309d0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
309e0 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63  valid VS callbac
309f0 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
30a00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30a10 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
30a20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30a30 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
30a40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
30a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30a60 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61    return AddVsDa
30a70 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
30a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30a90 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
30aa0 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
30ab0 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ge, perUser, wow
30ac0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
30ad0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
30ae0 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
30af0 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
30b00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
30b10 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
30b20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30b30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
30b40 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65  moveVsDataSource
30b50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30b60 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
30b70 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
30b80 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65 72 55  x, package, perU
30b90 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  ser, wow64,..   
30ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30bb0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
30bc0 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
30bd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
30be0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30bf0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
30c00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
30c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
30c50 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
30c60 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  n Visual Studio 
30c70 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 48 61  Data Provider Ha
30c80 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
30c90 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
30ca0 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 50 72 6f  ool AddVsDataPro
30cb0 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
30cc0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
30cd0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
30ce0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
30cf0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
30d00 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
30d10 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
30d20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
30d30 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
30d40 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
30d50 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
30d60 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
30d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
30d80 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
30d90 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
30da0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
30db0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
30dc0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
30dd0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
30de0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
30df0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30e00 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
30e10 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30e20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30e30 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
30e40 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65  = "invalid VS ve
30e50 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
30e60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30e70 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
30e80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30e90 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
30ea0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30eb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30ec0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
30ed0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61  = "invalid VS pa
30ee0 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20  ckage";..       
30ef0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30f00 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
30f10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30f20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
30f30 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
30f40 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  me(vsVersion, su
30f50 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77  ffix, perUser, w
30f60 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
30f70 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
30f80 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
30f90 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
30fa0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
30fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fc0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
30fd0 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
30fe0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
30ff0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
31010 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
31020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31030 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31040 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
31050 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
31060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31070 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
31080 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
31090 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
310a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
310b0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
310c0 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
310d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
310f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31100 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31110 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
31120 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
31130 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
31140 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
31150 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31160 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
31170 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c  "DataProviders",
31180 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
31190 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
311a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
311b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311c0 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
311d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
311e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
311f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31200 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
31210 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31230 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
31240 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
31250 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61  y key: {0}\\Data
31260 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20  Providers",..   
31270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31280 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
31290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
312a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
312b0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
312c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
312d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
312e0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
312f0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61 74  kRegistryKey dat
31300 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 0d 0a  aProviderKey =..
31310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31320 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
31330 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
31340 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d  eSubKey(subKey,.
31350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31360 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
31370 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
31380 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
31390 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
313a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313b0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
313c0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
313d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
313e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
313f0 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61 74           if (dat
31400 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 3d 20  aProviderKey == 
31410 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
31420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
31450 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
31460 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
31470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31480 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
31490 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
314a0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
314b0 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
314c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314d0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
314e0 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
314f0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
31500 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t));....        
31510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31520 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
31530 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
31540 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31560 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
31570 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
31580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
315a0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 6e  taProviderKey, n
315b0 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69 6f 6e  ull, Description
315c0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
315d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315e0 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
315f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
31610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31620 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
31630 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e   This value is n
31640 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e  ew as of 1.0.83.
31650 30 2e 20 20 48 6f 77 65 76 65 72 2c 0d 0a 20 20  0.  However,..  
31660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31670 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
31680 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65  t should only be
31690 20 73 65 74 20 69 66 20 74 68 65 20 70 61 63 6b   set if the pack
316a0 61 67 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  age assembly..  
316b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
316d0 6e 64 20 61 6c 6c 20 74 68 65 20 61 73 73 65 6d  nd all the assem
316e0 62 6c 69 65 73 20 69 74 20 72 65 66 65 72 73 20  blies it refers 
316f0 74 6f 20 61 72 65 20 62 65 69 6e 67 0d 0a 20 20  to are being..  
31700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31710 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70        //       p
31720 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 20 67  laced into the g
31730 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79 20 63  lobal assembly c
31740 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  ache...         
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31760 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
31770 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
31780 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73 73  ackage.GlobalAss
31790 65 6d 62 6c 79 43 61 63 68 65 29 0d 0a 20 20 20  emblyCache)..   
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
317c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317d0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
317e0 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
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 20 20 20 20 20 20 64 61                da
31810 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
31820 41 73 73 65 6d 62 6c 79 22 2c 0d 0a 20 20 20 20  Assembly",..    
31830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31840 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
31850 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61 6d 65  age.AssemblyName
31860 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a 20 20  .ToString(),..  
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 20 20 20 20 20 20 20 77 68                wh
31890 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
318a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
318b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
318c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318d0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
318e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318f0 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
31900 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20  value is new as 
31910 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20  of 1.0.83.0...  
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31930 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
31940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31950 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
31960 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
31970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31980 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
31990 69 64 65 72 4b 65 79 2c 20 22 41 73 73 6f 63 69  iderKey, "Associ
319a0 61 74 65 64 53 6f 75 72 63 65 22 2c 0d 0a 20 20  atedSource",..  
319b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319c0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
319d0 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54  e.DataSourceId.T
319e0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
319f0 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
31a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a10 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
31a20 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
31a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
31a40 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
31a50 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
31a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a70 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
31a80 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e 74  rKey, "Invariant
31a90 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e 74  Name", Invariant
31aa0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
31ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ac0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
31ad0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
31ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31af0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
31b00 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
31b30 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f  erKey, "Technolo
31b40 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  gy",..          
31b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b60 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74    package.AdoNet
31b70 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53  TechnologyId.ToS
31b80 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
31b90 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
31ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bb0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
31bc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
31be0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
31bf0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
31c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c10 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
31c20 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 20  ey, "CodeBase", 
31c30 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66  fileName, whatIf
31c40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
31c60 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
31c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c80 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
31c90 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cb0 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
31cc0 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63 74  oviderKey, "Fact
31cd0 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20 20  oryService",..  
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cf0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
31d00 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74  e.ServiceId.ToSt
31d10 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
31d20 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
31d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d40 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
31d50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31d60 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
31d70 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
31d80 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
31d90 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
31da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31db0 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
31dc0 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e  Objects\\DataCon
31dd0 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c  nectionUIControl
31de0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
31df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e00 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
31e10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31e20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
31e30 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
31e40 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
31e50 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
31e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e70 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
31e80 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
31e90 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 69  nnectionProperti
31ea0 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ec0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
31ed0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
31ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
31ef0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
31f00 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
31f10 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
31f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f30 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
31f40 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
31f50 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72  ConnectionSuppor
31f60 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t", whatIf,..   
31f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f80 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
31f90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
31fb0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
31fc0 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
31fd0 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
31fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ff0 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
32000 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f  edObjects\\DataO
32010 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20 77  bjectSupport", w
32020 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
32030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32040 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
32050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32060 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
32070 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
32080 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65  bKey(dataProvide
32090 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rKey,..         
320a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320b0 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a     "SupportedObj
320c0 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53 75  ects\\DataViewSu
320d0 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d  pport", whatIf,.
320e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
32100 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
32110 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
32140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
32150 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
32160 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32170 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
32180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
321c0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
321d0 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56  tic bool RemoveV
321e0 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
321f0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
32200 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
32210 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
32220 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
32230 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
32240 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
32250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
32260 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
32270 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
32280 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
32290 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
322a0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
322b0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
322c0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
322d0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
322e0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
322f0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
32300 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
32310 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
32320 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
32330 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
32340 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32350 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
32360 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
32370 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
32380 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
32390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
323a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
323b0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
323c0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
323d0 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
323e0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b  perUser, wow64);
323f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32400 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
32410 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
32420 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
32430 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
32440 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
32450 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
32460 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
32470 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
32480 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32490 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
324a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
324b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
324c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324d0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
324e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
324f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32500 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
32510 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
32520 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
32530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32540 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
32550 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
32560 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
32570 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
32580 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
325a0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
325b0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
325c0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
325d0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
325e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325f0 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50       key, "DataP
32600 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c  roviders", true,
32610 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
32620 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
32630 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32640 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
32650 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
32660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32670 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
32690 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
326a0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
326b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326c0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
326d0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
326e0 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64   {0}\\DataProvid
326f0 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ers",..         
32700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32710 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
32720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32730 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
32740 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
32750 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
32760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32770 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
32780 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
32790 0d 0a 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 73 75 62 4b 65 79            subKey
327b0 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72  , package.DataPr
327c0 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
327d0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
327e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327f0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
32800 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
32810 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
32820 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32830 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32840 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
32850 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
32860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
328b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
328c0 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61  bool ProcessVsDa
328d0 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
328e0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
328f0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
32900 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
32910 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
32920 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
32930 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
32940 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
32950 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
32960 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
32970 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
32980 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
32990 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
329a0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
329b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
329c0 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
329d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
329e0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
329f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
32a00 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
32a10 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
32a20 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
32a30 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
32a40 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
32a50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
32a60 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
32a70 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
32a80 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
32a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
32aa0 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
32ab0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
32ad0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
32ae0 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  VS callback data
32af0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
32b00 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
32b10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
32b20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32b30 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
32b40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32b50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32b60 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f 76  rn AddVsDataProv
32b70 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ider(..         
32b80 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
32b90 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
32ba0 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20  uffix, package, 
32bb0 70 61 69 72 2e 58 2c 20 70 65 72 55 73 65 72 2c  pair.X, perUser,
32bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32bd0 20 20 20 20 20 20 77 6f 77 36 34 2c 20 77 68 61        wow64, wha
32be0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
32bf0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
32c00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
32c10 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
32c20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32c30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32c40 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72  n RemoveVsDataPr
32c50 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20  ovider(..       
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
32c70 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
32c80 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
32c90 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
32ca0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32cb0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
32cc0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
32cd0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
32ce0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
32cf0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
32d00 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
32d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32d50 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
32d60 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
32d70 74 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48 61  tudio Package Ha
32d80 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
32d90 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
32da0 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73  oid InitializeVs
32db0 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
32dc0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
32dd0 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
32de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32df0 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  ol globalAssembl
32e00 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 20  yCache,..       
32e10 20 20 20 20 20 72 65 66 20 50 61 63 6b 61 67 65       ref Package
32e20 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20   package..      
32e30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
32e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32e50 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
32e60 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
32e70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32e80 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20 6e       package = n
32e90 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d  ew Package();...
32ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32eb0 20 70 61 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c   package.Assembl
32ec0 79 4e 61 6d 65 20 3d 20 61 73 73 65 6d 62 6c 79  yName = assembly
32ed0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
32ee0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 47         package.G
32ef0 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
32f00 68 65 20 3d 20 67 6c 6f 62 61 6c 41 73 73 65 6d  he = globalAssem
32f10 62 6c 79 43 61 63 68 65 3b 0d 0a 0d 0a 20 20 20  blyCache;....   
32f20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
32f30 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e  kage.AdoNetTechn
32f40 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20 47 75  ologyId = new Gu
32f50 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
32f60 20 20 20 20 20 20 20 20 20 22 37 37 41 42 39 41           "77AB9A
32f70 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39 31 41  9D-78B9-4BA7-91A
32f80 43 2d 38 37 33 46 35 33 33 38 46 31 44 32 22 29  C-873F5338F1D2")
32f90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32fa0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63       package.Pac
32fb0 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47 75 69  kageId = new Gui
32fc0 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
32fd0 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38          "DCBE6C8
32fe0 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33  D-0E57-4099-A183
32ff0 2d 39 38 46 46 37 34 43 36 34 44 39 43 22 29 3b  -98FF74C64D9C");
33000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33010 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76      package.Serv
33020 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64  iceId = new Guid
33030 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33040 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38 44         "DCBE6C8D
33050 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33 2d  -0E57-4099-A183-
33060 39 38 46 46 37 34 43 36 34 44 39 44 22 29 3b 0d  98FF74C64D9D");.
33070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33080 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53     package.DataS
33090 6f 75 72 63 65 49 64 20 3d 20 6e 65 77 20 47 75  ourceId = new Gu
330a0 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
330b0 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41 42           "0EBAAB
330c0 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44  6E-CA80-4B4A-8DD
330d0 46 2d 43 42 45 36 42 46 30 35 38 43 37 31 22 29  F-CBE6BF058C71")
330e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
330f0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
33100 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 6e 65  aProviderId = ne
33110 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
33120 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30 45               "0E
33130 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41  BAAB6E-CA80-4B4A
33140 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 43  -8DDF-CBE6BF058C
33150 37 30 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  70");..         
33160 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
33170 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
33180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
331a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
331b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
331c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
331d0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
331e0 6c 20 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d  l AddVsPackage(.
331f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
33200 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
33210 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
33220 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
33230 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
33240 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
33250 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
33260 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
33270 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
33280 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
33290 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
332a0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
332b0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
332c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
332d0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
332e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
332f0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
33300 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
33310 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
33320 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
33330 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33340 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
33350 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
33360 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33370 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
33380 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
33390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
333a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
333b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
333c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
333d0 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
333e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
333f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33400 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
33410 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
33420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33430 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
33440 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
33450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
33460 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
33470 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
33480 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
33490 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d  erUser, wow64);.
334a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
334b0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
334c0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
334d0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
334e0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
334f0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
33500 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
33510 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
33520 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
33530 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33540 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
33550 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33560 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33580 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
33590 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
335a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335b0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
335c0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
335d0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
335e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335f0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
33600 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
33610 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
33620 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
33630 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33650 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
33660 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
33670 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
33680 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
33690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336a0 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67      key, "Packag
336b0 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
336c0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
336d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
336e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
336f0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
33700 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
33710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
33720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33730 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
33740 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
33750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33760 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
33770 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
33780 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
33790 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20  Packages",..    
337a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337b0 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
337c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
337d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
337e0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
337f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
33800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33810 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
33820 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
33830 4e 4f 54 45 3a 20 2a 57 41 52 4e 49 4e 47 2a 20  NOTE: *WARNING* 
33840 43 68 61 6e 67 69 6e 67 20 61 6e 79 20 6f 66 20  Changing any of 
33850 74 68 65 73 65 20 76 61 6c 75 65 73 20 77 69 6c  these values wil
33860 6c 20 6c 69 6b 65 6c 79 0d 0a 20 20 20 20 20 20  l likely..      
33870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33880 20 20 20 20 20 20 20 72 65 71 75 69 72 65 20 61         require a
33890 20 6e 65 77 20 22 70 61 63 6b 61 67 65 20 6c 6f   new "package lo
338a0 61 64 20 6b 65 79 22 20 28 50 4c 4b 29 20 74 6f  ad key" (PLK) to
338b0 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
338c0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
338d0 20 20 67 65 6e 65 72 61 74 65 64 20 69 6e 20 6f    generated in o
338e0 72 64 65 72 20 74 6f 20 70 72 6f 70 65 72 6c 79  rder to properly
338f0 20 73 75 70 70 6f 72 74 20 6c 6f 61 64 69 6e 67   support loading
33900 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
33910 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
33920 20 20 20 70 61 63 6b 61 67 65 20 69 6e 74 6f 20     package into 
33930 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30  Visual Studio 20
33940 30 38 20 61 6e 64 20 65 61 72 6c 69 65 72 20 77  08 and earlier w
33950 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20  ithout..        
33960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
33970 20 20 20 20 20 74 68 65 20 6d 61 74 63 68 69 6e       the matchin
33980 67 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  g Visual Studio 
33990 53 44 4b 20 62 65 69 6e 67 20 69 6e 73 74 61 6c  SDK being instal
339a0 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  led...          
339b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
339c0 20 20 20 50 6c 65 61 73 65 20 72 65 66 65 72 20     Please refer 
339d0 74 6f 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44  to the "SQLite.D
339e0 65 73 69 67 6e 65 72 5c 70 6c 6b 2e 74 78 74 22  esigner\plk.txt"
339f0 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20   file..         
33a00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33a10 20 20 20 20 66 6f 72 20 74 68 65 20 65 78 69 73      for the exis
33a20 74 69 6e 67 20 6f 66 66 69 63 69 61 6c 20 76 61  ting official va
33a30 6c 75 65 73 20 61 6e 64 20 75 70 64 61 74 65 20  lues and update 
33a40 74 68 65 6d 20 69 66 0d 0a 20 20 20 20 20 20 20  them if..       
33a50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
33a60 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 2e        necessary.
33a70 20 20 41 6c 73 6f 2c 20 74 68 65 20 6e 65 77 6c    Also, the newl
33a80 79 20 67 65 6e 65 72 61 74 65 64 20 70 61 63 6b  y generated pack
33a90 61 67 65 20 6c 6f 61 64 0d 0a 20 20 20 20 20 20  age load..      
33aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33ab0 20 20 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c         key itsel
33ac0 66 2c 20 77 68 69 63 68 20 69 73 20 61 20 31 32  f, which is a 12
33ad0 38 20 63 68 61 72 61 63 74 65 72 20 61 6c 70 68  8 character alph
33ae0 61 6e 75 6d 65 72 69 63 0d 0a 20 20 20 20 20 20  anumeric..      
33af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33b00 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 6d         string, m
33b10 75 73 74 20 62 65 20 70 6c 61 63 65 64 20 69 6e  ust be placed in
33b20 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 73 74   the resource st
33b30 72 69 6e 67 20 6e 61 6d 65 64 0d 0a 20 20 20 20  ring named..    
33b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b50 2f 2f 20 20 20 20 20 20 20 22 34 30 30 22 20 69  //       "400" i
33b60 6e 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44 65  n the "SQLite.De
33b70 73 69 67 6e 65 72 5c 56 53 50 61 63 6b 61 67 65  signer\VSPackage
33b80 2e 72 65 73 78 22 20 66 69 6c 65 0d 0a 20 20 20  .resx" file..   
33b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ba0 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68   //       and th
33bb0 65 6e 20 74 68 65 20 64 65 73 69 67 6e 65 72 20  en the designer 
33bc0 61 73 73 65 6d 62 6c 79 20 69 74 73 65 6c 66 20  assembly itself 
33bd0 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20 20  must be..       
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
33bf0 20 20 20 20 20 20 72 65 63 6f 6d 70 69 6c 65 64        recompiled
33c00 2e 20 20 41 73 20 6f 66 20 74 68 69 73 20 77 72  .  As of this wr
33c10 69 74 69 6e 67 20 28 69 6e 20 46 65 62 72 75 61  iting (in Februa
33c20 72 79 20 32 30 31 32 29 2c 0d 0a 20 20 20 20 20  ry 2012),..     
33c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33c40 2f 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c 6c  /       the foll
33c50 6f 77 69 6e 67 20 55 52 4c 20 69 73 20 74 68 65  owing URL is the
33c60 20 70 72 6f 70 65 72 20 70 6c 61 63 65 20 74 6f   proper place to
33c70 20 67 65 6e 65 72 61 74 65 0d 0a 20 20 20 20 20   generate..     
33c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33c90 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20  /       package 
33ca0 6c 6f 61 64 20 6b 65 79 73 3a 0d 0a 20 20 20 20  load keys:..    
33cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cc0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
33cd0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
33ce0 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69 63   http://msdn.mic
33cf0 72 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75 73  rosoft.com/en-us
33d00 2f 76 73 74 75 64 69 6f 2f 63 63 36 35 35 37 39  /vstudio/cc65579
33d10 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  5..             
33d20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
33d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
33d40 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
33d50 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b 65 79  ryKey packageKey
33d60 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
33d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d80 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
33d90 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b  reateSubKey(subK
33da0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
33db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33dc0 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
33dd0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
33de0 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c  Format), whatIf,
33df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
33e10 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
33e20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
33e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e40 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
33e50 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ageKey == null).
33e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33e70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e90 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
33ea0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
33eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ed0 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
33ee0 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
33ef0 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
33f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f10 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
33f20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
33f30 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
33f40 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20  Format));....   
33f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
33f70 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
33f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
33fb0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
33fc0 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
33fd0 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
33fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ff0 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
34000 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20  t("{0} Designer 
34010 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63  Package", Projec
34020 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  tName),..       
34030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34040 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
34050 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
34060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34070 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
34080 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
34090 65 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d 0a  eKey, "Class",..
340a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340b0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
340c0 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 53 51 4c  ite.Designer.SQL
340d0 69 74 65 50 61 63 6b 61 67 65 22 2c 20 77 68 61  itePackage", wha
340e0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
340f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34100 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
34110 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
34120 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43  e(packageKey, "C
34130 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20 20 20 20  odeBase",..     
34140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34150 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
34160 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34170 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
34190 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
341a0 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
341b0 2c 20 22 49 44 22 2c 20 34 30 30 2c 20 77 68 61  , "ID", 400, wha
341c0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
341d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341e0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
341f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34200 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
34210 72 65 63 74 6f 72 79 20 3d 20 47 65 74 53 79 73  rectory = GetSys
34220 74 65 6d 44 69 72 65 63 74 6f 72 79 28 77 6f 77  temDirectory(wow
34230 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
34240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34250 69 66 20 28 64 69 72 65 63 74 6f 72 79 20 3d 3d  if (directory ==
34260 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
34270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34280 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20      directory = 
34290 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d  String.Empty;...
342a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
342b0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
342c0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
342d0 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 6e  (packageKey, "In
342e0 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c 0d 0a  procServer32",..
342f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34300 20 20 20 20 20 20 20 20 20 20 20 20 50 61 74 68              Path
34310 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
34320 72 79 2c 20 22 6d 73 63 6f 72 65 65 2e 64 6c 6c  ry, "mscoree.dll
34330 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
34340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34350 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34360 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
34380 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
34390 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
343a0 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c  , "CompanyName",
343b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
343c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68                "h
343d0 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74  ttp://system.dat
343e0 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20  a.sqlite.org/", 
343f0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
34400 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34410 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
34420 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
34430 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
34440 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a   "MinEdition",..
34450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34460 20 20 20 20 20 20 20 20 20 20 20 20 22 73 74 61              "sta
34470 6e 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c 20  ndard", whatIf, 
34480 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
34490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344a0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
344b0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
344c0 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63  kageKey, "Produc
344d0 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20  tName",..       
344e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344f0 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
34500 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72  at("{0} Designer
34510 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65   Package", Proje
34520 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  ctName),..      
34530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34540 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
34550 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
34560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34570 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
34580 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
34590 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 56  geKey, "ProductV
345a0 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20  ersion",..      
345b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345c0 20 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68 61        "1.0", wha
345d0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
345e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
345f0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
34600 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
34610 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a 20   toolboxKey =.. 
34620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
34640 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
34650 65 61 74 65 53 75 62 4b 65 79 28 70 61 63 6b 61  eateSubKey(packa
34660 67 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  geKey,..        
34670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34680 20 20 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f 78          "Toolbox
34690 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
346a0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
346b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
346c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
346d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
346e0 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e  (toolboxKey == n
346f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
34700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34710 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34730 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
34740 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
34750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34770 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
34780 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
34790 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
347a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347b0 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c            "{0}\\
347c0 54 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61 67  Toolbox", packag
347d0 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  eKey);....      
347e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34800 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
34810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34820 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
34830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34840 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
34850 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
34860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34880 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66  toolboxKey, "Def
34890 61 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c 20  ault Items", 3, 
348a0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
348b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348c0 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
348d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
348e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
348f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34900 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
34910 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34920 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34930 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34940 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
34950 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
34960 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
34970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
34980 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75  ey, "Menus", tru
34990 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
349a0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
349b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
349c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
349d0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
349e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
349f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a10 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
34a20 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
34a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a40 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
34a50 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
34a60 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d  y: {0}\\Menus",.
34a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34a80 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
34a90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34ab0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
34ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ad0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
34ae0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
34af0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
34b00 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
34b10 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
34b20 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b  ey, package.Pack
34b30 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ageId.ToString(V
34b40 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
34b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b60 20 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33 22       ", 1000, 3"
34b70 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
34b80 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
34b90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
34ba0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
34bb0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
34bc0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
34bd0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
34be0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
34bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
34c00 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20 74  y, "Services", t
34c10 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
34c20 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
34c30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
34c50 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
34c60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
34c70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c90 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
34ca0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
34cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cc0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
34cd0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
34ce0 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63  key: {0}\\Servic
34cf0 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
34d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d10 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
34d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d30 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34d50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
34d70 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
34d80 72 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65 79  ryKey serviceKey
34d90 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
34da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34db0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
34dc0 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b  reateSubKey(subK
34dd0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
34de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34df0 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65   package.Service
34e00 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
34e10 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c  Format), whatIf,
34e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
34e40 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
34e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e70 20 20 20 20 20 20 20 20 69 66 20 28 73 65 72 76          if (serv
34e80 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  iceKey == null).
34e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34ea0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
34eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ec0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
34ed0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
34ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f00 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
34f10 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
34f20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
34f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f40 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
34f50 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65   package.Service
34f60 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
34f70 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20  Format));....   
34f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34fa0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
34fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
34fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
34fe0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
34ff0 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c  alue(serviceKey,
35000 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35020 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b      package.Pack
35030 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ageId.ToString(V
35040 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74  sIdFormat), what
35050 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
35060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35070 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
35080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35090 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
350a0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65  lper.SetValue(se
350b0 72 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65 22  rviceKey, "Name"
350c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
350d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
350e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
350f0 7d 20 44 65 73 69 67 6e 65 72 20 53 65 72 76 69  } Designer Servi
35100 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  ce", ProjectName
35110 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
35120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35130 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
35140 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
35150 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
35160 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
35170 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35180 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35190 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
351a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
351b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
35200 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
35210 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61 63 6b  ool RemoveVsPack
35220 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
35230 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
35240 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
35250 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
35260 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
35270 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
35280 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
35290 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
352a0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
352b0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
352c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
352d0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
352e0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
352f0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
35300 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
35310 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
35320 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
35330 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
35340 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
35350 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
35360 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35370 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
35380 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
35390 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
353a0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
353b0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
353c0 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
353d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
353e0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
353f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35400 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
35410 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
35420 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35430 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
35440 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
35450 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
35460 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
35470 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
35480 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35490 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
354a0 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
354b0 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
354c0 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c  suffix, perUser,
354d0 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
354e0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
354f0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
35500 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
35510 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
35520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35530 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
35540 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
35550 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
35560 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
35570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35580 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
35590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
355a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
355b0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
355c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
355d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
355e0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
355f0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
35600 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
35610 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35620 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
35630 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
35640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35650 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
35660 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
35670 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35680 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
35690 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
356a0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
356b0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
356c0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
356e0 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72  , "Packages", tr
356f0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
35700 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
35710 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
35730 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
35740 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
35750 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35770 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
35780 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
35790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357a0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
357b0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
357c0 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65  ey: {0}\\Package
357d0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
357e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357f0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
35800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35810 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
35820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35830 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
35850 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
35860 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
35870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35880 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
35890 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
358a0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
358b0 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
358c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
358e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
358f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35900 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
35910 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
35920 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
35930 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
35940 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
35950 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
35960 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c  , "Menus", true,
35970 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
35980 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
35990 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
359a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
359b0 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
359c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
359e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
359f0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
35a00 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
35a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
35a30 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
35a40 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20   {0}\\Menus",.. 
35a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a60 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
35a70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35a80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
35a90 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
35aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35ab0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35ac0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
35ad0 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61 6c  Helper.DeleteVal
35ae0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
35af0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
35b00 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  Key, package.Pac
35b10 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
35b20 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
35b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b40 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73        throwOnMis
35b50 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
35b60 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
35b70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
35b90 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
35ba0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
35bb0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
35bc0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
35bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35be0 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73    key, "Services
35bf0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
35c00 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
35c10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c30 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
35c40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
35c50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c70 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
35c80 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
35c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ca0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
35cb0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
35cc0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65  try key: {0}\\Se
35cd0 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20  rvices",..      
35ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cf0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
35d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
35d20 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
35d30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
35d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d50 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
35d60 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  r.DeleteSubKeyTr
35d70 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
35d80 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
35d90 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72  Key, package.Ser
35da0 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  viceId.ToString(
35db0 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
35dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35dd0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
35de0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
35df0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
35e00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35e10 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
35e20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
35e30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
35e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
35e90 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
35ea0 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b  ol ProcessVsPack
35eb0 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
35ec0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
35ed0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
35ee0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
35ef0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
35f00 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
35f10 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
35f20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
35f30 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
35f40 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
35f50 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
35f60 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
35f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
35f80 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
35f90 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
35fa0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
35fb0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
35fc0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
35fd0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
35fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
35ff0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
36000 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
36010 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36020 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
36030 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
36040 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
36050 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
36060 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
36070 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
36080 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
36090 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
360a0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
360b0 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
360c0 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
360d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
360e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
360f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
36100 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
36110 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
36120 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36130 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
36140 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
36150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36160 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
36170 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
36180 67 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55  ge, pair.X, perU
36190 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
361a0 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c            wow64,
361b0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
361c0 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
361d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
361e0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
361f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
36200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36210 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 61  eturn RemoveVsPa
36220 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
36230 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
36240 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
36250 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
36260 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
36270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36280 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73        throwOnMis
36290 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
362a0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
362b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
362c0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
362d0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
362e0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
362f0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
36300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36340 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
36350 20 20 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69     #region Appli
36360 63 61 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69  cation Entry Poi
36370 6e 74 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  nt..        [Met
36380 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
36390 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
363a0 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
363b0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
363c0 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20 20  nt Main(..      
363d0 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
363e0 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rgs..           
363f0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
36400 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
36410 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
36420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
36430 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
36440 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c  figuration = nul
36450 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
36460 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72      string error
36470 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
36480 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
36490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
364a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
364b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
364c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
364d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
364e0 72 65 67 69 6f 6e 20 44 65 62 75 67 67 65 72 20  region Debugger 
364f0 48 6f 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  Hook..          
36500 20 20 20 20 20 20 69 66 20 28 45 6e 76 69 72 6f        if (Enviro
36510 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f 6e  nment.GetEnviron
36520 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22 42 72  mentVariable("Br
36530 65 61 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eak") != null)..
36540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36560 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
36570 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20  riteLine(..     
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36590 20 20 20 22 41 74 74 61 63 68 20 61 20 64 65 62     "Attach a deb
365a0 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73  ugger to process
365b0 20 7b 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20 20   {0} and " +..  
365c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365d0 20 20 20 20 20 20 22 70 72 65 73 73 20 61 6e 79        "press any
365e0 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 65   key to continue
365f0 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
36600 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
36610 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50  cess.GetCurrentP
36620 72 6f 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a 0d  rocess().Id);...
36630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36640 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
36650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
36660 0a 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 43 6f 6e 73 6f 6c 65           Console
36680 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20  .ReadKey(true); 
36690 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
366a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
366c0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 49          catch (I
366d0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
366e0 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e  xception) // Con
366f0 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20  sole.ReadKey..  
36700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36710 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36720 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
36730 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
36740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36750 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36760 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 67            Debugg
36770 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20  er.Break();..   
36780 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
36790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367a0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
367b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
367c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
36800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36810 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64   #region Command
36820 20 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67   Line Processing
36830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36840 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61    if (!Configura
36850 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a  tion.FromArgs(..
36860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36870 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 74 72          args, tr
36880 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 72  ue, ref configur
36890 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72  ation, ref error
368a0 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
368b0 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69            !Confi
368c0 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73  guration.Process
368d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
368e0 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 2c             args,
368f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
36900 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29  true, ref error)
36910 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
36920 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67           !Config
36930 75 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e  uration.CheckRun
36940 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
36950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36960 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
36970 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65  ion, true, ref e
36980 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
36990 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
369a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
369b0 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
369c0 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  age(TracePriorit
369d0 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
369e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369f0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
36a00 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
36a10 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d  , thisAssembly,.
36a20 0a 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 65 72 72 6f 72 2c 20           error, 
36a40 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
36a50 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
36a60 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
36a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
36a80 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72  ssageBoxIcon.Err
36a90 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
36aa0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
36ab0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
36ac0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
36ad0 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
36ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36af0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
36b00 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
36b10 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d  ck, "Failure.",.
36b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36b30 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
36b40 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
36b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b60 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49  return 1; /* FAI
36b70 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20  LURE */..       
36b80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
36b90 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
36ba0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
36bb0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
36bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36c00 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
36c10 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
36c20 20 72 65 67 69 73 74 72 79 20 3d 20 6e 65 77 20   registry = new 
36c30 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  MockRegistry(.. 
36c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c50 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
36c60 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 66 61 6c  tion.WhatIf, fal
36c70 73 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  se, false))..   
36c80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 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 72 65 67 69 6f 6e 20 43 6f 72 65      #region Core
36cb0 20 41 73 73 65 6d 62 6c 79 20 4e 61 6d 65 20 43   Assembly Name C
36cc0 68 65 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  heck..          
36cd0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
36ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cf0 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20 74 68    // NOTE: Do th
36d00 69 73 20 66 69 72 73 74 2c 20 62 65 66 6f 72 65  is first, before
36d10 20 6d 61 6b 69 6e 67 20 61 6e 79 20 63 68 61 6e   making any chan
36d20 67 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ges to the..    
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d40 2f 2f 20 20 20 20 20 20 20 73 79 73 74 65 6d 2c  //       system,
36d50 20 62 65 63 61 75 73 65 20 69 74 20 77 69 6c 6c   because it will
36d60 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
36d70 69 6f 6e 20 69 66 20 74 68 65 0d 0a 20 20 20 20  ion if the..    
36d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d90 2f 2f 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61  //       file na
36da0 6d 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 70 72  me does not repr
36db0 65 73 65 6e 74 20 61 20 76 61 6c 69 64 20 6d 61  esent a valid ma
36dc0 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20  naged..         
36dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
36de0 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20      assembly... 
36df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e00 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
36e10 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
36e20 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73 73 65  blyName coreAsse
36e30 6d 62 6c 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20  mblyName =..    
36e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e50 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
36e60 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65  .GetAssemblyName
36e70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
36e90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72  onfiguration.Cor
36ea0 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  eFileName); /* t
36eb0 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  hrow */....     
36ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
36ed0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64 65 73 69  ssemblyName desi
36ee0 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
36ef0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
36f00 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
36f10 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65  mblyName.GetAsse
36f20 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  mblyName(..     
36f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f40 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
36f50 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c  tion.DesignerFil
36f60 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
36f70 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
36f80 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
36f90 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
36fa0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
36fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fe0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
36ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72                #r
37000 65 67 69 6f 6e 20 53 79 73 74 65 6d 20 44 69 72  egion System Dir
37010 65 63 74 6f 72 79 20 43 68 65 63 6b 0d 0a 20 20  ectory Check..  
37020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37030 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
37040 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
37050 45 3a 20 47 65 74 74 69 6e 67 20 74 68 65 20 73  E: Getting the s
37060 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79 20  ystem directory 
37070 76 61 6c 75 65 20 68 65 72 65 20 73 65 72 76 65  value here serve
37080 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
37090 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
370a0 74 77 6f 20 70 75 72 70 6f 73 65 73 3a 0d 0a 20  two purposes:.. 
370b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370c0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
370d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
370e0 20 20 20 20 31 2e 20 49 74 20 65 6e 61 62 6c 65      1. It enable
370f0 73 20 75 73 20 74 6f 20 6c 6f 67 20 74 68 65 20  s us to log the 
37100 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79  system directory
37110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37120 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
37130 20 20 76 61 6c 75 65 20 76 65 72 79 20 65 61 72    value very ear
37140 6c 79 20 69 6e 20 74 68 65 20 69 6e 73 74 61 6c  ly in the instal
37150 6c 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 0d 0a  lation process..
37160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37170 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
37180 28 69 2e 65 2e 20 65 76 65 6e 20 74 68 6f 75 67  (i.e. even thoug
37190 68 20 74 68 65 20 76 61 6c 75 65 20 69 74 73 65  h the value itse
371a0 6c 66 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20  lf is not..     
371b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
371c0 2f 20 20 20 20 20 20 20 20 20 20 6e 65 65 64 65  /          neede
371d0 64 20 75 6e 74 69 6c 20 6d 75 63 68 20 6c 61 74  d until much lat
371e0 65 72 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  er)...          
371f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37210 20 20 2f 2f 20 20 20 20 20 20 20 32 2e 20 53 69    //       2. Si
37220 6e 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 73  nce the value is
37230 20 63 61 63 68 65 64 2c 20 69 74 20 70 72 65 76   cached, it prev
37240 65 6e 74 73 20 61 6e 0d 0a 20 20 20 20 20 20 20  ents an..       
37250 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
37260 20 20 20 20 20 20 20 20 20 65 78 63 65 70 74 69           excepti
37270 6f 6e 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 68  on from being th
37280 72 6f 77 6e 20 6d 75 63 68 20 6c 61 74 65 72 20  rown much later 
37290 64 75 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  during..        
372a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
372b0 20 20 20 20 20 20 20 20 74 68 65 20 69 6e 73 74          the inst
372c0 61 6c 6c 20 77 68 65 6e 20 74 68 65 20 76 61 6c  all when the val
372d0 75 65 20 69 73 20 71 75 65 72 69 65 64 20 61 67  ue is queried ag
372e0 61 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ain..           
372f0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
37300 20 20 20 20 20 28 69 2e 65 2e 20 77 69 74 68 20       (i.e. with 
37310 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
37320 6f 72 20 74 68 65 20 22 77 6f 77 36 34 22 0d 0a  or the "wow64"..
37330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37340 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
37350 70 61 72 61 6d 65 74 65 72 29 2e 0d 0a 20 20 20  parameter)...   
37360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37370 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
37380 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
37390 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
373a0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
373b0 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  diumLow,..      
373c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373d0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
373e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
373f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
37400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37410 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 20          "System 
37420 64 69 72 65 63 74 6f 72 79 20 69 73 20 7b 30 7d  directory is {0}
37430 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  .", ForDisplay(.
37440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37450 20 20 20 20 20 20 20 20 20 47 65 74 53 79 73 74           GetSyst
37460 65 6d 44 69 72 65 63 74 6f 72 79 28 63 6f 6e 66  emDirectory(conf
37470 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 29  iguration.Wow64)
37480 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
37490 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
374a0 63 65 43 61 74 65 67 6f 72 79 29 3b 20 2f 2a 20  ceCategory); /* 
374b0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
374c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
374d0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
374e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
37530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37540 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20     #region .NET 
37550 46 72 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73 75  Framework / Visu
37560 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 0d 0a  al Studio Data..
37570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37580 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
37590 61 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  age = null;..   
375a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375b0 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
375c0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e  rameworkList = n
375d0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
375e0 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74            VsList
375f0 20 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d   vsList = null;.
37600 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37610 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
37620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37650 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
37660 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61            Initia
37670 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28 64 65  lizeVsPackage(de
37680 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
37690 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
376a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
376b0 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
376c0 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
376d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376e0 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 47    InstallFlags.G
376f0 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
37700 68 65 2c 20 74 72 75 65 29 20 26 26 0d 0a 20 20  he, true) &&..  
37710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37720 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
37730 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20  ion.HasFlags(.. 
37740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37750 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
37760 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67  llFlags.VsPackag
37770 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
37780 61 63 68 65 2c 20 74 72 75 65 29 2c 0d 0a 20 20  ache, true),..  
37790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377a0 20 20 20 20 20 20 72 65 66 20 70 61 63 6b 61 67        ref packag
377b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
377c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
377d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
377e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
377f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37800 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
37810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
37820 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72  itializeFramewor
37830 6b 4c 69 73 74 28 63 6f 6e 66 69 67 75 72 61 74  kList(configurat
37840 69 6f 6e 2e 50 65 72 55 73 65 72 20 3f 0d 0a 20  ion.PerUser ?.. 
37850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37860 20 20 20 20 20 20 20 72 65 67 69 73 74 72 79 2e         registry.
37870 43 75 72 72 65 6e 74 55 73 65 72 20 3a 20 72 65  CurrentUser : re
37880 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
37890 69 6e 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ine,..          
378a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
378b0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66  nfiguration, ref
378c0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 29 3b   frameworkList);
378d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
378e0 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69          Initiali
378f0 7a 65 56 73 4c 69 73 74 28 63 6f 6e 66 69 67 75  zeVsList(configu
37900 72 61 74 69 6f 6e 2e 50 65 72 55 73 65 72 20 3f  ration.PerUser ?
37910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37920 20 20 20 20 20 20 20 20 20 20 72 65 67 69 73 74            regist
37930 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 20 3a  ry.CurrentUser :
37940 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   registry.LocalM
37950 61 63 68 69 6e 65 2c 0d 0a 20 20 20 20 20 20 20  achine,..       
37960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37970 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
37980 72 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20 20  ref vsList);..  
37990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379a0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
379b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
379d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
379e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
379f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
37a00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37a10 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53         #region S
37a20 68 61 72 65 64 20 43 6c 69 65 6e 74 20 44 61 74  hared Client Dat
37a30 61 20 43 72 65 61 74 69 6f 6e 0d 0a 20 20 20 20  a Creation..    
37a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a50 6f 62 6a 65 63 74 20 64 69 72 65 63 74 6f 72 79  object directory
37a60 44 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61  Data = new AnyPa
37a70 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
37a80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37a90 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
37aa0 67 75 72 61 74 69 6f 6e 2e 44 69 72 65 63 74 6f  guration.Directo
37ab0 72 79 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ry, configuratio
37ac0 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20  n.Install);.... 
37ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ae0 20 20 20 6f 62 6a 65 63 74 20 66 69 6c 65 4e 61     object fileNa
37af0 6d 65 44 61 74 61 20 3d 20 6e 65 77 20 41 6e 79  meData = new Any
37b00 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
37b10 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l>(..           
37b20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
37b30 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67  figuration.Desig
37b40 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e  nerFileName, con
37b50 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61  figuration.Insta
37b60 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ll);..          
37b70 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
37b80 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
37b90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
37ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37bd0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
37be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
37bf0 72 65 67 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20  region .NET GAC 
37c00 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a  Install/Remove..
37c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
37c30 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d  ation.HasFlags(.
37c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37c50 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
37c60 74 61 6c 6c 46 6c 61 67 73 2e 47 6c 6f 62 61 6c  tallFlags.Global
37c70 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 74  AssemblyCache, t
37c80 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
37c90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cb0 20 20 20 20 20 20 50 75 62 6c 69 73 68 20 70 75        Publish pu
37cc0 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  blish = null;...
37cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37ce0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
37cf0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
37d00 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
37d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d20 20 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20 50   publish = new P
37d30 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 20  ublish();....   
37d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d50 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
37d60 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d  ration.Install).
37d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37d80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37da0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
37db0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
37dc0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
37dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37de0 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d      /* throw */.
37df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e10 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74   publish.GacInst
37e20 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  all(configuratio
37e30 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  n.CoreFileName);
37e40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
37e70 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
37e80 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
37e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
37eb0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
37ec0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
37ed0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
37ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61               "Ga
37f00 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62  cInstall: assemb
37f10 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
37f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f40 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
37f50 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
37f60 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
37f70 20 20 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 74 72 61 63 65 43            traceC
37f90 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
37fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fb0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
37fc0 66 69 67 75 72 61 74 69 6f 6e 2e 49 73 4c 69 6e  figuration.IsLin
37fd0 71 53 75 70 70 6f 72 74 65 64 28 29 29 0d 0a 20  qSupported()).. 
37fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ff0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
38000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
38020 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
38030 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
38040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
38060 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
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 70                 p
38090 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c  ublish.GacInstal
380a0 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  l(configuration.
380b0 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  LinqFileName);..
380c0 0d 0a 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 20 20                  
380e0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
380f0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
38100 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
38110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38130 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
38140 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
38150 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
38160 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
38170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38180 20 20 20 20 20 20 20 22 47 61 63 49 6e 73 74 61         "GacInsta
38190 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68  ll: assemblyPath
381a0 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20   = {0}",..      
381b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
381d0 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75  rDisplay(configu
381e0 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e  ration.LinqFileN
381f0 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
38200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38210 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
38220 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
38230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38240 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
38250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38260 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
38270 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46  nfiguration.HasF
38280 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  lags(..         
38290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382a0 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
382b0 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67  llFlags.VsPackag
382c0 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
382d0 61 63 68 65 2c 20 74 72 75 65 29 29 0d 0a 20 20  ache, true))..  
382e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
38300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38310 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
38320 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
38330 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  WhatIf)..       
38340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38350 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
38360 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
38370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75                pu
38390 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c  blish.GacInstall
383a0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44  (configuration.D
383b0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
383c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
383d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383e0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
383f0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
38400 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
38410 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
38420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38430 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
38440 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
38450 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
38460 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
38470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38480 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49 6e            "GacIn
38490 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50  stall: assemblyP
384a0 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20  ath = {0}",..   
384b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384d0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
384e0 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e  iguration.Design
384f0 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  erFileName)),.. 
38500 20 20 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 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
38530 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
38540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38550 7d 0d 0a 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 7d 0d 0a 20 20             }..  
38570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38580 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
38590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
385b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385c0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
385d0 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a  tion.HasFlags(..
385e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38600 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
38610 2e 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c  .VsPackageGlobal
38620 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 74  AssemblyCache, t
38630 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
38640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38650 20 20 20 7b 0d 0a 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 20 20                  
38670 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
38680 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29  guration.WhatIf)
38690 0d 0a 20 20 20 20 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 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a        /* throw *
386c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
386d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386e0 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47         publish.G
386f0 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75  acRemove(configu
38700 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46  ration.DesignerF
38710 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
38720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38730 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
38740 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
38750 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
38760 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
38770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38790 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
387a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
387b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
387c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387e0 20 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73    "GacRemove: as
387f0 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d  semblyPath = {0}
38800 22 2c 0d 0a 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 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c