System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 9cf2acc8e48ec85ad9cc92c18326191074955ede:


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 0d 0a 20 20 20 20   || NET_45..    
1360: 5b 53 65 63 75 72 69 74 79 43 72 69 74 69 63 61  [SecurityCritica
1370: 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  l()]..#else..   
1380: 20 5b 53 65 63 75 72 69 74 79 50 65 72 6d 69 73   [SecurityPermis
1390: 73 69 6f 6e 28 53 65 63 75 72 69 74 79 41 63 74  sion(SecurityAct
13a0: 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64 2c 20  ion.LinkDemand, 
13b0: 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20 3d 20  UnmanagedCode = 
13c0: 74 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a  true)]..#endif..
13d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
13e0: 74 69 63 20 63 6c 61 73 73 20 49 6e 73 74 61 6c  tic class Instal
13f0: 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ler..    {..    
1400: 20 20 20 20 23 72 65 67 69 6f 6e 20 55 6e 73 61      #region Unsa
1410: 66 65 20 4e 61 74 69 76 65 20 4d 65 74 68 6f 64  fe Native Method
1420: 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  s Class..       
1430: 20 5b 53 75 70 70 72 65 73 73 55 6e 6d 61 6e 61   [SuppressUnmana
1440: 67 65 64 43 6f 64 65 53 65 63 75 72 69 74 79 28  gedCodeSecurity(
1450: 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
1460: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
1470: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1480: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  hods..        {.
1490: 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20  .#if WINDOWS..  
14a0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
14b0: 6e 20 4e 61 74 69 76 65 20 57 69 6e 33 32 20 43  n Native Win32 C
14c0: 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20  onstants..      
14d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
14e0: 6e 73 74 20 69 6e 74 20 4d 41 58 5f 50 41 54 48  nst int MAX_PATH
14f0: 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20 20 20   = 260;....     
1500: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1550: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1560: 65 20 63 6f 6e 73 74 20 69 6e 74 20 43 53 49 44  e const int CSID
1570: 4c 5f 53 59 53 54 45 4d 58 38 36 20 3d 20 30 78  L_SYSTEMX86 = 0x
1580: 30 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  0029;....       
1590: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
15e0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
15f0: 63 6f 6e 73 74 20 69 6e 74 20 53 48 47 46 50 5f  const int SHGFP_
1600: 54 59 50 45 5f 43 55 52 52 45 4e 54 20 3d 20 30  TYPE_CURRENT = 0
1610: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1620: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1670: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1680: 74 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30 3b 20  t int S_OK = 0; 
1690: 2f 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d 0a 20  /* HRESULT */.. 
16a0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
16b0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
16c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
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 0d 0a 0d 0a 20 20 20 20  ////////....    
1710: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1720: 4e 61 74 69 76 65 20 57 69 6e 64 6f 77 73 20 4d  Native Windows M
1730: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
1740: 20 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 28 22      [DllImport("
1750: 73 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c 0d 0a  shfolder.dll",..
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1770: 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f  CallingConventio
1780: 6e 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65  n = CallingConve
1790: 6e 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d 0a 20  ntion.Winapi,.. 
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
17b0: 68 61 72 53 65 74 20 3d 20 43 68 61 72 53 65 74  harSet = CharSet
17c0: 2e 41 75 74 6f 2c 20 42 65 73 74 46 69 74 4d 61  .Auto, BestFitMa
17d0: 70 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c 0d 0a  pping = false,..
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 54 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61 62 6c  ThrowOnUnmappabl
1800: 65 43 68 61 72 20 3d 20 74 72 75 65 2c 20 53 65  eChar = true, Se
1810: 74 4c 61 73 74 45 72 72 6f 72 20 3d 20 74 72 75  tLastError = tru
1820: 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e)]..           
1830: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1840: 65 78 74 65 72 6e 20 69 6e 74 20 53 48 47 65 74  extern int SHGet
1850: 46 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20 20 20  FolderPath(..   
1860: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
1870: 50 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c 20 69  Ptr hWndOwner, i
1880: 6e 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e 74 50  nt nFolder, IntP
1890: 74 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e 74 20  tr hToken, uint 
18a0: 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20  flags,..        
18b0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 62          IntPtr b
18c0: 75 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41 58 5f  uffer /* >= MAX_
18d0: 50 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20 20 20  PATH */);..     
18e0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
18f0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
1900: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1950: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
1960: 69 63 20 57 72 61 70 70 65 72 20 4d 65 74 68 6f  ic Wrapper Metho
1970: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
1980: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
1990: 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44 69  ring GetSystemDi
19a0: 72 65 63 74 6f 72 79 28 29 0d 0a 20 20 20 20 20  rectory()..     
19b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19c0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
19d0: 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72   buffer = IntPtr
19e0: 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
19f0: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a20: 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20 4d        buffer = M
1a30: 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f 54 61  arshal.AllocCoTa
1a40: 73 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20 20 20  skMem(..        
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a60: 73 69 7a 65 6f 66 28 63 68 61 72 29 20 2a 20 28  sizeof(char) * (
1a70: 4d 41 58 5f 50 41 54 48 20 2b 20 31 29 29 3b 0d  MAX_PATH + 1));.
1a80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a90: 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66 65         if (buffe
1aa0: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
1ab0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ac0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae0: 20 20 69 66 20 28 53 48 47 65 74 46 6f 6c 64 65    if (SHGetFolde
1af0: 72 50 61 74 68 28 49 6e 74 50 74 72 2e 5a 65 72  rPath(IntPtr.Zer
1b00: 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o,..            
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b20: 20 20 20 20 43 53 49 44 4c 5f 53 59 53 54 45 4d      CSIDL_SYSTEM
1b30: 58 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  X86, IntPtr.Zero
1b40: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b60: 20 20 20 53 48 47 46 50 5f 54 59 50 45 5f 43 55     SHGFP_TYPE_CU
1b70: 52 52 45 4e 54 2c 20 62 75 66 66 65 72 29 20 3d  RRENT, buffer) =
1b80: 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20 20 20  = S_OK)..       
1b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc0: 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 50  return Marshal.P
1bd0: 74 72 54 6f 53 74 72 69 6e 67 41 75 74 6f 28 62  trToStringAuto(b
1be0: 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20  uffer);..       
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1c20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
1c40: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
1c50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c70: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c90: 20 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20 74 68    // TODO: Is th
1ca0: 69 73 20 74 68 65 20 72 69 67 68 74 20 65 72 72  is the right err
1cb0: 6f 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f 6c 75  or handling solu
1cc0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..          
1cd0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1ce0: 20 20 20 74 6f 20 75 73 65 20 61 74 20 74 68 69     to use at thi
1cf0: 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20 20 20  s point?..      
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d20: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
1d30: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
1d40: 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
1d50: 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  mHigh,..        
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d70: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1d80: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1d90: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db0: 20 20 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f 74        "Could not
1dc0: 20 67 65 74 20 73 79 73 74 65 6d 20 64 69 72 65   get system dire
1dd0: 63 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65 29 2c  ctory: {0}", e),
1de0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1df0: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e00: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e20: 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20 20   throw;..       
1e30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
1e50: 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
1e60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1e80: 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74 72  buffer != IntPtr
1e90: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec0: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 46         Marshal.F
1ed0: 72 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62 75 66  reeCoTaskMem(buf
1ee0: 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  fer);..         
1ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1f00: 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e 5a  uffer = IntPtr.Z
1f10: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
1f20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f50: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1f70: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1f80: 65 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a 20  egion..#endif.. 
1f90: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1fa0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1fb0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1fc0: 2f 2f 2f 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 0d  ///////////////.
2000: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2010: 6f 6e 20 50 72 69 76 61 74 65 20 48 65 6c 70 65  on Private Helpe
2020: 72 20 43 6c 61 73 73 65 73 0d 0a 20 20 20 20 20  r Classes..     
2030: 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79 50 61     #region AnyPa
2040: 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ir Class..      
2050: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
2060: 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72 3c 54   class AnyPair<T
2070: 31 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20 20 20  1, T2>..        
2080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
2090: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
20a0: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
20b0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
20c0: 20 20 20 20 20 20 20 20 2f 2f 20 57 41 52 4e 49          // WARNI
20d0: 4e 47 3a 20 54 68 69 73 20 63 6f 6e 73 74 72 75  NG: This constru
20e0: 63 74 6f 72 20 70 72 6f 64 75 63 65 73 20 61 6e  ctor produces an
20f0: 20 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d 70 74   immutable "empt
2100: 79 22 20 70 61 69 72 0d 0a 20 20 20 20 20 20 20  y" pair..       
2110: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
2120: 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20 20   object...      
2130: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2140: 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79        public Any
2150: 50 61 69 72 28 29 0d 0a 20 20 20 20 20 20 20 20  Pair()..        
2160: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29          : base()
2170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2190: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
21a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2210: 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28   public AnyPair(
2220: 54 31 20 78 29 0d 0a 20 20 20 20 20 20 20 20 20  T1 x)..         
2230: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d         : this().
2240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2260: 74 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20 20 20  this.x = x;..   
2270: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2280: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
22e0: 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20 78  lic AnyPair(T1 x
22f0: 2c 20 54 32 20 79 29 0d 0a 20 20 20 20 20 20 20  , T2 y)..       
2300: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
2310: 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x)..            
2320: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2330: 20 20 20 74 68 69 73 2e 79 20 3d 20 79 3b 0d 0a     this.y = y;..
2340: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2350: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2360: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2370: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
23c0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
23d0: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
23e0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
23f0: 72 69 76 61 74 65 20 54 31 20 78 3b 0d 0a 20 20  rivate T1 x;..  
2400: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2410: 20 54 31 20 58 0d 0a 20 20 20 20 20 20 20 20 20   T1 X..         
2420: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2430: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
2440: 72 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rn x; }..       
2450: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2460: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
24b0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
24c0: 20 54 32 20 79 3b 0d 0a 20 20 20 20 20 20 20 20   T2 y;..        
24d0: 20 20 20 20 70 75 62 6c 69 63 20 54 32 20 59 0d      public T2 Y.
24e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2500: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 79 3b 20  get { return y; 
2510: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
2530: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
2540: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2550: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2560: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
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 0d 0a 0d 0a 20 20  //////////....  
25b0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72        #region Tr
25c0: 61 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a 20 20  aceOps Class..  
25d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
25e0: 61 74 69 63 20 63 6c 61 73 73 20 54 72 61 63 65  atic class Trace
25f0: 4f 70 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  Ops..        {..
2600: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2610: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
2620: 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20  tants..         
2630: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
2640: 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 44   string DefaultD
2650: 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 22 23 7b  ebugFormat = "#{
2660: 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d  0} @ {1}: {2}";.
2670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
2680: 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
2690: 67 20 44 65 66 61 75 6c 74 54 72 61 63 65 46 6f  g DefaultTraceFo
26a0: 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20 40 20 7b  rmat = "#{0} @ {
26b0: 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20  1}: {2}";....   
26c0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
26d0: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 73   const string Is
26e0: 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75 74  o8601DateTimeOut
26f0: 70 75 74 46 6f 72 6d 61 74 20 3d 0d 0a 20 20 20  putFormat =..   
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 79 79               "yy
2710: 79 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d 6d 3a 73  yy.MM.ddTHH:mm:s
2720: 73 2e 66 66 66 66 66 66 66 22 3b 0d 0a 20 20 20  s.fffffff";..   
2730: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2740: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
2750: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
27a0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
27b0: 69 76 61 74 65 20 53 74 61 74 69 63 20 44 61 74  ivate Static Dat
27c0: 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  a..            p
27d0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62  rivate static ob
27e0: 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20  ject syncRoot = 
27f0: 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 20  new object();.. 
2800: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2810: 74 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e  te static long n
2820: 65 78 74 44 65 62 75 67 49 64 3b 0d 0a 20 20 20  extDebugId;..   
2830: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2840: 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78   static long nex
2850: 74 54 72 61 63 65 49 64 3b 0d 0a 20 20 20 20 20  tTraceId;..     
2860: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2870: 74 61 74 69 63 20 49 4c 69 73 74 3c 54 72 61 63  tatic IList<Trac
2880: 65 4c 69 73 74 65 6e 65 72 3e 20 64 65 62 75 67  eListener> debug
2890: 4c 69 73 74 65 6e 65 72 73 3b 0d 0a 20 20 20 20  Listeners;..    
28a0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28b0: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
28c0: 72 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69  rity debugPriori
28d0: 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69  ty = TracePriori
28e0: 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20  ty.Default;..   
28f0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2900: 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69   static TracePri
2910: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
2920: 69 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72  ity = TracePrior
2930: 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20  ity.Default;..  
2940: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2950: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
2960: 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 44 65  debugFormat = De
2970: 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74  faultDebugFormat
2980: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2990: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
29a0: 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74  ring traceFormat
29b0: 20 3d 20 44 65 66 61 75 6c 74 54 72 61 63 65 46   = DefaultTraceF
29c0: 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
29d0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
29e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2a40: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
2a50: 53 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 65  Static Propertie
2a60: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
2a70: 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61  ublic static Tra
2a80: 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67  cePriority Debug
2a90: 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
2aa0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ab0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c           get { l
2ac0: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
2ad0: 20 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69   return debugPri
2ae0: 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20  ority; } }..    
2af0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2b00: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
2b10: 29 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74  ) { debugPriorit
2b20: 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  y = value; } }..
2b30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b50: 2f 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ba0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72  public static Tr
2bb0: 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63  acePriority Trac
2bc0: 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  ePriority..     
2bd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2be0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
2bf0: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
2c00: 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72  { return tracePr
2c10: 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20  iority; } }..   
2c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2c30: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
2c40: 74 29 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69  t) { tracePriori
2c50: 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d  ty = value; } }.
2c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2c70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2cd0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
2ce0: 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61  tring DebugForma
2cf0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
2d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d10: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
2d20: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
2d30: 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 20   debugFormat; } 
2d40: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2d50: 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73     set { lock (s
2d60: 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75 67  yncRoot) { debug
2d70: 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20  Format = value; 
2d80: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
2d90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2da0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2df0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
2e00: 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46  ic string TraceF
2e10: 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20  ormat..         
2e20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e30: 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b        get { lock
2e40: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65   (syncRoot) { re
2e50: 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74  turn traceFormat
2e60: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
2e70: 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63         set { loc
2e80: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74  k (syncRoot) { t
2e90: 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c  raceFormat = val
2ea0: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
2eb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ec0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2f30: 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 61 63   #region Interac
2f40: 74 69 76 65 20 53 75 70 70 6f 72 74 20 4d 65 74  tive Support Met
2f50: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
2f60: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
2f70: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
2f80: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
2f90: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2fa0: 20 73 74 61 74 69 63 20 44 69 61 6c 6f 67 52 65   static DialogRe
2fb0: 73 75 6c 74 20 53 68 6f 77 4d 65 73 73 61 67 65  sult ShowMessage
2fc0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2fd0: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
2fe0: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d   tracePriority,.
2ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3000: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64   TraceCallback d
3010: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
3030: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
3040: 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
3050: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
3060: 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d  embly assembly,.
3070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3080: 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
3090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30a0: 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
30b0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
30c0: 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 42 75      MessageBoxBu
30d0: 74 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c 0d 0a  ttons buttons,..
30e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f0: 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 20 69  MessageBoxIcon i
3100: 63 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  con..           
3110: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
3120: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3130: 20 20 20 20 20 20 20 44 69 61 6c 6f 67 52 65 73         DialogRes
3140: 75 6c 74 20 72 65 73 75 6c 74 20 3d 20 44 69 61  ult result = Dia
3150: 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d  logResult.OK;...
3160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3170: 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74   DebugAndTrace(t
3180: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a0: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
31b0: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
31c0: 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f   message, catego
31d0: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
31e0: 20 20 20 20 20 20 20 20 69 66 20 28 53 79 73 74          if (Syst
31f0: 65 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e 55 73  emInformation.Us
3200: 65 72 49 6e 74 65 72 61 63 74 69 76 65 29 0d 0a  erInteractive)..
3210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3220: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3230: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 69         string ti
3240: 74 6c 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c  tle = GetAssembl
3250: 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29  yTitle(assembly)
3260: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3270: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 69 74           if (tit
3280: 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
3290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a0: 20 20 20 20 20 74 69 74 6c 65 20 3d 20 41 70 70       title = App
32b0: 6c 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75 63 74  lication.Product
32c0: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
32d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
32e0: 75 6c 74 20 3d 20 4d 65 73 73 61 67 65 42 6f 78  ult = MessageBox
32f0: 2e 53 68 6f 77 28 6d 65 73 73 61 67 65 2c 20 74  .Show(message, t
3300: 69 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c 20 69  itle, buttons, i
3310: 63 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  con);....       
3320: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62               Deb
3330: 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65  ugAndTrace(trace
3340: 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20  Priority,..     
3350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3360: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
3370: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
3380: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
3390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33a0: 20 20 20 20 20 20 20 20 20 22 55 73 65 72 20 63           "User c
33b0: 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20  hoice of {0}.", 
33c0: 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c  ForDisplay(resul
33d0: 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
33f0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
3400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3410: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
3420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3430: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3440: 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72 61       DebugAndTra
3450: 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 79  ce(tracePriority
3460: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3470: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
3480: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
3490: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
34a0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
34b0: 20 20 20 20 20 20 20 20 20 22 44 65 66 61 75 6c           "Defaul
34c0: 74 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e  t choice of {0}.
34d0: 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65  ", ForDisplay(re
34e0: 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  sult)),..       
34f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
3500: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
3510: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3520: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
3530: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3540: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
3550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
35b0: 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 69     #region Traci
35c0: 6e 67 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f  ng Support Metho
35d0: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
35e0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
35f0: 69 64 20 53 65 74 75 70 44 65 62 75 67 4c 69 73  id SetupDebugLis
3600: 74 65 6e 65 72 73 28 29 0d 0a 20 20 20 20 20 20  teners()..      
3610: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3620: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 65 62           if (deb
3630: 75 67 4c 69 73 74 65 6e 65 72 73 20 3d 3d 20 6e  ugListeners == n
3640: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3650: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 4c            debugL
3660: 69 73 74 65 6e 65 72 73 20 3d 20 6e 65 77 20 4c  isteners = new L
3670: 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e 65  ist<TraceListene
3680: 72 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r>();....       
3690: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 4c 69           debugLi
36a0: 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20  steners.Add(new 
36b0: 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74  ConsoleTraceList
36c0: 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  ener());..      
36d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36f0: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
3730: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
3740: 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78   static long Nex
3750: 74 44 65 62 75 67 49 64 28 29 0d 0a 20 20 20 20  tDebugId()..    
3760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3770: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3780: 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e  n Interlocked.In
3790: 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 74  crement(ref next
37a0: 44 65 62 75 67 49 64 29 3b 0d 0a 20 20 20 20 20  DebugId);..     
37b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
37c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
37d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3810: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
3820: 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65  c static long Ne
3830: 78 74 54 72 61 63 65 49 64 28 29 0d 0a 20 20 20  xtTraceId()..   
3840: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3850: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3860: 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49  rn Interlocked.I
3870: 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78  ncrement(ref nex
3880: 74 54 72 61 63 65 49 64 29 3b 0d 0a 20 20 20 20  tTraceId);..    
3890: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
38a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
3900: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
3910: 20 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54   TimeStamp(DateT
3920: 69 6d 65 20 64 61 74 65 54 69 6d 65 29 0d 0a 20  ime dateTime).. 
3930: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3950: 74 75 72 6e 20 64 61 74 65 54 69 6d 65 2e 54 6f  turn dateTime.To
3960: 53 74 72 69 6e 67 28 49 73 6f 38 36 30 31 44 61  String(Iso8601Da
3970: 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d  teTimeOutputForm
3980: 61 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  at);..          
3990: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
39a0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39c0: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
39f0: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
3a00: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
3a10: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
3a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
3a30: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
3a40: 69 6e 67 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d  ing GetMethodNam
3a50: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
3a60: 20 20 20 20 53 74 61 63 6b 54 72 61 63 65 20 73      StackTrace s
3a70: 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20  tackTrace,..    
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
3a90: 6c 65 76 65 6c 0d 0a 20 20 20 20 20 20 20 20 20  level..         
3aa0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
3ab0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3ac0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3af0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3b10: 4e 4f 54 45 3a 20 49 66 20 61 20 76 61 6c 69 64  NOTE: If a valid
3b20: 20 73 74 61 63 6b 20 74 72 61 63 65 20 77 61 73   stack trace was
3b30: 20 6e 6f 74 20 73 75 70 70 6c 69 65 64 20 62 79   not supplied by
3b40: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
3b50: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3b60: 20 20 20 63 61 6c 6c 65 72 2c 20 63 72 65 61 74     caller, creat
3b70: 65 20 6f 6e 65 20 6e 6f 77 20 62 61 73 65 64 20  e one now based 
3b80: 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a  on the current..
3b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ba0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65      //       exe
3bb0: 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20  cution stack... 
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bd0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3be0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
3bf0: 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c  tackTrace == nul
3c00: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
3c10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c30: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3c50: 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
3c60: 20 63 75 72 72 65 6e 74 20 65 78 65 63 75 74 69   current executi
3c70: 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20  on stack...     
3c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c90: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3cb0: 74 61 63 6b 54 72 61 63 65 20 3d 20 6e 65 77 20  tackTrace = new 
3cc0: 53 74 61 63 6b 54 72 61 63 65 28 29 3b 0d 0a 0d  StackTrace();...
3cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3ce0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d00: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c       // NOTE: Al
3d10: 77 61 79 73 20 73 6b 69 70 20 74 68 69 73 20 63  ways skip this c
3d20: 61 6c 6c 20 66 72 61 6d 65 20 77 68 65 6e 20 77  all frame when w
3d30: 65 20 63 61 70 74 75 72 65 0d 0a 20 20 20 20 20  e capture..     
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d50: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
3d60: 73 74 61 63 6b 20 74 72 61 63 65 2e 0d 0a 20 20  stack trace...  
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d80: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3da0: 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 20 20 20 20    level++;..    
3db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dc0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3dd0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3df0: 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68   // NOTE: Get th
3e00: 65 20 73 70 65 63 69 66 69 65 64 20 73 74 61 63  e specified stac
3e10: 6b 20 66 72 61 6d 65 20 28 61 6c 77 61 79 73 20  k frame (always 
3e20: 61 64 64 20 6f 6e 65 20 74 6f 0d 0a 20 20 20 20  add one to..    
3e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e40: 2f 2f 20 20 20 20 20 20 20 73 6b 69 70 20 74 68  //       skip th
3e50: 69 73 20 6d 65 74 68 6f 64 29 2e 0d 0a 20 20 20  is method)...   
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e70: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3e80: 20 20 20 20 20 20 20 20 20 53 74 61 63 6b 46 72           StackFr
3e90: 61 6d 65 20 73 74 61 63 6b 46 72 61 6d 65 20 3d  ame stackFrame =
3ea0: 20 73 74 61 63 6b 54 72 61 63 65 2e 47 65 74 46   stackTrace.GetF
3eb0: 72 61 6d 65 28 6c 65 76 65 6c 29 3b 0d 0a 0d 0a  rame(level);....
3ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ed0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
3ef0: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6d 65 74  OTE: Get the met
3f00: 68 6f 64 20 66 6f 72 20 74 68 65 20 73 74 61 63  hod for the stac
3f10: 6b 20 66 72 61 6d 65 2e 0d 0a 20 20 20 20 20 20  k frame...      
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3f40: 20 20 20 20 20 20 4d 65 74 68 6f 64 42 61 73 65        MethodBase
3f50: 20 6d 65 74 68 6f 64 42 61 73 65 20 3d 20 73 74   methodBase = st
3f60: 61 63 6b 46 72 61 6d 65 2e 47 65 74 4d 65 74 68  ackFrame.GetMeth
3f70: 6f 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  od();....       
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3fa0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
3fb0: 74 20 74 68 65 20 74 79 70 65 20 66 6f 72 20 74  t the type for t
3fc0: 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  he method...    
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fe0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3ff0: 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70          Type typ
4000: 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e 44  e = methodBase.D
4010: 65 63 6c 61 72 69 6e 67 54 79 70 65 3b 0d 0a 0d  eclaringType;...
4020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4030: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4040: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4050: 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6e 61  NOTE: Get the na
4060: 6d 65 20 6f 66 20 74 68 65 20 6d 65 74 68 6f 64  me of the method
4070: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4080: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
40a0: 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 6d 65 74  tring name = met
40b0: 68 6f 64 42 61 73 65 2e 4e 61 6d 65 3b 0d 0a 0d  hodBase.Name;...
40c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
40d0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
40f0: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
4100: 20 70 72 6f 70 65 72 6c 79 20 66 6f 72 6d 61 74   properly format
4110: 74 65 64 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20  ted result...   
4120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4130: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
4140: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4150: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4170: 20 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b          "{0}{1}{
4180: 32 7d 22 2c 20 74 79 70 65 2e 4e 61 6d 65 2c 20  2}", type.Name, 
4190: 54 79 70 65 2e 44 65 6c 69 6d 69 74 65 72 2c 20  Type.Delimiter, 
41a0: 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  name);..        
41b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
41c0: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
41d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
41e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
41f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
4200: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
4210: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4230: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
4240: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4250: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
4260: 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
42a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
42b0: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44  ic static void D
42c0: 65 62 75 67 43 6f 72 65 28 0d 0a 20 20 20 20 20  ebugCore(..     
42d0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
42e0: 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20  g message,..    
42f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
4300: 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20  ng category..   
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
4320: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
4340: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4370: 20 20 20 20 20 20 20 69 66 20 28 64 65 62 75 67         if (debug
4380: 4c 69 73 74 65 6e 65 72 73 20 21 3d 20 6e 75 6c  Listeners != nul
4390: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
43a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
43b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43c0: 20 20 20 66 6f 72 65 61 63 68 20 28 54 72 61 63     foreach (Trac
43d0: 65 4c 69 73 74 65 6e 65 72 20 6c 69 73 74 65 6e  eListener listen
43e0: 65 72 20 69 6e 20 64 65 62 75 67 4c 69 73 74 65  er in debugListe
43f0: 6e 65 72 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ners)..         
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
4410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
4430: 73 74 65 6e 65 72 2e 57 72 69 74 65 4c 69 6e 65  stener.WriteLine
4440: 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f  (message, catego
4450: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4470: 20 20 6c 69 73 74 65 6e 65 72 2e 46 6c 75 73 68    listener.Flush
4480: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
44c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
44d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
44e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
44f0: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
4530: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
4540: 20 73 74 61 74 69 63 20 76 6f 69 64 20 54 72 61   static void Tra
4550: 63 65 43 6f 72 65 28 0d 0a 20 20 20 20 20 20 20  ceCore(..       
4560: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4570: 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
4580: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4590: 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
45a0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
45b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63               loc
45d0: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
45f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4600: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4610: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4620: 4e 4f 54 45 3a 20 57 72 69 74 65 20 74 68 65 20  NOTE: Write the 
4630: 6d 65 73 73 61 67 65 20 74 6f 20 61 6c 6c 20 74  message to all t
4640: 68 65 20 61 63 74 69 76 65 20 74 72 61 63 65 0d  he active trace.
4650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4660: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69       //       li
4670: 73 74 65 6e 65 72 73 2e 0d 0a 20 20 20 20 20 20  steners...      
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
46a0: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
46b0: 65 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20 63  eLine(message, c
46c0: 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
46e0: 72 61 63 65 2e 46 6c 75 73 68 28 29 3b 0d 0a 20  race.Flush();.. 
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4710: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
4720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
4770: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
4780: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
4790: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
47a0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
47b0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
47c0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
47d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
47e0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
47f0: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
4800: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
4810: 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67  ceCallback debug
4820: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
4830: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
4840: 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61  Callback traceCa
4850: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
4860: 20 20 20 20 20 20 20 20 20 45 78 63 65 70 74 69           Excepti
4870: 6f 6e 20 65 78 63 65 70 74 69 6f 6e 2c 0d 0a 20  on exception,.. 
4880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4890: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
48c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
48d0: 20 20 69 66 20 28 65 78 63 65 70 74 69 6f 6e 20    if (exception 
48e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4900: 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61  turn DebugAndTra
4910: 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 79  ce(tracePriority
4920: 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
4930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4940: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
4950: 61 6c 6c 62 61 63 6b 2c 20 6e 65 77 20 53 74 61  allback, new Sta
4960: 63 6b 54 72 61 63 65 28 65 78 63 65 70 74 69 6f  ckTrace(exceptio
4970: 6e 2c 20 74 72 75 65 29 2c 20 30 2c 0d 0a 20 20  n, true), 0,..  
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4990: 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 2e        exception.
49a0: 54 6f 53 74 72 69 6e 67 28 29 2c 20 63 61 74 65  ToString(), cate
49b0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
49c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
49d0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
49e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
49f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
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 0d 0a 0d 0a 20 20 20 20  ////////....    
4a40: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
4a50: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
4a60: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
4a70: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
4a80: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
4a90: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
4aa0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4ab0: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
4ac0: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
4ad0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4ae0: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4af0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b10: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
4b20: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4b40: 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a  tring message,..
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b60: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d  string category.
4b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b80: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4b90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4ba0: 20 20 20 72 65 74 75 72 6e 20 44 65 62 75 67 41     return DebugA
4bb0: 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
4bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
4bd0: 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62  acePriority, deb
4be0: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
4bf0: 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c  eCallback, null,
4c00: 20 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   1,..           
4c10: 20 20 20 20 20 20 20 20 20 6d 65 73 73 61 67 65           message
4c20: 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  , category);..  
4c30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
4c40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
4c50: 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
4c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
4ca0: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
4cb0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
4cc0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
4cd0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
4ce0: 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75  atic string Debu
4cf0: 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4d10: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
4d20: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
4d30: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
4d40: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
4d50: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
4d60: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
4d70: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
4d80: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
4d90: 20 20 20 20 20 20 53 74 61 63 6b 54 72 61 63 65        StackTrace
4da0: 20 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20   stackTrace,..  
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
4dc0: 74 20 6c 65 76 65 6c 2c 0d 0a 20 20 20 20 20 20  t level,..      
4dd0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4de0: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
4df0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4e00: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
4e20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4e50: 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79    // NOTE: Alway
4e60: 73 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c  s skip this call
4e70: 20 66 72 61 6d 65 20 69 66 20 74 68 65 20 73 74   frame if the st
4e80: 61 63 6b 20 74 72 61 63 65 20 69 73 0d 0a 20 20  ack trace is..  
4e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4ea0: 20 20 20 20 20 20 20 67 6f 69 6e 67 20 74 6f 20         going to 
4eb0: 62 65 20 63 61 70 74 75 72 65 64 20 62 79 20 47  be captured by G
4ec0: 65 74 4d 65 74 68 6f 64 4e 61 6d 65 2e 0d 0a 20  etMethodName... 
4ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4ee0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4ef0: 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61 63     if (stackTrac
4f00: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
4f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f20: 6c 65 76 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  level++;....    
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f50: 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 6d 61 74 20  // NOTE: Format 
4f60: 74 68 65 20 6d 65 73 73 61 67 65 20 66 6f 72 20  the message for 
4f70: 64 69 73 70 6c 61 79 20 28 6f 6e 63 65 29 2e 0d  display (once)..
4f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f90: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
4fa0: 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d       string form
4fb0: 61 74 74 65 64 20 3d 20 53 74 72 69 6e 67 2e 46  atted = String.F
4fc0: 6f 72 6d 61 74 28 22 7b 30 7d 3a 20 7b 31 7d 22  ormat("{0}: {1}"
4fd0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4fe0: 20 20 20 20 20 20 20 47 65 74 4d 65 74 68 6f 64         GetMethod
4ff0: 4e 61 6d 65 28 73 74 61 63 6b 54 72 61 63 65 2c  Name(stackTrace,
5000: 20 6c 65 76 65 6c 29 2c 20 6d 65 73 73 61 67 65   level), message
5010: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5020: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5030: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
5040: 45 3a 20 49 66 20 74 68 65 20 64 65 62 75 67 20  E: If the debug 
5050: 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61  callback is inva
5060: 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61 63 65  lid or the trace
5070: 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20   priority..     
5080: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5090: 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73      of this mess
50a0: 61 67 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e  age is less than
50b0: 20 77 68 61 74 20 77 65 20 63 75 72 72 65 6e 74   what we current
50c0: 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20  ly want to..    
50d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
50e0: 20 20 20 20 20 64 65 62 75 67 2c 20 73 6b 69 70       debug, skip
50f0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20   it...          
5100: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5110: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 64            if ((d
5120: 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 21 3d 20  ebugCallback != 
5130: 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20  null) &&..      
5140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74                (t
5150: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20  racePriority >= 
5160: 44 65 62 75 67 50 72 69 6f 72 69 74 79 29 29 0d  DebugPriority)).
5170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5180: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5190: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51b0: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20  // NOTE: Invoke 
51c0: 74 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61  the debug callba
51d0: 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d  ck with the form
51e0: 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  atted..         
51f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5200: 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20      message and 
5210: 74 68 65 20 63 61 74 65 67 6f 72 79 20 73 70 65  the category spe
5220: 63 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20  cified by the.. 
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5240: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
5250: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er...           
5260: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
5270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5280: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 28 66   debugCallback(f
5290: 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f  ormatted, catego
52a0: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
52b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
52c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
52e0: 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74  / NOTE: If the t
52f0: 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 69 73  race callback is
5300: 20 69 6e 76 61 6c 69 64 20 6f 72 20 74 68 65 20   invalid or the 
5310: 74 72 61 63 65 20 70 72 69 6f 72 69 74 79 0d 0a  trace priority..
5320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5330: 2f 2f 20 20 20 20 20 20 20 6f 66 20 74 68 69 73  //       of this
5340: 20 6d 65 73 73 61 67 65 20 69 73 20 6c 65 73 73   message is less
5350: 20 74 68 61 6e 20 77 68 61 74 20 77 65 20 63 75   than what we cu
5360: 72 72 65 6e 74 6c 79 20 77 61 6e 74 20 74 6f 0d  rrently want to.
5370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5380: 20 2f 2f 20 20 20 20 20 20 20 74 72 61 63 65 2c   //       trace,
5390: 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20 20 20   skip it...     
53a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
53b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
53c0: 66 20 28 28 74 72 61 63 65 43 61 6c 6c 62 61 63  f ((traceCallbac
53d0: 6b 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20  k != null) &&.. 
53e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53f0: 20 20 20 28 74 72 61 63 65 50 72 69 6f 72 69 74     (tracePriorit
5400: 79 20 3e 3d 20 54 72 61 63 65 50 72 69 6f 72 69  y >= TracePriori
5410: 74 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ty))..          
5420: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5430: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
5440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5450: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e       // NOTE: In
5460: 76 6f 6b 65 20 74 68 65 20 74 72 61 63 65 20 63  voke the trace c
5470: 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65  allback with the
5480: 20 66 6f 72 6d 61 74 74 65 64 0d 0a 20 20 20 20   formatted..    
5490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54a0: 2f 2f 20 20 20 20 20 20 20 6d 65 73 73 61 67 65  //       message
54b0: 20 61 6e 64 20 74 68 65 20 63 61 74 65 67 6f 72   and the categor
54c0: 79 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  y specified by t
54d0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
54e0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
54f0: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...      
5500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5520: 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
5530: 61 63 6b 28 66 6f 72 6d 61 74 74 65 64 2c 20 63  ack(formatted, c
5540: 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
5550: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5570: 72 65 74 75 72 6e 20 6d 65 73 73 61 67 65 3b 0d  return message;.
5580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5590: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
55a0: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
55b0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
55c0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
55d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
5620: 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f 63 6b      #region Mock
5630: 52 65 67 69 73 74 72 79 20 43 6c 61 73 73 0d 0a  Registry Class..
5640: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
5650: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63  sealed class Moc
5660: 6b 52 65 67 69 73 74 72 79 20 3a 20 49 44 69 73  kRegistry : IDis
5670: 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  posable..       
5680: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5690: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
56a0: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
56b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
56c0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 29 0d 0a  MockRegistry()..
56d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
56e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
56f0: 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20  hatIf = true;.. 
5700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5710: 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d  eadOnly = true;.
5720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5730: 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20   safe = true;.. 
5740: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5760: 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
57a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
57b0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
57c0: 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
57d0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
57e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
57f0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
5800: 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20       : this().. 
5810: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
5830: 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74  is.whatIf = what
5840: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
5850: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5860: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
58b0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
58c0: 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
58d0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
58e0: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
58f0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65           bool re
5900: 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  adOnly..        
5910: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
5920: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
5930: 73 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  s(whatIf)..     
5940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5950: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72            this.r
5960: 65 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e  eadOnly = readOn
5970: 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
5980: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5990: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
59e0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
59f0: 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
5a00: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
5a10: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
5a20: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65           bool re
5a30: 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20  adOnly,..       
5a40: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61           bool sa
5a50: 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  fe..            
5a60: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
5a70: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 77 68         : this(wh
5a80: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d  atIf, readOnly).
5a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ab0: 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 65  this.safe = safe
5ac0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
5ae0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
5af0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
5b00: 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
5b40: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
5b50: 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
5b60: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
5b70: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
5b80: 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
5b90: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
5ba0: 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  WhatIf..        
5bb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5bc0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
5bd0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
5be0: 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a  turn whatIf; }..
5bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c00: 73 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  set { CheckDispo
5c10: 73 65 64 28 29 3b 20 77 68 61 74 49 66 20 3d 20  sed(); whatIf = 
5c20: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
5c30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5c40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5c50: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
5c90: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
5ca0: 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b  e bool readOnly;
5cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5cc0: 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e  blic bool ReadOn
5cd0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
5ce0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5cf0: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
5d00: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
5d10: 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20   readOnly; }..  
5d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
5d30: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
5d40: 64 28 29 3b 20 72 65 61 64 4f 6e 6c 79 20 3d 20  d(); readOnly = 
5d50: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
5d60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5d70: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5d80: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
5dc0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
5dd0: 65 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20  e bool safe;..  
5de0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
5df0: 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20   bool Safe..    
5e00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5e10: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
5e20: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5e30: 3b 20 72 65 74 75 72 6e 20 73 61 66 65 3b 20 7d  ; return safe; }
5e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5e50: 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69 73    set { CheckDis
5e60: 70 6f 73 65 64 28 29 3b 20 73 61 66 65 20 3d 20  posed(); safe = 
5e70: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
5e80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5e90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5ea0: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
5ee0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
5ef0: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
5f00: 79 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a  y classesRoot;..
5f10: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5f20: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
5f30: 65 79 20 43 6c 61 73 73 65 73 52 6f 6f 74 0d 0a  ey ClassesRoot..
5f40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
5f60: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
5f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5f80: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5f90: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
5fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fb0: 20 20 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f     if (classesRo
5fc0: 6f 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ot == null)..   
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fe0: 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74       classesRoot
5ff0: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6000: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6020: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 6c       Registry.Cl
6030: 61 73 73 65 73 52 6f 6f 74 2c 20 77 68 61 74 49  assesRoot, whatI
6040: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
6050: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
6060: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6070: 6e 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a  n classesRoot;..
6080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6090: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
60a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
60b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6100: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
6110: 65 67 69 73 74 72 79 4b 65 79 20 63 75 72 72 65  egistryKey curre
6120: 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20  ntConfig;..     
6130: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
6140: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 75  ckRegistryKey Cu
6150: 72 72 65 6e 74 43 6f 6e 66 69 67 0d 0a 20 20 20  rrentConfig..   
6160: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6170: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
6180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6190: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
61a0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
61b0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
61c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61d0: 69 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69  if (currentConfi
61e0: 67 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  g == null)..    
61f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6200: 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69      currentConfi
6210: 67 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  g = new MockRegi
6220: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
6230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6240: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 43        Registry.C
6250: 75 72 72 65 6e 74 43 6f 6e 66 69 67 2c 20 77 68  urrentConfig, wh
6260: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
6270: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
6280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6290: 74 75 72 6e 20 63 75 72 72 65 6e 74 43 6f 6e 66  turn currentConf
62a0: 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ig;..           
62b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
62c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
62d0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
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 0d 0a 0d 0a 20 20 20 20  ////////....    
6320: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
6330: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
6340: 63 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20  currentUser;..  
6350: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
6360: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6370: 20 43 75 72 72 65 6e 74 55 73 65 72 0d 0a 20 20   CurrentUser..  
6380: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6390: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
63a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
63b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
63c0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
63d0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
63e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63f0: 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72   if (currentUser
6400: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
6410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6420: 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d     currentUser =
6430: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
6440: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
6450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6460: 20 20 20 52 65 67 69 73 74 72 79 2e 43 75 72 72     Registry.Curr
6470: 65 6e 74 55 73 65 72 2c 20 77 68 61 74 49 66 2c  entUser, whatIf,
6480: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
6490: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
64a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
64b0: 63 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20  currentUser;..  
64c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
64d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
64e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
64f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6540: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
6550: 69 73 74 72 79 4b 65 79 20 64 79 6e 44 61 74 61  istryKey dynData
6560: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
6570: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
6580: 72 79 4b 65 79 20 44 79 6e 44 61 74 61 0d 0a 20  ryKey DynData.. 
6590: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
65a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
65b0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
65c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
65d0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
65e0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6600: 20 20 69 66 20 28 64 79 6e 44 61 74 61 20 3d 3d    if (dynData ==
6610: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6630: 64 79 6e 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f  dynData = new Mo
6640: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6660: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6670: 73 74 72 79 2e 44 79 6e 44 61 74 61 2c 20 77 68  stry.DynData, wh
6680: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
6690: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
66b0: 74 75 72 6e 20 64 79 6e 44 61 74 61 3b 0d 0a 20  turn dynData;.. 
66c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
66d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
66e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
66f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6740: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
6750: 67 69 73 74 72 79 4b 65 79 20 6c 6f 63 61 6c 4d  gistryKey localM
6760: 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20  achine;..       
6770: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
6780: 52 65 67 69 73 74 72 79 4b 65 79 20 4c 6f 63 61  RegistryKey Loca
6790: 6c 4d 61 63 68 69 6e 65 0d 0a 20 20 20 20 20 20  lMachine..      
67a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
67b0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
67c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
67d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
67e0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
67f0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6800: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6810: 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 3d  (localMachine ==
6820: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
6830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6840: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20 6e  localMachine = n
6850: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
6860: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6880: 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   Registry.LocalM
6890: 61 63 68 69 6e 65 2c 20 77 68 61 74 49 66 2c 20  achine, whatIf, 
68a0: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
68b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
68c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c          return l
68d0: 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20  ocalMachine;..  
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
68f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6960: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
6970: 69 73 74 72 79 4b 65 79 20 70 65 72 66 6f 72 6d  istryKey perform
6980: 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20  anceData;..     
6990: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
69a0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 50 65  ckRegistryKey Pe
69b0: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 0d 0a 20  rformanceData.. 
69c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
69d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
69e0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
69f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6a00: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
6a10: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a30: 20 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63    if (performanc
6a40: 65 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  eData == null)..
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a60: 20 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61          performa
6a70: 6e 63 65 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f  nceData = new Mo
6a80: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6ab0: 73 74 72 79 2e 50 65 72 66 6f 72 6d 61 6e 63 65  stry.Performance
6ac0: 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72 65  Data, whatIf, re
6ad0: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
6ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6af0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 65 72        return per
6b00: 66 6f 72 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20  formanceData;.. 
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6b30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6b90: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
6ba0: 67 69 73 74 72 79 4b 65 79 20 75 73 65 72 73 3b  gistryKey users;
6bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6bc0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6bd0: 79 4b 65 79 20 55 73 65 72 73 0d 0a 20 20 20 20  yKey Users..    
6be0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6bf0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6c20: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6c30: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
6c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6c50: 66 20 28 75 73 65 72 73 20 3d 3d 20 6e 75 6c 6c  f (users == null
6c60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6c70: 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 73             users
6c80: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6c90: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cb0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 55 73       Registry.Us
6cc0: 65 72 73 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ers, whatIf, rea
6cd0: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d  dOnly, safe);...
6ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6cf0: 20 20 20 20 20 72 65 74 75 72 6e 20 75 73 65 72       return user
6d00: 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
6d10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6d20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6d30: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6d50: 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
6d90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
6da0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 22 52  region Public "R
6db0: 65 67 69 73 74 72 79 22 20 4d 65 74 68 6f 64 73  egistry" Methods
6dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6dd0: 62 6c 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56  blic object GetV
6de0: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
6df0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
6e00: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
6e10: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
6e20: 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  alueName,..     
6e30: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
6e40: 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a  t defaultValue..
6e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
6e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e80: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
6e90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6ea0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67        return Reg
6eb0: 69 73 74 72 79 2e 47 65 74 56 61 6c 75 65 28 6b  istry.GetValue(k
6ec0: 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d  eyName, valueNam
6ed0: 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 29  e, defaultValue)
6ee0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6ef0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6f50: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
6f60: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
6f70: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
6f80: 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20   keyName,..     
6f90: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
6fa0: 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20  g valueName,..  
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
6fc0: 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20  ject value..    
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
6fe0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
7000: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
7010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7020: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
7030: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7040: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
7050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7060: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 53        Registry.S
7070: 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c  etValue(keyName,
7080: 20 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75   valueName, valu
7090: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
70a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
70b0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7100: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
7110: 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   SetValue(..    
7120: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
7130: 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  ng keyName,..   
7140: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
7150: 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a  ing valueName,..
7160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7170: 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20  object value,.. 
7180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
7190: 65 67 69 73 74 72 79 56 61 6c 75 65 4b 69 6e 64  egistryValueKind
71a0: 20 76 61 6c 75 65 4b 69 6e 64 0d 0a 20 20 20 20   valueKind..    
71b0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
71c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
71e0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7200: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
7210: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7220: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
7230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7240: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 53        Registry.S
7250: 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c  etValue(keyName,
7260: 20 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75   valueName, valu
7270: 65 2c 20 76 61 6c 75 65 4b 69 6e 64 29 3b 0d 0a  e, valueKind);..
7280: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7290: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
72a0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
72b0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
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 0d 0a 0d 0a 20 20 20 20  ////////....    
7300: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
7310: 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d  Private Methods.
7320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
7330: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 52  vate void CheckR
7340: 65 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20  eadOnly()..     
7350: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7360: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
7370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7380: 20 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61 64 2d   NOTE: In "read-
7390: 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20 64  only" mode, we d
73a0: 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74  isallow all writ
73b0: 65 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 20  e access...     
73c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
73e0: 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20  f (!readOnly).. 
73f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7400: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
7410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
7420: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
7430: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
7440: 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n();..          
7450: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
7460: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
7470: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7480: 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
74c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
74d0: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
74e0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
74f0: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
7500: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
7510: 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20  sposed;..       
7520: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
7530: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
7540: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
7550: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7570: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
7580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7590: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
75b0: 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
75c0: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d  posedException(.
75d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
75e0: 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b       typeof(Mock
75f0: 52 65 67 69 73 74 72 79 29 2e 4e 61 6d 65 29 3b  Registry).Name);
7600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7610: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
7620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
7670: 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f    private /* pro
7680: 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a  tected virtual *
7690: 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d  / void Dispose(.
76a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
76b0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d   bool disposing.
76c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
76d0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
76e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
76f0: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
7700: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7720: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
7730: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
7740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
7750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7760: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
7770: 2f 2f 2f 2f 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 0d 0a 20  /////////////.. 
7790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77a0: 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73         // dispos
77b0: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
77c0: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
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 0d 0a 0d 0a 20 20 20  /////////....   
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7820: 20 20 20 20 20 69 66 20 28 63 6c 61 73 73 65 73       if (classes
7830: 52 6f 6f 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Root != null).. 
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7850: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7870: 20 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f        classesRoo
7880: 74 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  t.Close();..    
7890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78a0: 20 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 52          classesR
78b0: 6f 6f 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  oot = null;..   
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
78e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78f0: 20 20 69 66 20 28 63 75 72 72 65 6e 74 43 6f 6e    if (currentCon
7900: 66 69 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  fig != null)..  
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7940: 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66       currentConf
7950: 69 67 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ig.Close();..   
7960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7970: 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74           current
7980: 43 6f 6e 66 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a  Config = null;..
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79c0: 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e 74       if (current
79d0: 55 73 65 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  User != null).. 
79e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a10: 20 20 20 20 20 20 63 75 72 72 65 6e 74 55 73 65        currentUse
7a20: 72 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  r.Close();..    
7a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a40: 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 55          currentU
7a50: 73 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ser = null;..   
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a90: 20 20 69 66 20 28 64 79 6e 44 61 74 61 20 21 3d    if (dynData !=
7aa0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ac0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
7ae0: 79 6e 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d  ynData.Close();.
7af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e               dyn
7b10: 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Data = null;..  
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b50: 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68     if (localMach
7b60: 69 6e 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ine != null)..  
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ba0: 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e       localMachin
7bb0: 65 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  e.Close();..    
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bd0: 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63          localMac
7be0: 68 69 6e 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  hine = null;..  
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c20: 20 20 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e     if (performan
7c30: 63 65 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d  ceData != null).
7c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7c50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c70: 20 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61          performa
7c80: 6e 63 65 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b  nceData.Close();
7c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65                pe
7cb0: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 20  rformanceData = 
7cc0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7ce0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7d00: 75 73 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  users != null)..
7d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d40: 20 20 20 20 20 20 20 75 73 65 72 73 2e 43 6c 6f         users.Clo
7d50: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d70: 20 20 20 75 73 65 72 73 20 3d 20 6e 75 6c 6c 3b     users = null;
7d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7d90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7dc0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7dd0: 2f 2f 2f 2f 2f 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: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e00: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
7e10: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
7e20: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e80: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
7e90: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
7ea0: 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   This object is 
7eb0: 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  now disposed... 
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ed0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
7ee0: 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
7ef0: 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  sed = true;..   
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7f20: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
7f30: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
7f40: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
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 0d 0a 0d 0a 20 20 20 20  ////////....    
7f90: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
7fa0: 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62  IDisposable Memb
7fb0: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
7fc0: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73   public void Dis
7fd0: 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20  pose()..        
7fe0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7ff0: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74         Dispose(t
8000: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
8010: 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65         GC.Suppre
8020: 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29  ssFinalize(this)
8030: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
8050: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
8060: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8070: 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
80b0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
80c0: 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20  on Destructor.. 
80d0: 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b             ~Mock
80e0: 52 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20 20  Registry()..    
80f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8100: 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
8110: 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  se(false);..    
8120: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8130: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
8140: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
8150: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
8160: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
8170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8180: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
81c0: 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73  region MockRegis
81d0: 74 72 79 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20  tryKey Class..  
81e0: 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73        internal s
81f0: 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b  ealed class Mock
8200: 52 65 67 69 73 74 72 79 4b 65 79 20 3a 20 49 44  RegistryKey : ID
8210: 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20  isposable..     
8220: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8230: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
8240: 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  e Constructors..
8250: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
8260: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
8270: 4b 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  Key()..         
8280: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8290: 20 20 20 20 20 20 77 68 61 74 49 66 20 3d 20 74        whatIf = t
82a0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
82b0: 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d        readOnly =
82c0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
82d0: 20 20 20 20 20 20 20 20 73 61 66 65 20 3d 20 74          safe = t
82e0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
82f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8300: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
8310: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8320: 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
8360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
8370: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
8380: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
8390: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
83a0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83c0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d  RegistryKey key.
83d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
83e0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
83f0: 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20      : this()..  
8400: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8410: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
8420: 73 2e 6b 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20  s.key = key;..  
8430: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8440: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8450: 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
8490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
84a0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
84b0: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
84c0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
84d0: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
84e0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
84f0: 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20  subKeyName..    
8500: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
8510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
8520: 20 74 68 69 73 28 6b 65 79 29 0d 0a 20 20 20 20   this(key)..    
8530: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8540: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
8550: 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62  subKeyName = sub
8560: 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  KeyName;..      
8570: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8580: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8590: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
85d0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
85e0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
85f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8600: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
8610: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8620: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
8630: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
8640: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
8650: 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20  atIf..          
8660: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
8670: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
8680: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29  key, subKeyName)
8690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
86a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
86b0: 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77   this.whatIf = w
86c0: 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
86d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
86e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
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 0d 0a 0d 0a 20 20 20 20  ////////....    
8730: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
8740: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
8750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8760: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
8770: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8780: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
8790: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
87a0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
87b0: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
87c0: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
87d0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
87e0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
87f0: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
8800: 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77  y, subKeyName, w
8810: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
8820: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8830: 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 61 64         this.read
8840: 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b  Only = readOnly;
8850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8860: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
8870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
88c0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
88d0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
88e0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
88f0: 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20  tryKey key,..   
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
8910: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
8920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8930: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
8940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
8950: 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20  ool readOnly,.. 
8960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
8970: 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 20  ool safe..      
8980: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8990: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
89a0: 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e  his(key, subKeyN
89b0: 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ame, whatIf, rea
89c0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
89d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
89e0: 20 20 20 20 20 20 20 74 68 69 73 2e 73 61 66 65         this.safe
89f0: 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20   = safe;..      
8a00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8a10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8a20: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
8a60: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8a70: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8a80: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8a90: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
8aa0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8ab0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
8ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ad0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8ae0: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
8af0: 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a   null, whatIf)..
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8b20: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
8b30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8b40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8b50: 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
8b90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
8ba0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
8bb0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
8bc0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
8bd0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
8be0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
8bf0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
8c00: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
8c10: 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  dOnly..         
8c20: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
8c30: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
8c40: 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  (key, null, what
8c50: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20  If, readOnly).. 
8c60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8c80: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
8c90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8ca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8cb0: 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
8cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
8d00: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
8d10: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
8d20: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
8d30: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
8d40: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
8d50: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
8d60: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64         bool read
8d70: 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  Only,..         
8d80: 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65         bool safe
8d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8da0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8db0: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
8dc0: 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72   null, whatIf, r
8dd0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a  eadOnly, safe)..
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8e00: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
8e10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8e20: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
8e30: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
8e40: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8e90: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
8ea0: 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
8eb0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
8ec0: 63 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a  c void Close()..
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8ef0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
8f00: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64     // NOTE: No d
8f10: 69 73 70 6f 73 65 64 20 63 68 65 63 6b 20 68 65  isposed check he
8f20: 72 65 20 62 65 63 61 75 73 65 20 63 61 6c 6c 69  re because calli
8f30: 6e 67 20 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a  ng this method..
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f50: 2f 2f 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20  //       should 
8f60: 62 65 20 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c  be just like cal
8f70: 6c 69 6e 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20  ling Dispose... 
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8f90: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
8fa0: 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29     Dispose(true)
8fb0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8fc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
9020: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
9030: 67 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65  gistryKey Create
9040: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
9050: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
9060: 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20  subKeyName..    
9070: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9080: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
90a0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90c0: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
90d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
90e0: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
90f0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9100: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9110: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
9120: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68            if (wh
9130: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
9140: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9170: 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41        // HACK: A
9180: 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74  ttempt to open t
9190: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 75 62  he specified sub
91a0: 2d 6b 65 79 2e 20 20 49 66 20 74 68 69 73 0d 0a  -key.  If this..
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91c0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 61 69      //       fai
91d0: 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70  ls, we will simp
91e0: 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 77 72  ly return the wr
91f0: 61 70 70 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a  apped root key..
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9210: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 73      //       its
9220: 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72 69  elf since no wri
9230: 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  tes are allowed 
9240: 69 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20  in 'what-if'..  
9250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9260: 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65 20    //       mode 
9270: 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20  anyhow...       
9280: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
9290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
92a0: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
92b0: 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70   subKey = key.Op
92c0: 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  enSubKey(subKeyN
92d0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
92f0: 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d 20 6e  urn (subKey != n
9300: 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ull) ?..        
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9320: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
9330: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9350: 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 77 68        subKey, wh
9360: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
9370: 73 61 66 65 29 20 3a 0d 0a 20 20 20 20 20 20 20  safe) :..       
9380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9390: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
93a0: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
93b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93c0: 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
93d0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  eyName, whatIf, 
93e0: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
93f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9400: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9410: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
9420: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9440: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63    return new Moc
9450: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
9460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9470: 20 20 20 20 20 20 20 6b 65 79 2e 43 72 65 61 74         key.Creat
9480: 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  eSubKey(subKeyNa
9490: 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 72 65 61  me), whatIf, rea
94a0: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20  dOnly, safe);.. 
94b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
94c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
94d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
94e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9530: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65    public void De
9540: 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20  leteSubKey(..   
9550: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
9560: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
9570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9580: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
9590: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
95a0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
95b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
95c0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
95d0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
95e0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
95f0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9610: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9630: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
9640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9650: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9670: 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65   key.DeleteSubKe
9680: 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68  y(subKeyName, th
9690: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a  rowOnMissing);..
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
96b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
96c0: 2f 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9710: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65  public void Dele
9720: 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9740: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
9750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9760: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
9770: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9780: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
9790: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
97a0: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
97b0: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
97c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
97d0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
9800: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
9810: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
9820: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
9830: 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65  .DeleteSubKeyTre
9840: 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  e(subKeyName);..
9850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9870: 2f 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
98c0: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65  public void Dele
98d0: 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  teValue(..      
98e0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
98f0: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
9900: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
9910: 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20  owOnMissing..   
9920: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9930: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9950: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
9960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9970: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
9980: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9990: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
99a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
99b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
99c0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
99d0: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
99e0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
99f0: 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65          key.Dele
9a00: 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68  teValue(name, th
9a10: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a  rowOnMissing);..
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9a40: 2f 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9a90: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20  public string[] 
9aa0: 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29  GetSubKeyNames()
9ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ad0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9ae0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9af0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
9b00: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
9b10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9b20: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
9b30: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9b40: 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79 4e  n key.GetSubKeyN
9b50: 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  ames();..       
9b60: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9b70: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9b80: 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
9bc0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9bd0: 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28  object GetValue(
9be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9bf0: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c10: 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61  object defaultVa
9c20: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
9c30: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9c40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9c50: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9c60: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
9c70: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
9c80: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
9c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ca0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
9cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9cc0: 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 56   return key.GetV
9cd0: 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61 75  alue(name, defau
9ce0: 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  ltValue);..     
9cf0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9d00: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9d10: 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
9d50: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9d60: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
9d70: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9d90: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
9da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9db0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
9dc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9dd0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
9de0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
9df0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4f          return O
9e00: 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79  penSubKey(subKey
9e10: 4e 61 6d 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20  Name, false);.. 
9e20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
9e40: 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
9e80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
9e90: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
9ea0: 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79  ryKey OpenSubKey
9eb0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9ec0: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
9ed0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
9ee0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69 74         bool writ
9ef0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
9f00: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9f10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9f20: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9f30: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9f50: 77 72 69 74 61 62 6c 65 29 0d 0a 20 20 20 20 20  writable)..     
9f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9f70: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
9f80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9f90: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
9fa0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9fb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9fc0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
9fd0: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
9fe0: 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 6b 65  yKey subKey = ke
9ff0: 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y.OpenSubKey(.. 
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a010: 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77     subKeyName, w
a020: 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20  hatIf ? false : 
a030: 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20  writable);....  
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
a050: 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d 20  turn (subKey != 
a060: 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
a080: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
a090: 28 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c  (subKey, whatIf,
a0a0: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
a0b0: 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   : null;..      
a0c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a0d0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a0e0: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
a120: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
a130: 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d   void SetValue(.
a140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a150: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
a160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
a170: 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20  bject value..   
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
a190: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
a1b0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
a1c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a1d0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
a1e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a1f0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
a200: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a210: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a220: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
a230: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
a240: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
a250: 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56          key.SetV
a260: 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65  alue(name, value
a270: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a280: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
a290: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
a2a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a2b0: 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
a300: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
a310: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
a320: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
a330: 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20   Name..         
a340: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a350: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
a360: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a380: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
a390: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
a3a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
a3b0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
a3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3d0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
a3e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a3f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 21          return !
a400: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
a410: 6d 70 74 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  mpty(subKeyName)
a420: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
a430: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
a440: 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c  ng.Format("{0}\\
a450: 7b 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20  {1}", key.Name, 
a460: 73 75 62 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a 20  subKeyName) :.. 
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a480: 20 20 20 20 20 20 20 6b 65 79 2e 4e 61 6d 65 3b         key.Name;
a490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a4a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
a4b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a4c0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a510: 20 20 20 20 20 70 72 69 76 61 74 65 20 52 65 67       private Reg
a520: 69 73 74 72 79 4b 65 79 20 6b 65 79 3b 0d 0a 20  istryKey key;.. 
a530: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a540: 63 20 52 65 67 69 73 74 72 79 4b 65 79 20 4b 65  c RegistryKey Ke
a550: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
a560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a570: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
a580: 70 6f 73 65 64 28 29 3b 20 43 68 65 63 6b 53 61  posed(); CheckSa
a590: 66 65 28 29 3b 20 72 65 74 75 72 6e 20 6b 65 79  fe(); return key
a5a0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
a5b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a5c0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a610: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
a620: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d  ing subKeyName;.
a630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a640: 6c 69 63 20 73 74 72 69 6e 67 20 53 75 62 4b 65  lic string SubKe
a650: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
a660: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a670: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
a680: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
a690: 75 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65 3b 20  urn subKeyName; 
a6a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
a6b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
a710: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
a720: 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20  whatIf;..       
a730: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
a740: 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20   WhatIf..       
a750: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a760: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
a770: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
a780: 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d  eturn whatIf; }.
a790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a7a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
a800: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72 65   private bool re
a810: 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20  adOnly;..       
a820: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
a830: 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20   ReadOnly..     
a840: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a850: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
a860: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a870: 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79   return readOnly
a880: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
a890: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a8a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a8f0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
a900: 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20   safe;..        
a910: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
a920: 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Safe..          
a930: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a940: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
a950: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
a960: 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20  rn safe; }..    
a970: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a980: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
a990: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
a9a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a9f0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
aa00: 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ate Methods..   
aa10: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
aa20: 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f   void CheckReadO
aa30: 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  nly()..         
aa40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
aa50: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
aa60: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
aa70: 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79  E: In "read-only
aa80: 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c  " mode, we disal
aa90: 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63  low all write ac
aaa0: 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
aab0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
aac0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
aad0: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
aaf0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
ab00: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
ab10: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
ab20: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
ab30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ab40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
ab50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
aba0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
abb0: 68 65 63 6b 53 61 66 65 28 29 0d 0a 20 20 20 20  heckSafe()..    
abc0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
abd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
abf0: 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 73 61 66 65  / NOTE: In "safe
ac00: 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c  " mode, we disal
ac10: 6c 6f 77 20 61 6c 6c 20 64 69 72 65 63 74 20 61  low all direct a
ac20: 63 63 65 73 73 20 74 6f 20 74 68 65 0d 0a 20 20  ccess to the..  
ac30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ac40: 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64         contained
ac50: 20 72 65 67 69 73 74 72 79 20 6b 65 79 2e 0d 0a   registry key...
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac70: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
ac80: 20 20 20 20 69 66 20 28 21 73 61 66 65 29 0d 0a      if (!safe)..
ac90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aca0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
acc0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
acd0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
ace0: 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on();..         
acf0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
ad00: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
ad10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ad20: 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
ad60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
ad70: 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e 4f 62  region System.Ob
ad80: 6a 65 63 74 20 4f 76 65 72 72 69 64 65 73 0d 0a  ject Overrides..
ad90: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ada0: 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  ic override stri
adb0: 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20  ng ToString().. 
adc0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
add0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
ade0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
adf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ae00: 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 4e 61    return this.Na
ae10: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
ae20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ae30: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
ae40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ae50: 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
ae90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
aea0: 67 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20 43 6f  gion Implicit Co
aeb0: 6e 76 65 72 73 69 6f 6e 20 4f 70 65 72 61 74 6f  nversion Operato
aec0: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
aed0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
aee0: 2f 2f 20 42 55 47 42 55 47 3a 20 52 65 6d 6f 76  // BUGBUG: Remov
aef0: 65 20 6d 65 3f 20 20 54 68 69 73 20 73 68 6f 75  e me?  This shou
af00: 6c 64 20 62 65 20 73 61 66 65 20 62 65 63 61 75  ld be safe becau
af10: 73 65 20 69 6e 20 27 77 68 61 74 2d 69 66 27 0d  se in 'what-if'.
af20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
af30: 20 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6c 6c          mode all
af40: 20 6b 65 79 73 20 61 72 65 20 6f 70 65 6e 65 64   keys are opened
af50: 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20   read-only...   
af60: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
af70: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
af80: 73 74 61 74 69 63 20 69 6d 70 6c 69 63 69 74 20  static implicit 
af90: 6f 70 65 72 61 74 6f 72 20 52 65 67 69 73 74 72  operator Registr
afa0: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
afb0: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
afc0: 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20  tryKey key..    
afd0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
afe0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
aff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b000: 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c  turn (key != nul
b010: 6c 29 20 3f 20 6b 65 79 2e 4b 65 79 20 3a 20 6e  l) ? key.Key : n
b020: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
b030: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b040: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
b050: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b060: 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
b0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
b0b0: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
b0c0: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
b0d0: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
b0e0: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
b0f0: 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20  sposed;..       
b100: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
b110: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
b120: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
b130: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b150: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b170: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
b180: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
b190: 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
b1a0: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d  posedException(.
b1b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b1c0: 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b       typeof(Mock
b1d0: 52 65 67 69 73 74 72 79 4b 65 79 29 2e 4e 61 6d  RegistryKey).Nam
b1e0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
b1f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
b200: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b250: 20 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20       private /* 
b260: 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
b270: 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73  l */ void Dispos
b280: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
b290: 20 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69      bool disposi
b2a0: 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
b2b0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
b2c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b2d0: 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f        if (!dispo
b2e0: 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
b2f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b300: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b310: 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20  (disposing)..   
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b330: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b340: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
b350: 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b380: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73            // dis
b390: 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73  pose managed res
b3a0: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
b3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b3d0: 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b400: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
b410: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
b420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b430: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b450: 20 6b 65 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20   key.Close();.. 
b460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b470: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d             key =
b480: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b4b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 20 20 20 20 20 20 20 20  //////..        
b500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72              // r
b510: 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64  elease unmanaged
b520: 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e   resources here.
b530: 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b540: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b550: 2f 2f 2f 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 0d 0a  //////////////..
b570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b580: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
b5a0: 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f 62 6a 65   NOTE: This obje
b5b0: 63 74 20 69 73 20 6e 6f 77 20 64 69 73 70 6f 73  ct is now dispos
b5c0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
b5d0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65   disposed = true
b600: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b610: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b620: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b630: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
b640: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b650: 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
b690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
b6a0: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
b6b0: 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  e Members..     
b6c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
b6d0: 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20  id Dispose()..  
b6e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
b700: 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20  pose(true);..   
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 47 43 2e               GC.
b720: 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65  SuppressFinalize
b730: 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20  (this);..       
b740: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b750: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
b760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b7c0: 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63   #region Destruc
b7d0: 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tor..           
b7e0: 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   ~MockRegistryKe
b7f0: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y()..           
b800: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b810: 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73      Dispose(fals
b820: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
b830: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
b840: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
b850: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
b860: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
b870: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
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 0d 0a 0d 0a  ////////////....
b8c0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
b8d0: 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 20 43  RegistryHelper C
b8e0: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
b8f0: 69 76 61 74 65 20 73 74 61 74 69 63 20 63 6c 61  ivate static cla
b900: 73 73 20 52 65 67 69 73 74 72 79 48 65 6c 70 65  ss RegistryHelpe
b910: 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  r..        {..  
b920: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b930: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
b940: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
b950: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
b960: 73 74 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65  static int subKe
b970: 79 73 43 72 65 61 74 65 64 3b 0d 0a 20 20 20 20  ysCreated;..    
b980: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
b990: 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79  tatic int SubKey
b9a0: 73 43 72 65 61 74 65 64 0d 0a 20 20 20 20 20 20  sCreated..      
b9b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b9c0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
b9d0: 65 74 75 72 6e 20 73 75 62 4b 65 79 73 43 72 65  eturn subKeysCre
b9e0: 61 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ated; }..       
b9f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ba00: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ba10: 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
ba50: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
ba60: 20 73 74 61 74 69 63 20 69 6e 74 20 73 75 62 4b   static int subK
ba70: 65 79 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20  eysDeleted;..   
ba80: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
ba90: 73 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b 65  static int SubKe
baa0: 79 73 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 20  ysDeleted..     
bab0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bac0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
bad0: 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73 44 65  return subKeysDe
bae0: 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20  leted; }..      
baf0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bb00: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
bb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb20: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
bb50: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
bb60: 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79  e static int key
bb70: 56 61 6c 75 65 73 53 65 74 3b 0d 0a 20 20 20 20  ValuesSet;..    
bb80: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
bb90: 74 61 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c  tatic int KeyVal
bba0: 75 65 73 53 65 74 0d 0a 20 20 20 20 20 20 20 20  uesSet..        
bbb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bbc0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
bbd0: 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 53 65 74  urn keyValuesSet
bbe0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
bbf0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
bc00: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc20: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
bc50: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
bc60: 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65  tic int keyValue
bc70: 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20  sDeleted;..     
bc80: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
bc90: 61 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75  atic int KeyValu
bca0: 65 73 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 20  esDeleted..     
bcb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bcc0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
bcd0: 72 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73  return keyValues
bce0: 44 65 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20  Deleted; }..    
bcf0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
bd00: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
bd10: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
bd20: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
bd70: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
bd80: 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  ic Static Method
bd90: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  s..            [
bda0: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
bdb0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
bdc0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
bdd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
bde0: 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  atic MockRegistr
bdf0: 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28  yKey OpenSubKey(
be00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
be10: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
be20: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
be30: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
be40: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be60: 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 2c 0d 0a  bool writable,..
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be80: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
bea0: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
bec0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
bee0: 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
bef0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
bf00: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
bf10: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
bf20: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
bf30: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
bf40: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
bf50: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
bf60: 28 77 72 69 74 61 62 6c 65 20 3f 0d 0a 20 20 20  (writable ?..   
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf80: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
bf90: 74 79 2e 48 69 67 68 65 73 74 20 3a 20 54 72 61  ty.Highest : Tra
bfa0: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
bfb0: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
bfd0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
bfe0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
bff0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c010: 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d    "rootKey = {0}
c020: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b  , subKeyName = {
c030: 31 7d 2c 20 77 72 69 74 61 62 6c 65 20 3d 20 7b  1}, writable = {
c040: 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  2}",..          
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
c060: 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79  rDisplay(rootKey
c070: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75  ), ForDisplay(su
c080: 62 4b 65 79 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  bKeyName),..    
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0a0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 77      ForDisplay(w
c0b0: 72 69 74 61 62 6c 65 29 29 2c 20 74 72 61 63 65  ritable)), trace
c0c0: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c0e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c0f0: 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79    // HACK: Alway
c100: 73 20 66 6f 72 62 69 64 20 77 72 69 74 61 62 6c  s forbid writabl
c110: 65 20 61 63 63 65 73 73 20 77 68 65 6e 20 6f 70  e access when op
c120: 65 72 61 74 69 6e 67 20 69 6e 0d 0a 20 20 20 20  erating in..    
c130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
c140: 20 20 20 20 20 27 77 68 61 74 2d 69 66 27 20 6d       'what-if' m
c150: 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ode...          
c160: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c170: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
c180: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
c190: 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b  rootKey.OpenSubK
c1a0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
c1b0: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 4e           subKeyN
c1c0: 61 6d 65 2c 20 77 68 61 74 49 66 20 3f 20 66 61  ame, whatIf ? fa
c1d0: 6c 73 65 20 3a 20 77 72 69 74 61 62 6c 65 29 3b  lse : writable);
c1e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c1f0: 20 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20      return (key 
c200: 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20  != null) ?..    
c210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c220: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
c230: 4b 65 79 28 6b 65 79 2c 20 77 68 61 74 49 66 2c  Key(key, whatIf,
c240: 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 20 3a   false, false) :
c250: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
c260: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c270: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
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 0d 0a 0d 0a 20 20 20 20  ////////....    
c2c0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
c2d0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
c2e0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
c2f0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
c300: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f  public static Mo
c310: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 72  ckRegistryKey Cr
c320: 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20  eateSubKey(..   
c330: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
c340: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
c350: 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
c360: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
c370: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
c380: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
c390: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
c3a0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
c3b0: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
c3c0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
c3d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c3e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
c3f0: 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c410: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
c420: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c430: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
c440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c450: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
c460: 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
c470: 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
c480: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
c490: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
c4a0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
c4b0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
c4c0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4e0: 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d    "rootKey = {0}
c4f0: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b  , subKeyName = {
c500: 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
c520: 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79  rDisplay(rootKey
c530: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75  ), ForDisplay(su
c540: 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  bKeyName)),..   
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c560: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
c570: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
c580: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5b0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48              // H
c5d0: 41 43 4b 3a 20 41 6c 77 61 79 73 20 6f 70 65 6e  ACK: Always open
c5e0: 20 61 20 6b 65 79 2c 20 72 61 74 68 65 72 20 74   a key, rather t
c5f0: 68 61 6e 20 63 72 65 61 74 69 6e 67 20 6f 6e 65  han creating one
c600: 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 20   when..         
c610: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
c620: 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 69 6e      operating in
c630: 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e   'what-if' mode.
c640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c650: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c670: 20 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20   (whatIf)..     
c680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
c690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c6a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
c6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6c0: 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41        // HACK: A
c6d0: 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74  ttempt to open t
c6e0: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 75 62  he specified sub
c6f0: 2d 6b 65 79 2e 20 20 49 66 0d 0a 20 20 20 20 20  -key.  If..     
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c710: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69 73     //       this
c720: 20 66 61 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20   fails, we will 
c730: 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 20 74 68  simply return th
c740: 65 20 72 6f 6f 74 0d 0a 20 20 20 20 20 20 20 20  e root..        
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c760: 2f 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74 73  //       key its
c770: 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72 69  elf since no wri
c780: 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  tes are allowed 
c790: 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  in..            
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
c7b0: 20 20 20 20 20 27 77 68 61 74 2d 69 66 27 20 6d       'what-if' m
c7c0: 6f 64 65 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20  ode anyhow...   
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7e0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c800: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
c810: 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f   key = rootKey.O
c820: 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79  penSubKey(subKey
c830: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
c840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c850: 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d    return (key !=
c860: 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20   null) ?..      
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c880: 20 20 20 20 20 20 6b 65 79 20 3a 20 6e 65 77 20        key : new 
c890: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
c8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8c0: 20 20 72 6f 6f 74 4b 65 79 2c 20 73 75 62 4b 65    rootKey, subKe
c8d0: 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 66  yName, whatIf, f
c8e0: 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20  alse, false);.. 
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c900: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
c910: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
c920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c930: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c950: 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65  eturn new MockRe
c960: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
c970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c980: 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e          rootKey.
c990: 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
c9a0: 4b 65 79 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  KeyName), whatIf
c9b0: 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20  , false,..      
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9d0: 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d 0a 20        false);.. 
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
ca00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ca10: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
ca20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ca30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ca40: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73           subKeys
ca50: 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Created++;..    
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ca70: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ca90: 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
cad0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
cae0: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
caf0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
cb00: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
cb10: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
cb20: 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65  atic void Delete
cb30: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
cb40: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
cb50: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
cb60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cb70: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
cb80: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
cb90: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
cba0: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
cbc0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
cbd0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
cbe0: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
cbf0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
cc00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
cc10: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
cc20: 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
cc30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cc40: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc60: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc80: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
cc90: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
cca0: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
ccb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ccc0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
ccd0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
cce0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
ccf0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
cd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
cd10: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
cd20: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22  ubKeyName = {1}"
cd30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cd40: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
cd50: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
cd60: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
cd70: 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  yName)),..      
cd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd90: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
cda0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cdb0: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
cdc0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
cdd0: 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44         rootKey.D
cde0: 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b  eleteSubKey(subK
cdf0: 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d  eyName, throwOnM
ce00: 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  issing);....    
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
ce20: 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20  eysDeleted++;.. 
ce30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ce40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ce50: 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
ce90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
cea0: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
ceb0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
cec0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
ced0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
cee0: 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65  atic void Delete
cef0: 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20  SubKeyTree(..   
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
cf10: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
cf20: 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
cf30: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
cf40: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
cf50: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
cf60: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
cf70: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
cf80: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
cf90: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
cfa0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cfb0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
cfc0: 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfe0: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
cff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d000: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d020: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
d030: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
d040: 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d060: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
d070: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
d080: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
d090: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f               "ro
d0b0: 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62  otKey = {0}, sub
d0c0: 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d  KeyName = {1}",.
d0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d0e0: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
d0f0: 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f  lay(rootKey), Fo
d100: 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e  rDisplay(subKeyN
d110: 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
d120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d130: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
d140: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d150: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
d160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d170: 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c       rootKey.Del
d180: 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73 75  eteSubKeyTree(su
d190: 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  bKeyName);....  
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
d1b0: 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  bKeysDeleted++;.
d1c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
d230: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
d240: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
d250: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
d260: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
d270: 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d 20  static string[] 
d280: 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d  GetSubKeyNames(.
d290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d2a0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
d2b0: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
d2c0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
d2d0: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
d2e0: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
d2f0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
d300: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
d310: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d320: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
d330: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
d340: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d350: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
d360: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
d370: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
d390: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
d3a0: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
d3b0: 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  y.High,..       
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3d0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
d3e0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
d3f0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30         "key = {0
d420: 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b  }", ForDisplay(k
d430: 65 79 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  ey)), traceCateg
d440: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
d450: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
d460: 6b 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d  key.GetSubKeyNam
d470: 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  es();..         
d480: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d490: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d4e0: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
d4f0: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
d500: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
d510: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
d520: 75 62 6c 69 63 20 73 74 61 74 69 63 20 6f 62 6a  ublic static obj
d530: 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20  ect GetValue(.. 
d540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
d550: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
d560: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
d570: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
d580: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d590: 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c     object defaul
d5a0: 74 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20  tValue,..       
d5b0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
d5c0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
d5d0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
d5e0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
d5f0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
d600: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d610: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
d620: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
d630: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
d640: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
d650: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
d660: 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
d670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
d680: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
d690: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
d6a0: 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20  ity.High,..     
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
d6d0: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
d6e0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
d6f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d700: 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20           "key = 
d710: 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c  {0}, name = {1},
d720: 20 64 65 66 61 75 6c 74 56 61 6c 75 65 20 3d 20   defaultValue = 
d730: 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {2}",..         
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
d750: 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 20  orDisplay(key), 
d760: 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29  ForDisplay(name)
d770: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d780: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
d790: 73 70 6c 61 79 28 64 65 66 61 75 6c 74 56 61 6c  splay(defaultVal
d7a0: 75 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  ue)), traceCateg
d7b0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
d7c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
d7d0: 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d  key.GetValue(nam
d7e0: 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 29  e, defaultValue)
d7f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
d800: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
d860: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
d870: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
d880: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
d890: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
d8a0: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 65  c static void Se
d8b0: 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
d8c0: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
d8d0: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
d8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d8f0: 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
d910: 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20  ect value,..    
d920: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
d930: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
d940: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
d950: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
d960: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
d970: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d980: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
d990: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9b0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
d9c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
d9d0: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
d9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
d9f0: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
da00: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
da10: 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da30: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
da40: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
da50: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
da60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
da70: 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d            "key =
da80: 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d   {0}, name = {1}
da90: 2c 20 76 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d  , value = {2}",.
daa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dab0: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
dac0: 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 73  lay(key), ForDis
dad0: 70 6c 61 79 28 6e 61 6d 65 29 2c 20 46 6f 72 44  play(name), ForD
dae0: 69 73 70 6c 61 79 28 76 61 6c 75 65 29 29 2c 0d  isplay(value)),.
daf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
db00: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
db10: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
db20: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
db30: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
db50: 79 2e 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c  y.SetValue(name,
db60: 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20   value);....    
db70: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56              keyV
db80: 61 6c 75 65 73 53 65 74 2b 2b 3b 0d 0a 20 20 20  aluesSet++;..   
db90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
dba0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
dbb0: 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
dbf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
dc00: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
dc10: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
dc20: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
dc30: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
dc40: 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56 61  ic void DeleteVa
dc50: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
dc60: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
dc70: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
dc90: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
dca0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
dcb0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
dcf0: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
dd10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
dd30: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
dd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd50: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
dd70: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd90: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
dda0: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
ddb0: 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
dde0: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
ddf0: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
de00: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b                "k
de20: 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d  ey = {0}, name =
de30: 20 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {1}", ForDispla
de40: 79 28 6b 65 79 29 2c 0d 0a 20 20 20 20 20 20 20  y(key),..       
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de60: 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65   ForDisplay(name
de70: 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
de80: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
de90: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
dea0: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
deb0: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c           key.Del
dec0: 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20 74  eteValue(name, t
ded0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d  hrowOnMissing);.
dee0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
def0: 20 20 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65     keyValuesDele
df00: 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
df10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
df20: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
df30: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
df40: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
df50: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
df60: 2f 2f 2f 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 0d  ///////////////.
dfa0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
dfb0: 6f 6e 20 53 74 72 69 6e 67 4c 69 73 74 20 43 6c  on StringList Cl
dfc0: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
dfd0: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
dfe0: 73 20 53 74 72 69 6e 67 4c 69 73 74 20 3a 20 4c  s StringList : L
dff0: 69 73 74 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 20  ist<string>..   
e000: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e010: 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e      public Strin
e020: 67 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20  gList()..       
e030: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
e040: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e060: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
e070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e080: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
e090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
e0e0: 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
e0f0: 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c  ist(IEnumerable<
e100: 73 74 72 69 6e 67 3e 20 63 6f 6c 6c 65 63 74 69  string> collecti
e110: 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
e120: 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c       : base(coll
e130: 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  ection)..       
e140: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e150: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
e160: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
e170: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
e180: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
e190: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
e1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
e1f0: 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e     #region Strin
e200: 67 44 69 63 74 69 6f 6e 61 72 79 20 43 6c 61 73  gDictionary Clas
e210: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
e220: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
e230: 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79  StringDictionary
e240: 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74   : Dictionary<st
e250: 72 69 6e 67 2c 20 73 74 72 69 6e 67 3e 0d 0a 20  ring, string>.. 
e260: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e270: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72        public Str
e280: 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 28 29 0d  ingDictionary().
e290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2b0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
e2d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e2e0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
e2f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e300: 2f 2f 2f 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 0d  ///////////////.
e340: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
e350: 6f 6e 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 43  on VersionList C
e360: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
e370: 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
e380: 73 73 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 3a  ss VersionList :
e390: 20 4c 69 73 74 3c 56 65 72 73 69 6f 6e 3e 0d 0a   List<Version>..
e3a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e3b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65         public Ve
e3c0: 72 73 69 6f 6e 4c 69 73 74 28 29 0d 0a 20 20 20  rsionList()..   
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62               : b
e3e0: 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ase()..         
e3f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e400: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
e410: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
e420: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
e430: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e480: 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72        public Ver
e490: 73 69 6f 6e 4c 69 73 74 28 49 45 6e 75 6d 65 72  sionList(IEnumer
e4a0: 61 62 6c 65 3c 56 65 72 73 69 6f 6e 3e 20 63 6f  able<Version> co
e4b0: 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  llection)..     
e4c0: 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73             : bas
e4d0: 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20  e(collection).. 
e4e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e500: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
e510: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e520: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e530: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
e540: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
e550: 2f 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 0d 0a 0d  /////////////...
e590: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
e5a0: 20 56 65 72 73 69 6f 6e 4d 61 70 20 43 6c 61 73   VersionMap Clas
e5b0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
e5c0: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
e5d0: 56 65 72 73 69 6f 6e 4d 61 70 20 3a 20 44 69 63  VersionMap : Dic
e5e0: 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20  tionary<string, 
e5f0: 56 65 72 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20  VersionList>..  
e600: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e610: 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73       public Vers
e620: 69 6f 6e 4d 61 70 28 29 0d 0a 20 20 20 20 20 20  ionMap()..      
e630: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e640: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e650: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e660: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e670: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e680: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e690: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
e6e0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 61 63 6b      #region Pack
e6f0: 61 67 65 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  age Class..     
e700: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c     internal seal
e710: 65 64 20 63 6c 61 73 73 20 50 61 63 6b 61 67 65  ed class Package
e720: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e730: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
e740: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
e750: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
e760: 20 20 70 75 62 6c 69 63 20 50 61 63 6b 61 67 65    public Package
e770: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
e780: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e790: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
e7a0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
e7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
e7c0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
e7d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e7e0: 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
e820: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
e830: 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
e840: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
e850: 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62    private Assemb
e860: 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
e870: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
e880: 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c    public Assembl
e890: 79 4e 61 6d 65 20 41 73 73 65 6d 62 6c 79 4e 61  yName AssemblyNa
e8a0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
e8b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e8c0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
e8d0: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20 7d 0d  assemblyName; }.
e8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e8f0: 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 4e   set { assemblyN
e900: 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
e910: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
e920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
e930: 2f 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e980: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 67 6c 6f  private bool glo
e990: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
e9a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
e9b0: 75 62 6c 69 63 20 62 6f 6f 6c 20 47 6c 6f 62 61  ublic bool Globa
e9c0: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 0d 0a  lAssemblyCache..
e9d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
e9f0: 65 74 20 7b 20 72 65 74 75 72 6e 20 67 6c 6f 62  et { return glob
ea00: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b  alAssemblyCache;
ea10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ea20: 20 20 20 20 73 65 74 20 7b 20 67 6c 6f 62 61 6c      set { global
ea30: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20  AssemblyCache = 
ea40: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
ea50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ea60: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ea70: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
eab0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
eac0: 65 20 47 75 69 64 20 70 61 63 6b 61 67 65 49 64  e Guid packageId
ead0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
eae0: 75 62 6c 69 63 20 47 75 69 64 20 50 61 63 6b 61  ublic Guid Packa
eaf0: 67 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  geId..          
eb00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
eb10: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
eb20: 6e 20 70 61 63 6b 61 67 65 49 64 3b 20 7d 0d 0a  n packageId; }..
eb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb40: 73 65 74 20 7b 20 70 61 63 6b 61 67 65 49 64 20  set { packageId 
eb50: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
eb60: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
eb70: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
eb80: 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
ebd0: 61 74 65 20 47 75 69 64 20 73 65 72 76 69 63 65  ate Guid service
ebe0: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
ebf0: 20 70 75 62 6c 69 63 20 47 75 69 64 20 53 65 72   public Guid Ser
ec00: 76 69 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20  viceId..        
ec10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ec20: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
ec30: 75 72 6e 20 73 65 72 76 69 63 65 49 64 3b 20 7d  urn serviceId; }
ec40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ec50: 20 20 73 65 74 20 7b 20 73 65 72 76 69 63 65 49    set { serviceI
ec60: 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  d = value; }..  
ec70: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ec80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
ec90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ecd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
ece0: 69 76 61 74 65 20 47 75 69 64 20 64 61 74 61 53  ivate Guid dataS
ecf0: 6f 75 72 63 65 49 64 3b 0d 0a 20 20 20 20 20 20  ourceId;..      
ed00: 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69        public Gui
ed10: 64 20 44 61 74 61 53 6f 75 72 63 65 49 64 0d 0a  d DataSourceId..
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ed30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
ed40: 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61  et { return data
ed50: 53 6f 75 72 63 65 49 64 3b 20 7d 0d 0a 20 20 20  SourceId; }..   
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
ed70: 20 7b 20 64 61 74 61 53 6f 75 72 63 65 49 64 20   { dataSourceId 
ed80: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
ed90: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
eda0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
edb0: 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
edf0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
ee00: 61 74 65 20 47 75 69 64 20 64 61 74 61 50 72 6f  ate Guid dataPro
ee10: 76 69 64 65 72 49 64 3b 0d 0a 20 20 20 20 20 20  viderId;..      
ee20: 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69        public Gui
ee30: 64 20 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  d DataProviderId
ee40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
ee50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ee60: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61   get { return da
ee70: 74 61 50 72 6f 76 69 64 65 72 49 64 3b 20 7d 0d  taProviderId; }.
ee80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ee90: 20 73 65 74 20 7b 20 64 61 74 61 50 72 6f 76 69   set { dataProvi
eea0: 64 65 72 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  derId = value; }
eeb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
eec0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
eed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
ef20: 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20 61    private Guid a
ef30: 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
ef40: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
ef50: 70 75 62 6c 69 63 20 47 75 69 64 20 41 64 6f 4e  public Guid AdoN
ef60: 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 0d 0a  etTechnologyId..
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ef80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
ef90: 65 74 20 7b 20 72 65 74 75 72 6e 20 61 64 6f 4e  et { return adoN
efa0: 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 20  etTechnologyId; 
efb0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
efc0: 20 20 20 73 65 74 20 7b 20 61 64 6f 4e 65 74 54     set { adoNetT
efd0: 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 76 61  echnologyId = va
efe0: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
eff0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
f000: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
f010: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f020: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
f030: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f050: 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
f080: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
f090: 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on Configuration
f0a0: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
f0b0: 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
f0c0: 6c 61 73 73 20 43 6f 6e 66 69 67 75 72 61 74 69  lass Configurati
f0d0: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  on..        {.. 
f0e0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
f0f0: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
f100: 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ants..          
f110: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
f120: 63 68 61 72 20 53 77 69 74 63 68 20 3d 20 27 2d  char Switch = '-
f130: 27 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ';..            
f140: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68  private const ch
f150: 61 72 20 41 6c 74 53 77 69 74 63 68 20 3d 20 27  ar AltSwitch = '
f160: 2f 27 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  /';....         
f170: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
f1c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
f1d0: 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 63 68  atic readonly ch
f1e0: 61 72 5b 5d 20 53 77 69 74 63 68 43 68 61 72 73  ar[] SwitchChars
f1f0: 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   = {..          
f200: 20 20 20 20 20 20 53 77 69 74 63 68 2c 20 41 6c        Switch, Al
f210: 74 53 77 69 74 63 68 0d 0a 20 20 20 20 20 20 20  tSwitch..       
f220: 20 20 20 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20       };..       
f230: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
f240: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
f250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
f2a0: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
f2b0: 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  e Constructors..
f2c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
f2d0: 61 74 65 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ate Configuratio
f2e0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
f2f0: 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
f300: 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
f310: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
f320: 6f 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  ogFileName,..   
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
f340: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f360: 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e  string coreFileN
f370: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
f380: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e        string lin
f390: 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  qFileName,..    
f3a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
f3b0: 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
f3c0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
f3d0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 67        string reg
f3e0: 69 73 74 72 79 56 65 72 73 69 6f 6e 2c 0d 0a 20  istryVersion,.. 
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f400: 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73  tring configVers
f410: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
f420: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 73 56        string vsV
f430: 65 72 73 69 6f 6e 53 75 66 66 69 78 2c 0d 0a 20  ersionSuffix,.. 
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f450: 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61  tring debugForma
f460: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
f470: 20 20 20 20 73 74 72 69 6e 67 20 74 72 61 63 65      string trace
f480: 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
f490: 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
f4a0: 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61  Flags installFla
f4b0: 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
f4c0: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
f4d0: 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79  ty debugPriority
f4e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f4f0: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
f500: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d   tracePriority,.
f510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f520: 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
f530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f540: 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20  bool install,.. 
f550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f560: 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
f570: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
f580: 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
f590: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
f5a0: 20 20 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74      bool noDeskt
f5b0: 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op,..           
f5c0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70       bool noComp
f5d0: 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  act,..          
f5e0: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74        bool noNet
f5f0: 46 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  Fx20,..         
f600: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
f610: 74 46 78 33 35 2c 0d 0a 20 20 20 20 20 20 20 20  tFx35,..        
f620: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
f630: 65 74 46 78 34 30 2c 0d 0a 20 20 20 20 20 20 20  etFx40,..       
f640: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
f650: 4e 65 74 46 78 34 35 2c 0d 0a 20 20 20 20 20 20  NetFx45,..      
f660: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f670: 6f 56 73 32 30 30 35 2c 0d 0a 20 20 20 20 20 20  oVs2005,..      
f680: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f690: 6f 56 73 32 30 30 38 2c 0d 0a 20 20 20 20 20 20  oVs2008,..      
f6a0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f6b0: 6f 56 73 32 30 31 30 2c 0d 0a 20 20 20 20 20 20  oVs2010,..      
f6c0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f6d0: 6f 56 73 32 30 31 32 2c 0d 0a 20 20 20 20 20 20  oVs2012,..      
f6e0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f6f0: 6f 56 73 32 30 31 33 2c 0d 0a 20 20 20 20 20 20  oVs2013,..      
f700: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f710: 6f 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20  oTrace,..       
f720: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
f730: 43 6f 6e 73 6f 6c 65 2c 0d 0a 20 20 20 20 20 20  Console,..      
f740: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f750: 6f 4c 6f 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  oLog,..         
f760: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
f770: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
f780: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f790: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
f7a0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f7b0: 64 65 62 75 67 2c 0d 0a 20 20 20 20 20 20 20 20  debug,..        
f7c0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
f7d0: 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
f7e0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6e 66         bool conf
f7f0: 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  irm..           
f800: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
f810: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f820: 20 20 20 20 20 20 20 74 68 69 73 2e 61 73 73 65         this.asse
f830: 6d 62 6c 79 20 3d 20 61 73 73 65 6d 62 6c 79 3b  mbly = assembly;
f840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f850: 20 20 74 68 69 73 2e 6c 6f 67 46 69 6c 65 4e 61    this.logFileNa
f860: 6d 65 20 3d 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  me = logFileName
f870: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f880: 20 20 20 74 68 69 73 2e 64 69 72 65 63 74 6f 72     this.director
f890: 79 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a  y = directory;..
f8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8b0: 74 68 69 73 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  this.coreFileNam
f8c0: 65 20 3d 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  e = coreFileName
f8d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f8e0: 20 20 20 74 68 69 73 2e 6c 69 6e 71 46 69 6c 65     this.linqFile
f8f0: 4e 61 6d 65 20 3d 20 6c 69 6e 71 46 69 6c 65 4e  Name = linqFileN
f900: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
f910: 20 20 20 20 20 20 74 68 69 73 2e 64 65 73 69 67        this.desig
f920: 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 64 65  nerFileName = de
f930: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
f940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f950: 20 74 68 69 73 2e 72 65 67 69 73 74 72 79 56 65   this.registryVe
f960: 72 73 69 6f 6e 20 3d 20 72 65 67 69 73 74 72 79  rsion = registry
f970: 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
f980: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63            this.c
f990: 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 63  onfigVersion = c
f9a0: 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20  onfigVersion;.. 
f9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f9c0: 68 69 73 2e 76 73 56 65 72 73 69 6f 6e 53 75 66  his.vsVersionSuf
f9d0: 66 69 78 20 3d 20 76 73 56 65 72 73 69 6f 6e 53  fix = vsVersionS
f9e0: 75 66 66 69 78 3b 0d 0a 20 20 20 20 20 20 20 20  uffix;..        
f9f0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62          this.deb
fa00: 75 67 46 6f 72 6d 61 74 20 3d 20 64 65 62 75 67  ugFormat = debug
fa10: 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
fa20: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 72           this.tr
fa30: 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 72 61 63  aceFormat = trac
fa40: 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  eFormat;..      
fa50: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69            this.i
fa60: 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e  nstallFlags = in
fa70: 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20  stallFlags;..   
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fa90: 73 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  s.debugPriority 
faa0: 3d 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b  = debugPriority;
fab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fac0: 20 20 74 68 69 73 2e 74 72 61 63 65 50 72 69 6f    this.tracePrio
fad0: 72 69 74 79 20 3d 20 74 72 61 63 65 50 72 69 6f  rity = tracePrio
fae0: 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
faf0: 20 20 20 20 20 20 20 74 68 69 73 2e 70 65 72 55         this.perU
fb00: 73 65 72 20 3d 20 70 65 72 55 73 65 72 3b 0d 0a  ser = perUser;..
fb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb20: 74 68 69 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69  this.install = i
fb30: 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  nstall;..       
fb40: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 6f           this.wo
fb50: 77 36 34 20 3d 20 77 6f 77 36 34 3b 0d 0a 20 20  w64 = wow64;..  
fb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fb70: 69 73 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  is.noRuntimeVers
fb80: 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69 6d 65 56  ion = noRuntimeV
fb90: 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ersion;..       
fba0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
fbb0: 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b  Desktop = noDesk
fbc0: 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  top;..          
fbd0: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d        this.noCom
fbe0: 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74  pact = noCompact
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 4e 65 74 46 78 32     this.noNetFx2
fc10: 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a  0 = noNetFx20;..
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 33 35 20 3d  this.noNetFx35 =
fc40: 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20 20   noNetFx35;..   
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 34 30 20 3d 20 6e 6f  s.noNetFx40 = no
fc70: 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20  NetFx40;..      
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 35 20 3d 20 6e 6f 4e 65 74  oNetFx45 = noNet
fca0: 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx45;..         
fcb0: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
fcc0: 32 30 30 35 20 3d 20 6e 6f 56 73 32 30 30 35 3b  2005 = noVs2005;
fcd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fce0: 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 38 20    this.noVs2008 
fcf0: 3d 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20  = noVs2008;..   
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fd10: 73 2e 6e 6f 56 73 32 30 31 30 20 3d 20 6e 6f 56  s.noVs2010 = noV
fd20: 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20  s2010;..        
fd30: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
fd40: 73 32 30 31 32 20 3d 20 6e 6f 56 73 32 30 31 32  s2012 = noVs2012
fd50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fd60: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 33     this.noVs2013
fd70: 20 3d 20 6e 6f 56 73 32 30 31 33 3b 0d 0a 20 20   = noVs2013;..  
fd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fd90: 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54  is.noTrace = noT
fda0: 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  race;..         
fdb0: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f         this.noCo
fdc0: 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c  nsole = noConsol
fdd0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
fde0: 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d      this.noLog =
fdf0: 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20   noLog;..       
fe00: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 68           this.th
fe10: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74  rowOnMissing = t
fe20: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a  hrowOnMissing;..
fe30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe40: 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68  this.whatIf = wh
fe50: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
fe60: 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75         this.debu
fe70: 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20 20 20  g = debug;..    
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fe90: 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72 62 6f  .verbose = verbo
fea0: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
feb0: 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 72       this.confir
fec0: 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  m = confirm;..  
fed0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
fee0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
fef0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
ff00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ff10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
ff50: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
ff60: 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65 74  ivate Static Met
ff70: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
ff80: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
ff90: 20 76 6f 69 64 20 47 65 74 44 65 66 61 75 6c 74   void GetDefault
ffa0: 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20  FileNames(..    
ffb0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
ffc0: 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
ffd0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ffe0: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f     ref string co
fff0: 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  reFileName,..   
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
10010 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
10020 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
10030 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
10040 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
10050 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
10060 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
10070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10080 20 20 20 20 20 20 69 66 20 28 74 68 69 73 41 73        if (thisAs
10090 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d  sembly == null).
100a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
100b0 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100d0 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68  directory = Path
100e0 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d  .GetDirectoryNam
100f0 65 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c  e(thisAssembly.L
10100 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  ocation);....   
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10120 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
10130 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
10140 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10150 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
10160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10170 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d    coreFileName =
10180 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
10190 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
101b0 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65  staller.CoreFile
101c0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
101d0 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
101e0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
101f0 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
10200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10210 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
10220 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  LinqFileName);..
10230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10240 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
10250 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
10260 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  e(directory,..  
10270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10280 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69    Installer.Desi
10290 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
102a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
102b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
102c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10310 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
10320 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28  ool CheckOption(
10330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10340 20 20 72 65 66 20 73 74 72 69 6e 67 20 61 72 67    ref string arg
10350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10360 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
10370 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10380 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
10390 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20  t = arg;....    
103a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
103b0 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
103c0 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d 0a  Empty(result))..
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
103f0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
10400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10410 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61  / NOTE: Remove a
10420 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74 63  ll leading switc
10430 68 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20 20  h chars...      
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10460 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 72        result = r
10470 65 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74 28  esult.TrimStart(
10480 53 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d  SwitchChars);...
10490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
104a0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
104c0 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63  NOTE: How many c
104d0 68 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76 65  hars were remove
104e0 64 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d?..            
104f0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e  int count = arg.
10520 4c 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74 2e  Length - result.
10530 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10550 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10560 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
10570 57 61 73 20 74 68 65 72 65 20 61 74 20 6c 65 61  Was there at lea
10580 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20  st one?..       
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
105a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105b0 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e       if (count >
105c0 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
105d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10610 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70  // NOTE: Ok, rep
10620 6c 61 63 65 20 74 68 65 69 72 20 6f 72 69 67 69  lace their origi
10630 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nal..           
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10650 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d        argument..
10660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10670 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 20 20 20 20 20 61 72 67 20 3d 20 72 65 73 75 6c       arg = resul
106a0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
106c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
106d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
106e0 45 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73 20  E: Yes, this is 
106f0 61 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20 20  a switch...     
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10710 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10730 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10750 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
10760 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10770 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10780 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
10790 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
107a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
107b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
107c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
107d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
107e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
107f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
10800 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63  static bool Matc
10810 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  hOption(..      
10820 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10830 20 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20   arg,..         
10840 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f 70         string op
10850 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..          
10860 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
10870 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10880 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67          if ((arg
10890 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70   == null) || (op
108a0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  tion == null))..
108b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
108d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
108e0 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
108f0 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c 20  ng.Compare(arg, 
10900 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20  0, option, 0,.. 
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 20 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53     arg.Length, S
10930 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
10940 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
10950 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20  e) == 0;..      
10960 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10970 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
10980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
109c0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
109d0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50  e static bool? P
109e0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20  arseBoolean(..  
109f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10a00 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20  ring text..     
10a10 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
10a20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10a30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10a40 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
10a50 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20  rEmpty(text)).. 
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
10a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10a80 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65        bool value
10a90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10aa0 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f           if (boo
10ab0 6c 2e 54 72 79 50 61 72 73 65 28 74 65 78 74 2c  l.TryParse(text,
10ac0 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20   out value))..  
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ae0 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
10af0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
10b00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10b10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10b20 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
10b30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10b40 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
10b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b80 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
10b90 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
10ba0 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50 61  static object Pa
10bb0 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
10bc0 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 65            Type e
10bd0 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20 20  numType,..      
10be0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10bf0 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20   text,..        
10c00 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43          bool noC
10c10 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ase..           
10c20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
10c30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10c40 20 20 20 20 20 20 20 69 66 20 28 28 65 6e 75 6d         if ((enum
10c50 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  Type == null) ||
10c60 20 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75   !enumType.IsEnu
10c70 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
10c80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
10c90 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
10ca0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
10cb0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
10cc0 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  y(text))..      
10cd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cf0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
10d00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d20 20 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d       return Enum
10d30 2e 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65 2c  .Parse(enumType,
10d40 20 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d   text, noCase);.
10d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10d60 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10d70 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
10d80 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
10d90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10db0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
10dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10dd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10de0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
10df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10e00 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
10e10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
10e20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
10e30 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
10e40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
10e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
10e90 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
10ea0 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  ic Static Method
10eb0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
10ec0 75 62 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e  ublic static Con
10ed0 66 69 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74  figuration Creat
10ee0 65 44 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20  eDefault()..    
10ef0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10f00 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10f10 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75  g directory = nu
10f20 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
10f30 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
10f40 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  FileName = null;
10f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10f60 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c    string linqFil
10f70 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  eName = null;.. 
10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
10f90 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
10fa0 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
10fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10fc0 20 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65    GetDefaultFile
10fd0 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
10ff0 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20 63  directory, ref c
11000 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66  oreFileName, ref
11010 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a   linqFileName,..
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11030 20 20 20 20 72 65 66 20 64 65 73 69 67 6e 65 72      ref designer
11040 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11060 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67 75  turn new Configu
11070 72 61 74 69 6f 6e 28 74 68 69 73 41 73 73 65 6d  ration(thisAssem
11080 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63  bly, null, direc
11090 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
110a0 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
110b0 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46 69 6c  ileName, linqFil
110c0 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65 72 46  eName, designerF
110d0 69 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e  ileName, null, n
110e0 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
110f0 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
11100 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f  TraceOps.DebugFo
11110 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 54  rmat, TraceOps.T
11120 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  raceFormat,..   
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44 65   InstallFlags.De
11150 66 61 75 6c 74 2c 20 54 72 61 63 65 50 72 69 6f  fault, TracePrio
11160 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 0d 0a 20  rity.Default,.. 
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11180 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
11190 2e 44 65 66 61 75 6c 74 2c 20 66 61 6c 73 65 2c  .Default, false,
111a0 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61   true, false, fa
111b0 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20  lse, false,..   
111c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111d0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
111e0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
111f0 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
11200 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20  , false,..      
11210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
11220 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
11230 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
11240 20 74 72 75 65 2c 20 74 72 75 65 2c 20 66 61 6c   true, true, fal
11250 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
11260 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20           false, 
11270 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
11280 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11290 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
112a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
112b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
112c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
112d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
112e0 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
112f0 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
11300 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
11310 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
11320 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62   public static b
11330 6f 6f 6c 20 46 72 6f 6d 41 72 67 73 28 0d 0a 20  ool FromArgs(.. 
11340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
11350 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20  tring[] args,.. 
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
11370 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20  ool strict,..   
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
11390 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
113a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
113c0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
113d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
113e0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
113f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11400 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
11410 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11430 66 20 28 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29  f (args == null)
11440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11450 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11460 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11480 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   (configuration 
11490 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
114a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114b0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    configuration 
114c0 3d 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = Configuration.
114d0 43 72 65 61 74 65 44 65 66 61 75 6c 74 28 29 3b  CreateDefault();
114e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
114f0 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
11500 74 68 20 3d 20 61 72 67 73 2e 4c 65 6e 67 74 68  th = args.Length
11510 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11520 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
11530 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
11540 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64  ex < length; ind
11550 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
11560 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11580 20 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67        string arg
11590 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d   = args[index];.
115a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
115b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
115c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115d0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
115e0 53 6b 69 70 20 61 6e 79 20 61 72 67 75 6d 65 6e  Skip any argumen
115f0 74 20 74 68 61 74 20 69 73 20 6e 75 6c 6c 20 28  t that is null (
11600 3f 29 20 6f 72 20 61 6e 20 65 6d 70 74 79 0d 0a  ?) or an empty..
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11620 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
11630 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...      
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11650 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11670 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
11680 72 45 6d 70 74 79 28 61 72 67 29 29 0d 0a 20 20  rEmpty(arg))..  
11690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
116b0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
116d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
116e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
116f0 54 45 3a 20 57 65 20 61 72 65 20 67 6f 69 6e 67  TE: We are going
11700 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 6f   to modify the o
11710 72 69 67 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74  riginal argument
11720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11730 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
11740 20 20 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61     by removing a
11750 6e 79 20 6c 65 61 64 69 6e 67 20 6f 70 74 69 6f  ny leading optio
11760 6e 20 63 68 61 72 61 63 74 65 72 73 3b 0d 0a 20  n characters;.. 
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11780 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
11790 74 68 65 72 65 66 6f 72 65 2c 20 77 65 20 75 73  therefore, we us
117a0 65 20 61 20 6e 65 77 20 73 74 72 69 6e 67 20 74  e a new string t
117b0 6f 20 68 6f 6c 64 20 74 68 65 0d 0a 20 20 20 20  o hold the..    
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64      //       mod
117e0 69 66 69 65 64 20 61 72 67 75 6d 65 6e 74 2e 0d  ified argument..
117f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11800 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11820 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 41       string newA
11830 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20  rg = arg;....   
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11850 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11870 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68   // NOTE: All th
11880 65 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d  e supported comm
11890 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73  and line options
118a0 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20   must..         
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
118c0 2f 20 20 20 20 20 20 20 62 65 67 69 6e 20 77 69  /       begin wi
118d0 74 68 20 61 6e 20 6f 70 74 69 6f 6e 20 63 68 61  th an option cha
118e0 72 61 63 74 65 72 20 28 65 2e 67 2e 20 61 20 6d  racter (e.g. a m
118f0 69 6e 75 73 0d 0a 20 20 20 20 20 20 20 20 20 20  inus..          
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11910 20 20 20 20 20 20 20 6f 72 20 66 6f 72 77 61 72         or forwar
11920 64 20 73 6c 61 73 68 29 3b 20 61 74 74 65 6d 70  d slash); attemp
11930 74 20 74 6f 20 76 61 6c 69 64 61 74 65 20 74 68  t to validate th
11940 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  at..            
11950 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
11960 20 20 20 20 20 6e 6f 77 2e 20 20 49 66 20 77 65       now.  If we
11970 20 66 61 69 6c 20 69 6e 20 73 74 72 69 63 74 20   fail in strict 
11980 6d 6f 64 65 2c 20 77 65 20 61 72 65 20 64 6f 6e  mode, we are don
11990 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
119a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
119b0 20 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20       otherwise, 
119c0 6a 75 73 74 20 73 6b 69 70 20 74 68 69 73 20 61  just skip this a
119d0 72 67 75 6d 65 6e 74 20 61 6e 64 20 61 64 76 61  rgument and adva
119e0 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nce..           
119f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11a00 20 20 20 20 20 20 74 6f 20 74 68 65 20 6e 65 78        to the nex
11a10 74 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20  t one...        
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11a40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11a50 21 43 68 65 63 6b 4f 70 74 69 6f 6e 28 72 65 66  !CheckOption(ref
11a60 20 6e 65 77 41 72 67 29 29 0d 0a 20 20 20 20 20   newArg))..     
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
11ab0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
11ac0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ae0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
11af0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
11b00 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
11b30 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
11b40 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b60 20 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f          "Unsuppo
11b70 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  rted command lin
11b80 65 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22  e argument: {0}"
11b90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bb0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
11bc0 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  g)), traceCatego
11bd0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bf0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
11c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
11c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11c50 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
11c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ca0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
11cb0 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f  E: All the suppo
11cc0 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  rted command lin
11cd0 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a  e options must..
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cf0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
11d00 20 68 61 76 65 20 61 20 76 61 6c 75 65 3b 20 74   have a value; t
11d10 68 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70  herefore, attemp
11d20 74 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20  t to advance..  
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
11d50 6f 20 69 74 20 6e 6f 77 2e 20 20 49 66 20 77 65  o it now.  If we
11d60 20 66 61 69 6c 2c 20 77 65 20 61 72 65 20 64 6f   fail, we are do
11d70 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne...           
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
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 69 6e 64 65 78 2b 2b           index++
11db0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11dd0 28 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68  (index >= length
11de0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11df0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e10 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
11e20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
11e30 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
11e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e50 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
11e60 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
11e70 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
11e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ea0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
11eb0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ee0 22 4d 69 73 73 69 6e 67 20 76 61 6c 75 65 20 66  "Missing value f
11ef0 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c  or option: {0}",
11f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
11f30 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
11f40 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f60 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f90 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
11fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
11fc0 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
11fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ff0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
12000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12010 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
12020 72 61 62 20 74 68 65 20 74 65 78 74 75 61 6c 20  rab the textual 
12030 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
12040 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20  mmand line..    
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12060 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74      //       opt
12070 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ion...          
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
120a0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
120b0 20 74 65 78 74 20 3d 20 61 72 67 73 5b 69 6e 64   text = args[ind
120c0 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex];....        
120d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120e0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
120f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
12100 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20  OTE: Figure out 
12110 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69  which command li
12120 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69 73 20 69  ne option this i
12130 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
12140 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
12150 20 20 20 20 28 62 61 73 65 64 20 6f 6e 20 61 20      (based on a 
12160 70 61 72 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74  partial name mat
12170 63 68 29 20 61 6e 64 20 74 68 65 6e 20 74 72 79  ch) and then try
12180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12190 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
121a0 20 20 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20     to interpret 
121b0 74 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75  the textual valu
121c0 65 20 61 73 20 74 68 65 20 63 6f 72 72 65 63 74  e as the correct
121d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
121e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
121f0 20 20 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20     type...      
12200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12210 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
12230 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
12240 77 41 72 67 2c 20 22 63 6f 6e 66 69 67 56 65 72  wArg, "configVer
12250 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20  sion"))..       
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12270 20 7b 0d 0a 20 20 20 20 20 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
122a0 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 74 65  nfigVersion = te
122b0 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
122d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122e0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
122f0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
12300 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29  Arg, "confirm"))
12310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12320 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12340 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
12350 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
12360 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12380 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
12390 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
123a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
123e0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
123f0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12420 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
12430 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
12440 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
12450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12460 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
12470 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
12480 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
124b0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
124c0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
124d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
124e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124f0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
12500 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
12510 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
12520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12540 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
12550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12570 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
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 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
125b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125d0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
125e0 20 20 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 7d 0d 0a 0d 0a             }....
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12610 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
12620 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72  iguration.confir
12630 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  m = (bool)value;
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 7d 0d 0a 20 20 20            }..   
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12670 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
12680 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
12690 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22  , "coreFileName"
126a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
126b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 20 20 20 63 6f 6e 66 69             confi
126e0 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
126f0 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
12700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12710 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12730 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
12740 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
12750 64 65 62 75 67 22 29 29 0d 0a 20 20 20 20 20 20  debug"))..      
12760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12770 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12790 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
127a0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
127b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127d0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
127e0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
127f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12800 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
12830 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
12840 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12860 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
12870 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
12880 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128b0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
128c0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
128d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
12900 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
12910 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
12940 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
12950 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
12960 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12980 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
12990 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
129c0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
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 20 72 65 74 75 72             retur
129f0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
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 63 6f 6e 74              cont
12a20 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a60 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
12a70 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f 6c 29  n.debug = (bool)
12a80 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
12ab0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
12ac0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12ad0 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f  newArg, "debugFo
12ae0 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rmat"))..       
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
12b30 62 75 67 46 6f 72 6d 61 74 20 3d 20 74 65 78 74  bugFormat = text
12b40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
12b60 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
12b70 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
12b80 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b  ion.debugFormat;
12b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12ba0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bc0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
12bd0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
12be0 2c 20 22 64 65 62 75 67 50 72 69 6f 72 69 74 79  , "debugPriority
12bf0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 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 20 20 20 20 6f 62 6a 65              obje
12c30 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
12c40 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
12c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c60 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72         typeof(Tr
12c70 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65  acePriority), te
12c80 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
12c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ca0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
12cb0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
12d00 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
12d10 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d40 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
12d50 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
12d60 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
12d90 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
12da0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
12dd0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
12de0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
12e10 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
12e20 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
12e30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e50 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
12e60 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
12e90 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12ec0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
12ef0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f30 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
12f40 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  n.debugPriority 
12f50 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  = (TracePriority
12f60 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
12f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f80 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
12f90 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 63 6f  bugPriority = co
12fa0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
12fb0 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  gPriority;..    
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
12ff0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
13000 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 73  ion(newArg, "des
13010 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 29 29  ignerFileName"))
13020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13030 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
13060 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46  ration.designerF
13070 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
13080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13090 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
130c0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
130d0 20 22 64 69 72 65 63 74 6f 72 79 22 29 29 0d 0a   "directory"))..
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 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 63 6f 6e 66 69 67 75 72 61         configura
13120 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 20 3d  tion.directory =
13130 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20   text;....      
13140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13150 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a        // NOTE: *
13180 53 50 45 43 49 41 4c 2a 20 4d 75 73 74 20 72 65  SPECIAL* Must re
13190 66 72 65 73 68 20 74 68 65 20 66 69 6c 65 20 6e  fresh the file n
131a0 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20    //       here 
131d0 62 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65  because the unde
131e0 72 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79  rlying directory
131f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13210 20 20 20 20 20 20 20 68 61 73 20 63 68 61 6e 67         has chang
13220 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13260 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
13270 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61  Name = configura
13280 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
13290 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132b0 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
132c0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
132d0 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
132e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
13300 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
13310 47 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f 72 65  GetFileName(core
13320 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
13330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13340 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
13350 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
13360 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  ty(coreFileName)
13370 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13390 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20     coreFileName 
133a0 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65  = Installer.Core
133b0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
133e0 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
133f0 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
13400 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
13430 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 63 6f  on.directory, co
13440 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13460 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
13470 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  ng linqFileName 
13480 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
13490 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  linqFileName;...
134a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
134c0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
134d0 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e  rEmpty(linqFileN
134e0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
13510 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
13520 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e  leName(linqFileN
13530 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13550 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
13560 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69  IsNullOrEmpty(li
13570 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  nqFileName))..  
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
135a0 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  nqFileName = Ins
135b0 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e  taller.LinqFileN
135c0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
135f0 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  n.linqFileName =
13600 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
13640 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c  rectory, linqFil
13650 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
13680 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
13690 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
136a0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
136b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136d0 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
136e0 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
136f0 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
13720 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
13730 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
13740 65 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  e(designerFileNa
13750 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
13780 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
13790 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
137a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
137d0 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65  e = Installer.De
137e0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
137f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13810 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73  onfiguration.des
13820 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
13830 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13860 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
13870 65 63 74 6f 72 79 2c 20 64 65 73 69 67 6e 65 72  ectory, designer
13880 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 7d 0d 0a 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 65                 e
138c0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
138d0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73  ion(newArg, "ins
138e0 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20 20  tall"))..       
138f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
13930 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
13940 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13960 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
13970 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
139c0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
139d0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
13a00 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
13a10 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
13a50 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
13a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
13a90 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
13aa0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
13ad0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
13ae0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
13af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
13b20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
13b50 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 20 72 65 74 75 72 6e            return
13b80 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
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 63 6f 6e 74 69             conti
13bb0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bf0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13c00 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c  .install = (bool
13c10 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
13c40 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
13c50 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
13c60 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c  (newArg, "instal
13c70 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20 20 20 20  lFlags"))..     
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
13cc0 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20   ParseEnum(..   
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
13cf0 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73  eof(InstallFlags
13d00 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d  ), text, true);.
13d10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13d30 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
13d40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
13d90 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
13da0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
13dd0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
13de0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
13e20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 20 20 20 20 22 49 6e 76 61 6c 69 64 20 69 6e 73      "Invalid ins
13e60 74 61 6c 6c 20 66 6c 61 67 73 20 76 61 6c 75 65  tall flags value
13e70 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
13ea0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20  Display(text)), 
13eb0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
13ec0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f10 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
13f20 3b 0d 0a 0d 0a 20 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
13f50 20 20 20 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 7d 0d 0a 0d              }...
13f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13f90 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61  figuration.insta
13fa0 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73 74 61  llFlags = (Insta
13fb0 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a  llFlags)value;..
13fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
14000 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
14010 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29  "linqFileName"))
14020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14030 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 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 20 20 20 63 6f 6e 66 69 67 75           configu
14060 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e  ration.linqFileN
14070 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
14080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14090 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
140c0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f  tion(newArg, "lo
140d0 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  gFileName"))..  
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 20 20 20 7b 0d 0a 20 20 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 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
14120 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d  on.logFileName =
14130 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
14160 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
14170 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
14180 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61  newArg, "noCompa
14190 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ct"))..         
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
141b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
141d0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
141e0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
141f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14210 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
14220 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
14270 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
14280 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142a0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
142b0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
142c0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
142d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
14300 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
14310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14330 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
14340 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
14350 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
14380 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
14390 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
143d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143f0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
14400 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
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 20 72 65 74 75 72 6e 20 66          return f
14430 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
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 63 6f 6e 74 69 6e 75           continu
14460 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14480 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
144b0 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c  oCompact = (bool
144c0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
144f0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
14500 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
14510 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73  (newArg, "noCons
14520 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ole"))..        
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14540 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
14560 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
14570 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
14580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
145b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
145c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145f0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
14600 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
14610 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
14640 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
14650 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14680 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
14690 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
146a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146c0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
146d0 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
146e0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14700 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
14710 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
14720 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
14730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14750 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
14760 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
14790 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
147a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
147c0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
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 63 6f 6e 74 69 6e            contin
147f0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14810 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14830 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
14840 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f  noConsole = (boo
14850 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
14890 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
148a0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 44 65 73  n(newArg, "noDes
148b0 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20 20 20 20  ktop"))..       
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
14900 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
14910 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
14940 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14960 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
14990 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
149a0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
149d0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
149e0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
14a20 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
14a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
14a60 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
14a70 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
14a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
14aa0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
14ab0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
14ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
14af0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b10 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
14b20 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 20 72 65 74 75 72 6e            return
14b50 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
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 63 6f 6e 74 69             conti
14b80 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
14bd0 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f  .noDesktop = (bo
14be0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
14c20 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
14c30 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f  on(newArg, "noLo
14c40 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  g"))..          
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
14c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
14c80 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
14c90 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
14ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
14cc0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
14cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
14cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d10 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
14d20 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
14d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
14d60 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
14d70 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
14db0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14de0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
14df0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
14e00 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
14e30 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
14e40 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e70 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
14e80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ea0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
14eb0 29 0d 0a 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 20 72 65 74 75 72 6e 20 66 61         return fa
14ee0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
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 63 6f 6e 74 69 6e 75 65          continue
14f10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14f30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
14f60 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  Log = (bool)valu
14f70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
14f80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fa0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14fb0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
14fc0 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29  rg, "noNetFx20")
14fd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14fe0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14ff0 20 20 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 62 6f 6f 6c 3f 20            bool? 
15010 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
15020 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
15050 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15070 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
150a0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
150b0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
150f0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
15100 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
15110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15130 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
15140 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
15150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
15180 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
15190 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151b0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
151c0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
151d0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
151e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15200 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
15210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15230 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
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 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
15270 3b 0d 0a 0d 0a 20 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
152c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
152e0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
152f0 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  Fx20 = (bool)val
15300 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15330 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
15340 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
15350 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 33 35 22  Arg, "noNetFx35"
15360 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
15370 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15380 20 20 20 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 62 6f 6f 6c 3f             bool?
153a0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
153b0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
153e0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15430 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
15440 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
15480 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
15490 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
154c0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
154d0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
154e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
15510 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
15520 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15540 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
15550 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
15560 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
155a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
155d0 0a 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 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
15600 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
15630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
15670 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
15680 74 46 78 33 35 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx35 = (bool)va
15690 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
156b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
156c0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
156d0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
156e0 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 30  wArg, "noNetFx40
156f0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15720 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
15730 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
15740 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
15750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15770 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
15780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15790 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157c0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
157d0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
157e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
15810 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
15820 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
15830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15850 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
15860 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
158a0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
158b0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
158c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158d0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
158e0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
158f0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15920 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
15930 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
15960 0d 0a 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 20 72 65 74 75 72 6e 20 66 61 6c        return fal
15990 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
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 63 6f 6e 74 69 6e 75 65 3b         continue;
159c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
159e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15a00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
15a10 65 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76  etFx40 = (bool)v
15a20 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15a50 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
15a60 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
15a70 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34  ewArg, "noNetFx4
15a80 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  5"))..          
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15aa0 0a 20 20 20 20 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 62 6f 6f               boo
15ac0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
15ad0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
15ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15b00 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
15b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b50 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
15b60 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
15b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
15ba0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
15bb0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15be0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
15bf0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
15c30 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
15c40 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c60 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
15c70 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
15c80 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cb0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
15cc0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
15cf0 29 0d 0a 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 20 72 65 74 75 72 6e 20 66 61         return fa
15d20 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
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 63 6f 6e 74 69 6e 75 65          continue
15d50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15d70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
15da0 4e 65 74 46 78 34 35 20 3d 20 28 62 6f 6f 6c 29  NetFx45 = (bool)
15db0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15de0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
15df0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
15e00 6e 65 77 41 72 67 2c 20 22 6e 6f 52 75 6e 74 69  newArg, "noRunti
15e10 6d 65 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20  meVersion"))..  
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
15e60 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
15e70 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
15ea0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ec0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ee0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
15ef0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
15f00 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
15f30 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
15f40 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
15f50 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
15f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
15f80 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
15f90 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
15fc0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
15fd0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
15fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16000 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
16010 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
16020 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16040 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16050 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16080 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 20 20 20 20 20 20 20 72                 r
160b0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
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 20 20 20 20 20                  
160e0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
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 7d 0d 0a 0d 0a 20 20 20 20         }....    
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16120 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
16130 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56  ation.noRuntimeV
16140 65 72 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76  ersion = (bool)v
16150 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
16160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16180 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
16190 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
161a0 65 77 41 72 67 2c 20 22 6e 6f 54 72 61 63 65 22  ewArg, "noTrace"
161b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
161c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
161f0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
16200 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
16210 20 20 20 20 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 69 66 20 28              if (
16230 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16250 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
16280 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
16290 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162c0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
162d0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
162e0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16310 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
16320 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
16360 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
16370 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16390 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
163a0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
163b0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
163c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
163f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
16420 0a 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 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
16450 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
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 7d 0d 0a               }..
164a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
164c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72  nfiguration.noTr
164d0 61 63 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ace = (bool)valu
164e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
164f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
16500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16510 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
16520 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
16530 72 67 2c 20 22 6e 6f 56 73 32 30 30 35 22 29 29  rg, "noVs2005"))
16540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16550 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16570 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
16580 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
16590 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
165c0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
16610 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
16620 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
16660 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
16670 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
16680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16690 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
166a0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
166b0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
166e0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
166f0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
16700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16720 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
16730 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
16740 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
16770 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
16780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
167b0 20 20 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
167e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16820 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16840 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
16850 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
16860 30 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  05 = (bool)value
16870 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16880 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168a0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
168b0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
168c0 67 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29 0d  g, "noVs2008")).
168d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
168e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
16910 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
16920 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16940 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
16950 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16970 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
169a0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
169b0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
169f0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
16a00 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
16a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16a30 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
16a40 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
16a70 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
16a80 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
16a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ab0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
16ac0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
16ad0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16b00 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
16b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b30 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
16b40 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
16b70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bd0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
16be0 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30  guration.noVs200
16bf0 38 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  8 = (bool)value;
16c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16c10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c30 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
16c40 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
16c50 2c 20 22 6e 6f 56 73 32 30 31 30 22 29 29 0d 0a  , "noVs2010"))..
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c90 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
16ca0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
16cb0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
16ce0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
16d30 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
16d40 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d70 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
16d80 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
16d90 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16db0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16dc0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
16dd0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
16e00 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
16e10 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e40 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
16e50 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
16e60 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
16e90 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
16f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f60 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
16f70 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30  uration.noVs2010
16f80 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
16f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16fa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fc0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
16fd0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
16fe0 20 22 6e 6f 56 73 32 30 31 32 22 29 29 0d 0a 20   "noVs2012")).. 
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17000 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
17030 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
17040 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
17050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17060 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
17070 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
170c0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
170d0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
17100 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
17110 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
17120 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
17130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17140 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17150 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
17160 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17180 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
17190 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
171a0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171d0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
171e0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
171f0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17210 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17220 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17250 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
17290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172b0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
172c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
17300 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20  ration.noVs2012 
17310 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17330 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17350 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
17360 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
17370 22 6e 6f 56 73 32 30 31 33 22 29 29 0d 0a 20 20  "noVs2013"))..  
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17390 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173b0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
173c0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
173d0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173f0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
17400 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17440 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
17450 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
17460 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
17470 20 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 20 54 72                Tr
17490 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
174a0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
174b0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
174c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
174e0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
174f0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
17500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17510 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
17520 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
17530 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17560 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
17570 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
17580 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
175b0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
175e0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 72                 r
17610 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
17620 20 20 20 20 20 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17660 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17680 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
17690 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 33 20 3d  ation.noVs2013 =
176a0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
176d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176e0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
176f0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
17700 70 65 72 55 73 65 72 22 29 29 0d 0a 20 20 20 20  perUser"))..    
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17720 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17740 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
17750 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
17760 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
17790 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177d0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
177e0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
177f0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
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 54 72 61 63              Trac
17820 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
17830 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
17840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17860 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
17870 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
17880 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178a0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
178b0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
178c0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178f0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
17900 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
17910 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17930 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17940 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17960 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17970 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
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 72 65 74               ret
179a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
179d0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a10 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
17a20 69 6f 6e 2e 70 65 72 55 73 65 72 20 3d 20 28 62  ion.perUser = (b
17a30 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17a70 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
17a80 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 72 65 67  ion(newArg, "reg
17a90 69 73 74 72 79 56 65 72 73 69 6f 6e 22 29 29 0d  istryVersion")).
17aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ab0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
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 63 6f 6e 66 69 67 75 72          configur
17ae0 61 74 69 6f 6e 2e 72 65 67 69 73 74 72 79 56 65  ation.registryVe
17af0 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20  rsion = text;.. 
17b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
17b40 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
17b50 73 74 72 69 63 74 22 29 29 0d 0a 20 20 20 20 20  strict"))..     
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b90 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
17ba0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
17bb0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
17be0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
17c30 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
17c40 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
17c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c60 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
17c70 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
17c80 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
17c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cb0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
17cc0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
17cd0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cf0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
17d00 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
17d10 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
17d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
17d40 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
17d50 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
17d60 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
17d90 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
17dc0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 20 72 65 74 75              retu
17df0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17e20 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e80 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c       // NOTE: Al
17e90 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  low the command 
17ea0 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20 74  line arguments t
17eb0 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o..             
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17ed0 2f 20 20 20 20 20 20 20 6f 76 65 72 72 69 64 65  /       override
17ee0 20 74 68 65 20 22 73 74 72 69 63 74 6e 65 73 73   the "strictness
17ef0 22 20 73 65 74 74 69 6e 67 0d 0a 20 20 20 20 20  " setting..     
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f10 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
17f20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20  provided by our 
17f30 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20  caller...       
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f50 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f70 20 20 20 20 20 73 74 72 69 63 74 20 3d 20 28 62       strict = (b
17f80 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fa0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17fc0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
17fd0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 68 72  ion(newArg, "thr
17fe0 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 29 29 0d 0a  owOnMissing"))..
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18000 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
18030 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
18040 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
18070 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18090 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180b0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
180c0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
180d0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
18110 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
18120 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18150 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
18160 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
18190 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
181a0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
181e0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
181f0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
18220 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18280 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
18290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
18300 75 72 61 74 69 6f 6e 2e 74 68 72 6f 77 4f 6e 4d  uration.throwOnM
18310 69 73 73 69 6e 67 20 3d 20 28 62 6f 6f 6c 29 76  issing = (bool)v
18320 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18350 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
18360 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
18370 65 77 41 72 67 2c 20 22 74 72 61 63 65 46 6f 72  ewArg, "traceFor
18380 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20  mat"))..        
18390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
183c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
183d0 63 65 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b  ceFormat = text;
183e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
18400 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d  aceOps.TraceForm
18410 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  at = configurati
18420 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d  on.traceFormat;.
18430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18440 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
18470 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
18480 20 22 74 72 61 63 65 50 72 69 6f 72 69 74 79 22   "tracePriority"
18490 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
184a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184c0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
184d0 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45  t value = ParseE
184e0 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72 61        typeof(Tra
18510 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78  cePriority), tex
18520 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  t, true);....   
18530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18540 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
18550 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
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 7b 0d 0a 20 20 20 20           {..    
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18590 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
185a0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
185b0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
185c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
185f0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
18600 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
18630 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
18640 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
18670 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65  nvalid {0} value
18680 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
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 20 20 20 20 20 46 6f 72               For
186b0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
186c0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
186d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
18700 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18720 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
18730 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18760 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18780 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
18790 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
187c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187d0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
187e0 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d  .tracePriority =
187f0 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29   (TracePriority)
18800 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
18830 63 65 50 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e  cePriority = con
18840 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65  figuration.trace
18850 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
18890 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
188a0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 65 72 62  on(newArg, "verb
188b0 6f 73 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ose"))..        
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
188f0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
18900 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
18910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
18940 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
18990 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
189a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189c0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
189d0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
189e0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a10 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
18a20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
18a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
18a60 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
18a70 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {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 46 6f 72 44              ForD
18aa0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
18ab0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
18ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
18af0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
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 69 66 20 28 73 74 72 69          if (stri
18b20 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
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 72 65 74 75 72 6e 20           return 
18b50 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b70 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
18b80 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
18bd0 76 65 72 62 6f 73 65 20 3d 20 28 62 6f 6f 6c 29  verbose = (bool)
18be0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c00 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18c10 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
18c20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
18c30 6e 65 77 41 72 67 2c 20 22 76 73 56 65 72 73 69  newArg, "vsVersi
18c40 6f 6e 53 75 66 66 69 78 22 29 29 0d 0a 20 20 20  onSuffix"))..   
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
18c90 6e 2e 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  n.vsVersionSuffi
18ca0 78 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  x = text;..     
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
18ce0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
18cf0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74  on(newArg, "what
18d00 49 66 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  If"))..         
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
18d40 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
18d50 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
18d60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18d80 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
18d90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dd0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
18de0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
18df0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
18e20 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
18e30 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
18e70 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
18eb0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
18ec0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ee0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
18ef0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
18f00 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
18f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
18f40 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
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 69 66 20 28 73 74 72 69 63         if (stric
18f70 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
18fa0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fc0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
18fd0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 7d 0d 0a 0d 0a 20 20 20 20 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77   configuration.w
19020 68 61 74 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61  hatIf = (bool)va
19030 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19060 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
19070 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
19080 77 41 72 67 2c 20 22 77 6f 77 36 34 22 29 29 0d  wArg, "wow64")).
19090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
190a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
190d0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
190e0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
19110 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19130 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
19160 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
19170 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
191b0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
191c0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
191f0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
19200 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
19230 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
19240 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
19250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
19280 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
19290 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
192c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
192d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19320 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
19330 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19370 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19390 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
193a0 67 75 72 61 74 69 6f 6e 2e 77 6f 77 36 34 20 3d  guration.wow64 =
193b0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
19430 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
19440 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
19480 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
19490 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
194c0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
194d0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65       "Unsupporte
19500 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  d command line o
19510 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ption: {0}",..  
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
19540 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20  rDisplay(arg)), 
19550 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
19560 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19580 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
195b0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
195e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
19610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19620 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19630 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
19640 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
19650 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
19680 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
19690 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
196c0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
196d0 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74  ack, e, traceCat
196e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
19700 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74  rror = "Failed t
19710 6f 20 6d 6f 64 69 66 79 20 63 6f 6e 66 69 67 75  o modify configu
19720 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ration.";..     
19730 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
19740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19750 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
19760 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
19770 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
19780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
197a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
197b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
197c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
197d0 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
197e0 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
197f0 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
19800 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
19810 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
19820 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
19830 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67      string[] arg
19840 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
19850 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f      Configuratio
19860 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
19870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19880 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a    bool strict,..
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198a0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
198b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
198c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
198d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
198e0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
198f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19910 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
19920 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19950 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
19960 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66   = "Invalid conf
19970 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20  iguration.";..  
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19990 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
199a0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
199b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
199c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199d0 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
199e0 62 6c 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  bly = configurat
199f0 69 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d  ion.assembly;...
19a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19a10 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
19a20 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19a50 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
19a60 20 3d 20 22 49 6e 76 61 6c 69 64 20 61 73 73 65   = "Invalid asse
19a70 6d 62 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20  mbly.";..       
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ab0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19ad0 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
19ae0 6e 6f 54 72 61 63 65 29 0d 0a 20 20 20 20 20 20  noTrace)..      
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19b10 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
19b20 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f  nfiguration.noLo
19b30 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  g &&..          
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 20 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f    String.IsNullO
19b60 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61  rEmpty(configura
19b70 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  tion.logFileName
19b80 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
19b90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
19be0 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61  TE: Use the defa
19bf0 75 6c 74 20 6c 6f 67 20 66 69 6c 65 20 6e 61 6d  ult log file nam
19c00 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c40 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f  configuration.lo
19c50 67 46 69 6c 65 4e 61 6d 65 20 3d 20 47 65 74 4c  gFileName = GetL
19c60 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20  ogFileName(..   
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74 72               "tr
19c90 61 63 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ace");..        
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
19cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
19d30 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20  on.noConsole).. 
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d90 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
19da0 6e 20 76 65 72 62 6f 73 65 20 6d 6f 64 65 2c 20  n verbose mode, 
19db0 64 65 62 75 67 20 6f 75 74 70 75 74 20 28 74 68  debug output (th
19dc0 61 74 20 6d 65 65 74 73 0d 0a 20 20 20 20 20 20  at meets..      
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19de0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
19df0 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72  he configured pr
19e00 69 6f 72 69 74 79 20 63 72 69 74 65 72 69 61 29  iority criteria)
19e10 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..      
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e30 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
19e40 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20  isplayed to the 
19e50 63 6f 6e 73 6f 6c 65 3b 20 6f 74 68 65 72 77 69  console; otherwi
19e60 73 65 2c 20 74 72 61 63 65 0d 0a 20 20 20 20 20  se, trace..     
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 2f 2f 20 20 20 20 20 20 20         //       
19e90 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65 65  output (that mee
19ea0 74 73 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65  ts the configure
19eb0 64 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20  d priority..    
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ed0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19ee0 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20   criteria) will 
19ef0 62 65 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20  be displayed to 
19f00 74 68 65 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20  the console...  
19f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
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 20 20 69 66 20 28 63 6f            if (co
19f50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
19f60 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g)..            
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fa0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fc0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
19fd0 41 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20  Add the console 
19fe0 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74  trace listener t
19ff0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1a020 6c 69 73 74 20 6f 66 20 74 72 61 63 65 20 6c 69  list of trace li
1a030 73 74 65 6e 65 72 73 20 6d 61 69 6e 74 61 69 6e  steners maintain
1a040 65 64 20 62 79 0d 0a 20 20 20 20 20 20 20 20 20  ed by..         
1a050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a060 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1a070 74 68 65 20 54 72 61 63 65 4f 70 73 20 63 6c 61  the TraceOps cla
1a080 73 73 20 28 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65  ss (i.e. only me
1a090 73 73 61 67 65 73 0d 0a 20 20 20 20 20 20 20 20  ssages..        
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0b0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1a0c0 20 74 68 61 74 20 6d 65 65 74 20 74 68 65 20 64   that meet the d
1a0d0 65 62 75 67 20 70 72 69 6f 72 69 74 79 20 77 69  ebug priority wi
1a0e0 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20  ll be..         
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a100 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1a110 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73  seen on the cons
1a120 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  ole)...         
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a140 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a160 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1a170 4f 70 73 2e 53 65 74 75 70 44 65 62 75 67 4c 69  Ops.SetupDebugLi
1a180 73 74 65 6e 65 72 73 28 29 3b 0d 0a 20 20 20 20  steners();..    
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1c0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a200 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
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 20 20 20 20                  
1a230 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65  // NOTE: Add the
1a240 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c   console trace l
1a250 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a  istener to the..
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a280 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66  //       list of
1a290 20 62 75 69 6c 74 2d 69 6e 20 74 72 61 63 65 20   built-in trace 
1a2a0 6c 69 73 74 65 6e 65 72 73 20 28 69 2e 65 2e 0d  listeners (i.e..
1a2b0 0a 20 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 20 20                  
1a2d0 20 2f 2f 20 20 20 20 20 20 20 6f 6e 6c 79 20 6d   //       only m
1a2e0 65 73 73 61 67 65 73 20 74 68 61 74 20 6d 65 65  essages that mee
1a2f0 74 20 74 68 65 20 74 72 61 63 65 0d 0a 20 20 20  t the trace..   
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a320 20 20 20 20 20 20 70 72 69 6f 72 69 74 79 20 77        priority w
1a330 69 6c 6c 20 62 65 20 73 65 65 6e 20 6f 6e 20 74  ill be seen on t
1a340 68 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20  he console)...  
1a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72    Trace.Listener
1a3a0 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c  s.Add(new Consol
1a3b0 65 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29  eTraceListener()
1a3c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1a3f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1a450 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a460 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1a470 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1a480 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20  Log &&..        
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 20 20 20 20 21 53 74 72 69 6e 67 2e 49 73 4e 75      !String.IsNu
1a4b0 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67  llOrEmpty(config
1a4c0 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
1a4d0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1a4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1a510 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64  ace.Listeners.Ad
1a520 64 28 6e 65 77 20 54 65 78 74 57 72 69 74 65 72  d(new TextWriter
1a530 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 0d 0a  TraceListener(..
1a540 20 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f  configuration.lo
1a570 67 46 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a 0d 0a  gFileName));....
1a580 20 20 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 2f 2f 0d 0a              //..
1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1a5c0 4f 54 45 3a 20 54 65 63 68 6e 69 63 61 6c 6c 79  OTE: Technically
1a5d0 2c 20 77 65 20 63 72 65 61 74 65 64 20 74 68 65  , we created the
1a5e0 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20   log file...    
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 20 20 20 20 20 20 20 2f 2f 0d 0a 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 20 20 66 69 6c 65 73 43 72 65          filesCre
1a630 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ated++;..       
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a660 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1a690 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1a6a0 3a 20 44 75 6d 70 20 74 68 65 20 63 6f 6e 66 69  : Dump the confi
1a6b0 67 75 72 61 74 69 6f 6e 20 6e 6f 77 20 69 6e 20  guration now in 
1a6c0 63 61 73 65 20 77 65 20 6e 65 65 64 20 74 6f 0d  case we need to.
1a6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a6e0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 72       //       tr
1a6f0 6f 75 62 6c 65 73 68 6f 6f 74 20 61 6e 79 20 69  oubleshoot any i
1a700 73 73 75 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  ssues...        
1a710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a730 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
1a740 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72  ation.debugPrior
1a750 69 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f  ity <= TracePrio
1a760 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20  rity.Medium)..  
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a780 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1a790 69 6f 6e 2e 44 75 6d 70 28 64 65 62 75 67 43 61  ion.Dump(debugCa
1a7a0 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20  llback);....    
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7c0 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
1a7d0 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  n.tracePriority 
1a7e0 3c 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  <= TracePriority
1a7f0 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20  .Medium)..      
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a810 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1a820 44 75 6d 70 28 74 72 61 63 65 43 61 6c 6c 62 61  Dump(traceCallba
1a830 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ck);....        
1a840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a860 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f      // NOTE: Sho
1a870 77 20 77 68 65 72 65 20 77 65 20 61 72 65 20 72  w where we are r
1a880 75 6e 6e 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20  unning from and 
1a890 68 6f 77 20 77 65 20 77 65 72 65 0d 0a 20 20 20  how we were..   
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8b0 20 2f 2f 20 20 20 20 20 20 20 69 6e 76 6f 6b 65   //       invoke
1a8c0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
1a8d0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8f0 73 74 72 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20  string location 
1a900 3d 20 61 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74  = assembly.Locat
1a910 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ion;....        
1a920 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1a930 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1a940 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1a950 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20  .MediumLow,..   
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a970 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1a980 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1a990 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1a9a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a9b0 20 20 20 20 20 20 20 20 20 20 20 22 52 75 6e 6e             "Runn
1a9c0 69 6e 67 20 65 78 65 63 75 74 61 62 6c 65 20 69  ing executable i
1a9d0 73 3a 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70  s: {0}", ForDisp
1a9e0 6c 61 79 28 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d  lay(location)),.
1a9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aa00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1aa10 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1aa40 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1aa50 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d  rity.MediumLow,.
1aa60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aa70 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1aa80 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1aa90 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1aaa0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1aac0 4f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64  Original command
1aad0 20 6c 69 6e 65 20 69 73 3a 20 7b 30 7d 22 2c 0d   line is: {0}",.
1aae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aaf0 20 20 20 20 20 20 20 20 20 45 6e 76 69 72 6f 6e           Environ
1ab00 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65  ment.CommandLine
1ab10 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
1ab20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1ab30 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1ab40 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1ab50 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1ab60 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20  ediumLow,..     
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1ab90 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1aba0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1abb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1abc0 20 20 20 20 20 20 20 20 20 22 52 75 6e 6e 69 6e           "Runnin
1abd0 67 20 70 72 6f 63 65 73 73 20 69 73 20 7b 30 7d  g process is {0}
1abe0 2e 22 2c 20 49 73 36 34 42 69 74 50 72 6f 63 65  .", Is64BitProce
1abf0 73 73 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ss() ?..        
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac10 20 20 20 20 22 36 34 2d 62 69 74 22 20 3a 20 22      "64-bit" : "
1ac20 33 32 2d 62 69 74 22 29 2c 20 74 72 61 63 65 43  32-bit"), traceC
1ac30 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac50 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
1ac60 69 6f 6e 2e 77 68 61 74 49 66 29 0d 0a 20 20 20  ion.whatIf)..   
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acb0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1acc0 20 49 66 20 74 68 65 20 64 65 62 75 67 67 65 72   If the debugger
1acd0 20 69 73 20 61 74 74 61 63 68 65 64 20 61 6e 64   is attached and
1ace0 20 57 68 61 74 2d 49 66 20 6d 6f 64 65 0d 0a 20   What-If mode.. 
1acf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad00 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1ad10 69 73 20 5b 6e 6f 77 5d 20 64 69 73 61 62 6c 65  is [now] disable
1ad20 64 2c 20 69 73 73 75 65 20 61 20 77 61 72 6e 69  d, issue a warni
1ad30 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1ad50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ad60 20 20 20 20 20 20 20 20 20 69 66 20 28 44 65 62           if (Deb
1ad70 75 67 67 65 72 2e 49 73 41 74 74 61 63 68 65 64  ugger.IsAttached
1ad80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1ada0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1adb0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1adc0 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
1add0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1ae00 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
1ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae30 22 46 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62  "Forced to disab
1ae40 6c 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d  le \"what-if\" m
1ae50 6f 64 65 20 77 69 74 68 20 22 20 2b 0d 0a 20 20  ode with " +..  
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64                "d
1ae80 65 62 75 67 67 65 72 20 61 74 74 61 63 68 65 64  ebugger attached
1ae90 2e 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  .", traceCategor
1aea0 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
1aeb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aed0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1aee0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af00 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1af10 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1af20 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1af30 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af50 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1af60 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1af70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1af90 6f 20 61 63 74 75 61 6c 20 63 68 61 6e 67 65 73  o actual changes
1afa0 20 77 69 6c 6c 20 62 65 20 6d 61 64 65 20 74 6f   will be made to
1afb0 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20 20 20   this " +..     
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 20 20 20 20 20 20 22 73 79 73 74 65 6d 20 62         "system b
1afe0 65 63 61 75 73 65 20 5c 22 77 68 61 74 2d 69 66  ecause \"what-if
1aff0 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c  \" mode is enabl
1b000 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ed.",..         
1b010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b020 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1b030 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1b040 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1b070 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1b080 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64  : If the command
1b090 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74 20 62 65   line has not be
1b0a0 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20 20 20  en manually..   
1b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0c0 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 66 69 72   //       confir
1b0d0 6d 65 64 20 28 69 2e 65 2e 20 76 69 61 20 74 68  med (i.e. via th
1b0e0 65 20 65 78 70 6c 69 63 69 74 20 63 6f 6d 6d 61  e explicit comma
1b0f0 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20  nd line..       
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1b110 20 20 20 20 20 20 6f 70 74 69 6f 6e 29 2c 20 74        option), t
1b120 68 65 6e 20 73 74 6f 70 20 70 72 6f 63 65 73 73  hen stop process
1b130 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20 65 6e 66  ing now.  We enf
1b140 6f 72 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  orce..          
1b150 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b160 20 20 20 74 68 69 73 20 72 75 6c 65 20 73 6f 20     this rule so 
1b170 74 68 61 74 20 73 69 6d 70 6c 79 20 64 6f 75 62  that simply doub
1b180 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74 68 65 0d  le-clicking the.
1b190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b1a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
1b1b0 65 63 75 74 61 62 6c 65 20 77 69 6c 6c 20 6e 6f  ecutable will no
1b1c0 74 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 79 20  t result in any 
1b1d0 63 68 61 6e 67 65 73 20 62 65 69 6e 67 0d 0a 20  changes being.. 
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 61 64 65     //       made
1b200 20 74 6f 20 74 68 65 20 73 79 73 74 65 6d 2e 0d   to the system..
1b210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b220 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1b230 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1b240 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
1b250 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20 20 20 20  confirm)..      
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1b270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b280 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1b290 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75   "Cannot continu
1b2a0 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66 69 72 6d  e, the \"confirm
1b2b0 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20 22 20 2b  \" option is " +
1b2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
1b2e0 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d  ot enabled.";...
1b2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b300 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b310 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1b320 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1b330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b340 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
1b350 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b360 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1b370 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
1b380 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
1b390 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1b3c0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1b3d0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
1b3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b3f0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1b400 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1b410 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43  lback, e, traceC
1b420 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b440 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64   error = "Failed
1b450 20 74 6f 20 70 72 6f 63 65 73 73 20 63 6f 6e 66   to process conf
1b460 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20  iguration.";..  
1b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b480 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b490 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1b4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1b4b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1b4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b500 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1b510 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
1b520 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
1b530 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
1b540 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1b550 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65   static bool Che
1b560 63 6b 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  ckRuntimeVersion
1b570 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1b580 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
1b590 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
1b5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b5b0 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20   bool strict,.. 
1b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b5d0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
1b5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b5f0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
1b600 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b610 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1b620 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b640 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
1b650 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1b670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b680 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1b690 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69  = "Invalid confi
1b6a0 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20  guration.";..   
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1b6d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b6e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b700 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1b710 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1b720 3a 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f  : What version o
1b730 66 20 74 68 65 20 72 75 6e 74 69 6d 65 20 77 61  f the runtime wa
1b740 73 20 74 68 65 20 63 6f 72 65 20 28 70 72 69 6d  s the core (prim
1b750 61 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ary)..          
1b760 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b770 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70     assembly comp
1b780 69 6c 65 64 20 61 67 61 69 6e 73 74 20 28 65 2e  iled against (e.
1b790 67 2e 20 22 76 32 2e 30 2e 35 30 37 32 37 22 20  g. "v2.0.50727" 
1b7a0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1b7b0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1b7c0 20 22 76 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d   "v4.0.30319")..
1b7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b7e0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1b800 69 6e 67 20 63 6f 72 65 49 6d 61 67 65 52 75 6e  ing coreImageRun
1b810 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 47 65  timeVersion = Ge
1b820 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  tImageRuntimeVer
1b830 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
1b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b850 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72  onfiguration.cor
1b860 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  eFileName);.... 
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b880 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1b890 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1b8a0 54 45 3a 20 57 65 20 61 6c 6c 6f 77 20 74 68 65  TE: We allow the
1b8b0 20 61 63 74 75 61 6c 20 69 6d 61 67 65 20 72 75   actual image ru
1b8c0 6e 74 69 6d 65 20 63 68 65 63 6b 69 6e 67 20 74  ntime checking t
1b8d0 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  o be..          
1b8e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b8f0 20 20 20 62 79 70 61 73 73 65 64 20 76 69 61 20     bypassed via 
1b900 74 68 65 20 22 2d 6e 6f 52 75 6e 74 69 6d 65 56  the "-noRuntimeV
1b910 65 72 73 69 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20  ersion" command 
1b920 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20  line..          
1b930 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b940 20 20 20 6f 70 74 69 6f 6e 2e 20 20 54 68 65 20     option.  The 
1b950 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
1b960 69 6f 6e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  ion is intended 
1b970 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  for..           
1b980 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1b990 20 20 65 78 70 65 72 74 20 75 73 65 20 6f 6e 6c    expert use onl
1b9a0 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y...            
1b9b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9d0 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
1b9e0 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  n.noRuntimeVersi
1b9f0 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
1ba00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1ba30 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1ba40 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c  Priority.Medium,
1ba50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1ba70 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1ba80 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1ba90 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bab0 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
1bac0 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f  y is compiled fo
1bad0 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
1bae0 77 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20  work {0}; " +.. 
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 20 20 20 20 20 20 20 20 20 20 20 22 68 6f 77 65             "howe
1bb10 76 65 72 2c 20 69 6e 73 74 61 6c 6c 61 74 69 6f  ver, installatio
1bb20 6e 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 62  n restrictions b
1bb30 61 73 65 64 20 6f 6e 20 74 68 69 73 20 22 20 2b  ased on this " +
1bb40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
1bb60 61 63 74 20 68 61 76 65 20 62 65 65 6e 20 64 69  act have been di
1bb70 73 61 62 6c 65 64 20 76 69 61 20 74 68 65 20 63  sabled via the c
1bb80 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a  ommand line.",..
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
1bbb0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1bbc0 69 6f 6e 29 2c 20 74 72 61 63 65 43 61 74 65 67  ion), traceCateg
1bbd0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc40 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 52 65 73      // TODO: Res
1bc50 74 72 69 63 74 20 74 68 65 20 63 6f 6e 66 69 67  trict the config
1bc60 75 72 61 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e  uration based on
1bc70 20 77 68 69 63 68 20 69 6d 61 67 65 0d 0a 20 20   which image..  
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc90 20 20 2f 2f 20 20 20 20 20 20 20 72 75 6e 74 69    //       runti
1bca0 6d 65 20 76 65 72 73 69 6f 6e 73 20 28 77 68 69  me versions (whi
1bcb0 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20  ch more-or-less 
1bcc0 63 6f 72 72 65 73 70 6f 6e 64 0d 0a 20 20 20 20  correspond..    
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 74 6f 20 2e 4e 45 54  //       to .NET
1bcf0 20 46 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   Framework versi
1bd00 6f 6e 73 29 20 61 72 65 20 73 75 70 70 6f 72 74  ons) are support
1bd10 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bd30 2f 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 73  /       versions
1bd40 20 6f 66 20 56 69 73 75 61 6c 20 53 74 75 64 69   of Visual Studi
1bd50 6f 20 74 68 61 74 20 61 72 65 20 69 6e 73 74 61  o that are insta
1bd60 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  lled...         
1bd70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd90 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
1bda0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
1bdb0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1bdc0 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ion))..         
1bdd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdf0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
1be00 6e 76 61 6c 69 64 20 63 6f 72 65 20 66 69 6c 65  nvalid core file
1be10 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76   image runtime v
1be20 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
1be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1be50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1be60 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1be70 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1be80 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61   if (String.Equa
1be90 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ls(..           
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1beb0 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
1bec0 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 32 49  eVersion, CLRv2I
1bed0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1bee0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
1bf10 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf60 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1bf70 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e   For the CLR v2.
1bf80 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20  0 runtime, make 
1bf90 73 75 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d  sure we disable.
1bfa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bfb0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1bfc0 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f    any attempt to
1bfd0 20 75 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e   use it for thin
1bfe0 67 73 20 74 68 61 74 20 72 65 71 75 69 72 65 0d  gs that require.
1bff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c000 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1c010 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f    an assembly co
1c020 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43  mpiled for the C
1c030 4c 52 20 76 34 2e 30 2e 20 20 49 74 20 69 73 0d  LR v4.0.  It is.
1c040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c050 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1c060 20 20 75 6e 63 65 72 74 61 69 6e 20 69 66 20 74    uncertain if t
1c070 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20  his is actually 
1c080 61 20 70 72 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20  a problem in..  
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0a0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70        //       p
1c0b0 72 61 63 74 69 63 65 20 61 73 20 74 68 65 20 43  ractice as the C
1c0c0 4c 52 20 76 34 2e 30 20 63 61 6e 20 6c 6f 61 64  LR v4.0 can load
1c0d0 20 61 6e 64 20 75 73 65 20 61 6e 0d 0a 20 20 20   and use an..   
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73       //       as
1c100 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
1c110 77 69 74 68 20 74 68 65 20 43 4c 52 20 76 32 2e  with the CLR v2.
1c120 30 3b 20 68 6f 77 65 76 65 72 2c 0d 0a 20 20 20  0; however,..   
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c140 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 69       //       si
1c150 6e 63 65 20 74 68 69 73 20 70 72 6f 6a 65 63 74  nce this project
1c160 20 6f 66 66 65 72 73 20 62 6f 74 68 20 63 6f 6e   offers both con
1c170 66 69 67 75 72 61 74 69 6f 6e 73 2c 0d 0a 20 20  figurations,..  
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c190 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77        //       w
1c1a0 65 20 63 75 72 72 65 6e 74 6c 79 20 64 69 73 61  e currently disa
1c1b0 6c 6c 6f 77 20 74 68 69 73 20 6d 69 73 6d 61 74  llow this mismat
1c1c0 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ch...           
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1c1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c1f0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1c200 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30  ration.noNetFx40
1c210 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c230 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1c240 6e 6f 4e 65 74 46 78 34 35 20 3d 20 74 72 75 65  noNetFx45 = true
1c250 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c260 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c270 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
1c280 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  0 = true;..     
1c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2a0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1c2b0 2e 6e 6f 56 73 32 30 31 32 20 3d 20 74 72 75 65  .noVs2012 = true
1c2c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c2d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c2e0 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
1c2f0 33 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  3 = true;....   
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c310 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1c320 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1c330 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1c340 2c 0d 0a 20 20 20 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 20 64                 d
1c360 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1c370 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1c380 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
1c3b0 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66  ly is compiled f
1c3c0 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  or the .NET Fram
1c3d0 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a  ework {0}, " +..
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70              "sup
1c400 70 6f 72 74 20 66 6f 72 20 2e 4e 45 54 20 46 72  port for .NET Fr
1c410 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e  amework {1} is n
1c420 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a  ow disabled.",..
1c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c440 20 20 20 20 20 20 20 20 20 20 20 20 43 4c 52 76              CLRv
1c450 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  2ImageRuntimeVer
1c460 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65  sion, CLRv4Image
1c470 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
1c480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c4a0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c4d0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1c4e0 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73  f (String.Equals
1c4f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1c510 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1c520 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61  ersion, CLRv4Ima
1c530 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1c540 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1c560 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
1c570 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20  Ordinal))..     
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1c590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c5a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5c0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
1c5d0 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20  or the CLR v4.0 
1c5e0 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  runtime, make su
1c5f0 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20  re we disable.. 
1c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c610 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1c620 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75  any attempt to u
1c630 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73  se it for things
1c640 20 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20   that require.. 
1c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c660 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1c670 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70  an assembly comp
1c680 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52  iled for the CLR
1c690 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20   v2.0...        
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1c6d0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
1c6e0 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  x20 = true;..   
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c700 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1c710 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 74  on.noNetFx35 = t
1c720 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1c740 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
1c750 32 30 30 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20  2005 = true;..  
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c770 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1c780 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 74  ion.noVs2008 = t
1c790 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7b0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1c7c0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1c7d0 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
1c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7f0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1c800 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1c810 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1c820 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1c830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c840 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73      "Assembly is
1c850 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
1c860 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1c870 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {0}, " +..     
1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c890 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74 20         "support 
1c8a0 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  for .NET Framewo
1c8b0 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69  rk {1} is now di
1c8c0 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20  sabled.",..     
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8e0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1c8f0 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  y(CLRv4ImageRunt
1c900 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  imeVersion),..  
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c920 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1c930 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52  play(CLRv2ImageR
1c940 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c  untimeVersion)),
1c950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c970 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c9a0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1c9e0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
1c9f0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca10 20 20 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20     "unsupported 
1ca20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20  core file image 
1ca30 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20  runtime version 
1ca40 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca60 20 22 7b 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b   "{0}, must be {
1ca70 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20  1} or {2}",..   
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca90 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1caa0 6c 61 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e  lay(coreImageRun
1cab0 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  timeVersion),.. 
1cac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cad0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1cae0 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65  splay(CLRv2Image
1caf0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
1cb00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1cb20 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d  rDisplay(CLRv4Im
1cb30 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1cb40 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n));....        
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1cba0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
1cbb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
1cbd0 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1cbe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cbf0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1cc00 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1cc10 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1cc20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
1cc30 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
1cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc50 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1cc60 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c  raceCallback, e,
1cc70 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1cc80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cc90 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1cca0 22 46 61 69 6c 65 64 20 74 6f 20 63 68 65 63 6b  "Failed to check
1ccb0 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76   image runtime v
1ccc0 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ersion.";..     
1ccd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1cd00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1cd10 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
1cd20 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1cd30 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1cd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd70 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1cd80 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
1cd90 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
1cda0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1cdb0 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28  c bool HasFlags(
1cdc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cdd0 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68    InstallFlags h
1cde0 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  asFlags,..      
1cdf0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61            bool a
1ce00 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..            
1ce10 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
1ce20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ce30 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a        if (all)..
1ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce50 20 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73      return ((ins
1ce60 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46  tallFlags & hasF
1ce70 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67  lags) == hasFlag
1ce80 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
1ce90 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ceb0 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46  eturn ((installF
1cec0 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
1ced0 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73   != InstallFlags
1cee0 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20  .None);..       
1cef0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1cf00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1cf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1cf50 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1cf60 62 6f 6f 6c 20 49 73 4c 69 6e 71 53 75 70 70 6f  bool IsLinqSuppo
1cf70 72 74 65 64 28 29 0d 0a 20 20 20 20 20 20 20 20  rted()..        
1cf80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1cf90 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1cfa0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1cfb0 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a  TE: Return non-z
1cfc0 65 72 6f 20 69 66 20 74 68 65 20 4c 49 4e 51 20  ero if the LINQ 
1cfd0 61 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64 20  assembly should 
1cfe0 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
1cff0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f      //       pro
1d000 63 65 73 73 65 64 20 64 75 72 69 6e 67 20 74 68  cessed during th
1d010 65 20 69 6e 73 74 61 6c 6c 2e 20 20 49 66 20 74  e install.  If t
1d020 68 65 20 74 61 72 67 65 74 20 69 73 0d 0a 20 20  he target is..  
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d040 20 20 20 20 20 20 20 56 69 73 75 61 6c 20 53 74         Visual St
1d050 75 64 69 6f 20 32 30 30 35 2c 20 74 68 69 73 20  udio 2005, this 
1d060 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 7a 65  should return ze
1d070 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro...           
1d080 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1d090 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1d0a0 21 6e 6f 4e 65 74 46 78 33 35 20 7c 7c 20 21 6e  !noNetFx35 || !n
1d0b0 6f 4e 65 74 46 78 34 30 20 7c 7c 20 21 6e 6f 4e  oNetFx40 || !noN
1d0c0 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20  etFx45;..       
1d0d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1d0e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1d0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d120 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1d130 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1d140 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20 20 20 20  void Dump(..    
1d150 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1d160 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
1d170 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20 20 20  allback..       
1d180 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1d190 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d1a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
1d1b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20  raceCallback != 
1d1c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1d1d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d1f0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d200 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d210 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d230 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1d240 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61 73  ", ForDisplay(as
1d250 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20  sembly)),..     
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d270 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d280 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d290 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d2a0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1d2b0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1d2c0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22     "LogFileName"
1d2f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67  , ForDisplay(log
1d300 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d320 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d330 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d340 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d350 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d360 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d370 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d390 20 20 20 20 20 22 44 69 72 65 63 74 6f 72 79 22       "Directory"
1d3a0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72  , ForDisplay(dir
1d3b0 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20  ectory)),..     
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3d0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d3e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d3f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d400 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1d410 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1d420 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d440 20 20 20 22 43 6f 72 65 46 69 6c 65 4e 61 6d 65     "CoreFileName
1d450 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f  ", ForDisplay(co
1d460 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  reFileName)),.. 
1d470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d480 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d490 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d4b0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d4c0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d4d0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4f0 20 20 20 20 20 20 20 22 4c 69 6e 71 46 69 6c 65         "LinqFile
1d500 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
1d510 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  y(linqFileName))
1d520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d530 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d540 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d560 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1d570 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1d580 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1d590 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d5a0 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 69             "Desi
1d5b0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 2c 20 46  gnerFileName", F
1d5c0 6f 72 44 69 73 70 6c 61 79 28 64 65 73 69 67 6e  orDisplay(design
1d5d0 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  erFileName)),.. 
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d600 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d620 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d630 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d640 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 20 20 20 20 20 20 20 22 52 65 67 69 73 74 72 79         "Registry
1d670 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73  Version", ForDis
1d680 70 6c 61 79 28 72 65 67 69 73 74 72 79 56 65 72  play(registryVer
1d690 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6b0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d6c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d6d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d6e0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d6f0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d700 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d720 20 22 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22   "ConfigVersion"
1d730 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e  , ForDisplay(con
1d740 66 69 67 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  figVersion)),.. 
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d760 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d770 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d790 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d7a0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d7b0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7d0 20 20 20 20 20 20 20 22 56 73 56 65 72 73 69 6f         "VsVersio
1d7e0 6e 53 75 66 66 69 78 22 2c 20 46 6f 72 44 69 73  nSuffix", ForDis
1d7f0 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 53 75  play(vsVersionSu
1d800 66 66 69 78 29 29 2c 0d 0a 20 20 20 20 20 20 20  ffix)),..       
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d820 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d840 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d850 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d860 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d870 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d890 20 22 44 65 62 75 67 46 6f 72 6d 61 74 22 2c 20   "DebugFormat", 
1d8a0 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67  ForDisplay(debug
1d8b0 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20  Format)),..     
1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8d0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d8e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d8f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d900 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1d910 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1d920 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d940 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74 22     "TraceFormat"
1d950 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
1d960 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  ceFormat)),..   
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d990 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d9b0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d9c0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d9d0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9f0 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61       "InstallFla
1da00 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  gs", ForDisplay(
1da10 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d  installFlags)),.
1da20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1da30 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1da40 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1da70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1da80 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1da90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1daa0 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 50           "DebugP
1dab0 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
1dac0 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f 72 69  play(debugPriori
1dad0 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1daf0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1db00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1db10 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1db20 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1db30 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1db40 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1db60 54 72 61 63 65 50 72 69 6f 72 69 74 79 22 2c 20  TracePriority", 
1db70 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65  ForDisplay(trace
1db80 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20  Priority)),..   
1db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dba0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1dbb0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1dbd0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1dbe0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1dbf0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 20 20 20 20 20 22 50 65 72 55 73 65 72 22 2c 20       "PerUser", 
1dc20 46 6f 72 44 69 73 70 6c 61 79 28 70 65 72 55 73  ForDisplay(perUs
1dc30 65 72 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  er)),..         
1dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1dc50 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1dc60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc70 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1dc80 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1dc90 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1dca0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1dcc0 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73  Install", ForDis
1dcd0 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d  play(install)),.
1dce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dcf0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1dd00 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1dd30 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1dd40 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1dd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dd60 20 20 20 20 20 20 20 20 20 22 57 6f 77 36 34 22           "Wow64"
1dd70 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 6f 77  , ForDisplay(wow
1dd80 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  64)),..         
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1dda0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1ddb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ddc0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ddd0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1dde0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1ddf0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1de10 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
1de20 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1de30 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1de40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1de50 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1de60 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1de90 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1dea0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1deb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1dec0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65             "NoDe
1ded0 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c  sktop", ForDispl
1dee0 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d  ay(noDesktop)),.
1def0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1df00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1df10 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df30 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1df40 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1df50 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1df60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1df70 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70           "NoComp
1df80 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  act", ForDisplay
1df90 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20  (noCompact)),.. 
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfb0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1dfc0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1dfe0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1dff0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1e000 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e020 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32         "NoNetFx2
1e030 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
1e040 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20  oNetFx20)),..   
1e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e060 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1e070 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1e080 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e090 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1e0a0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1e0b0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0d0 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 33 35 22       "NoNetFx35"
1e0e0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
1e0f0 65 74 46 78 33 35 29 29 2c 0d 0a 20 20 20 20 20  etFx35)),..     
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e110 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1e120 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e130 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e140 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1e150 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1e160 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e180 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20     "NoNetFx40", 
1e190 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
1e1a0 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx40)),..       
1e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1e1d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e1e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1e1f0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1e200 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1e210 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e230 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c 20 46 6f   "NoNetFx45", Fo
1e240 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
1e250 34 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  45)),..         
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e270 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1e280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e290 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1e2a0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1e2b0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1e2c0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e2e0 4e 6f 56 73 32 30 30 35 22 2c 20 46 6f 72 44 69  NoVs2005", ForDi
1e2f0 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 35 29 29  splay(noVs2005))
1e300 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1e310 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e320 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e340 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1e350 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1e360 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1e370 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1e380 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
1e390 32 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61  2008", ForDispla
1e3a0 79 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20  y(noVs2008)),.. 
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1e3d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e3f0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1e400 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1e410 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30         "NoVs2010
1e440 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1e450 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20  Vs2010)),..     
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e470 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1e480 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e490 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e4a0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1e4b0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1e4c0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4e0 20 20 20 22 4e 6f 56 73 32 30 31 32 22 2c 20 46     "NoVs2012", F
1e4f0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
1e500 31 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  12)),..         
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e520 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1e530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e540 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1e550 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1e560 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1e570 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1e580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e590 4e 6f 56 73 32 30 31 33 22 2c 20 46 6f 72 44 69  NoVs2013", ForDi
1e5a0 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 33 29 29  splay(noVs2013))
1e5b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1e5c0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e5d0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1e600 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1e610 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1e620 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1e630 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72             "NoTr
1e640 61 63 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ace", ForDisplay
1e650 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20  (noTrace)),..   
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e670 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1e680 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1e690 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e6a0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1e6b0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1e6c0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6e0 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22       "NoConsole"
1e6f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43  , ForDisplay(noC
1e700 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20  onsole)),..     
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e720 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1e730 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e740 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e750 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1e760 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1e770 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e790 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44     "NoLog", ForD
1e7a0 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d  isplay(noLog)),.
1e7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e7c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e7d0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1e800 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1e810 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1e820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e830 20 20 20 20 20 20 20 20 20 22 54 68 72 6f 77 4f           "ThrowO
1e840 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f 72 44 69  nMissing", ForDi
1e850 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73  splay(throwOnMis
1e860 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  sing)),..       
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1e890 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e8a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1e8b0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1e8c0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1e8d0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8f0 20 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69   "WhatIf", ForDi
1e900 73 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d  splay(whatIf)),.
1e910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e920 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e930 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e950 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1e960 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1e970 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1e980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e990 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 22           "Debug"
1e9a0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62  , ForDisplay(deb
1e9b0 75 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ug)),..         
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e9d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1e9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e9f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ea00 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1ea10 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1ea20 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ea40 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73  Verbose", ForDis
1ea50 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d  play(verbose)),.
1ea60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ea70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ea80 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaa0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1eab0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1eac0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1ead0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eae0 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72           "Confir
1eaf0 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  m", ForDisplay(c
1eb00 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20  onfirm)),..     
1eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1eb30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1eb40 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1eb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1eb90 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1eba0 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
1ebb0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1ebc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebe0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1ebf0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1ec00 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1ec10 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec30 22 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c  "AssemblyTitle",
1ec40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1ec60 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65  rDisplay(GetAsse
1ec70 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62  mblyTitle(assemb
1ec80 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ly))),..        
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eca0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1ecb0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ecd0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1ece0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1ecf0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
1ed20 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
1ed30 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on",..          
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed50 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74    ForDisplay(Get
1ed60 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
1ed70 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29  ation(assembly))
1ed80 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eda0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1edb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1edc0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1edd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1ede0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1edf0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1ee00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ee10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee50 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1ee60 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
1ee70 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
1ee80 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1ee90 65 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d  e Assembly assem
1eea0 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bly;..          
1eeb0 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c    public Assembl
1eec0 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y Assembly..    
1eed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1eee0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1eef0 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79   return assembly
1ef00 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1ef10 20 20 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d       set { assem
1ef20 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  bly = value; }..
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ef40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1ef50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1efa0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c  private string l
1efb0 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ogFileName;..   
1efc0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1efd0 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61  string LogFileNa
1efe0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
1eff0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f000 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1f010 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  logFileName; }..
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f030 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d  set { logFileNam
1f040 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
1f050 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f060 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1f070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1f0c0 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 69 72  ivate string dir
1f0d0 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
1f0e0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1f0f0 6e 67 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20  ng Directory..  
1f100 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1f120 20 7b 20 72 65 74 75 72 6e 20 64 69 72 65 63 74   { return direct
1f130 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ory; }..        
1f140 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 69          set { di
1f150 72 65 63 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b  rectory = value;
1f160 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f170 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f180 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f1d0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1f1e0 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  ng coreFileName;
1f1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1f200 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 72 65  blic string Core
1f210 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
1f220 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f230 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1f240 65 74 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61  eturn coreFileNa
1f250 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1f260 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 72         set { cor
1f270 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  eFileName = valu
1f280 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1f290 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f2a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1f2f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1f300 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
1f310 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1f320 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 69  public string Li
1f330 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  nqFileName..    
1f340 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f350 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1f360 20 72 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65   return linqFile
1f370 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
1f380 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
1f390 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  inqFileName = va
1f3a0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1f3b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1f3c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1f3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f400 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1f410 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1f420 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
1f430 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
1f440 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1f450 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65  ing DesignerFile
1f460 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
1f470 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f480 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1f490 6e 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n designerFileNa
1f4a0 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1f4b0 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 73         set { des
1f4c0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
1f4d0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1f4e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f4f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f540 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1f550 65 20 73 74 72 69 6e 67 20 72 65 67 69 73 74 72  e string registr
1f560 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  yVersion;..     
1f570 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1f580 72 69 6e 67 20 52 65 67 69 73 74 72 79 56 65 72  ring RegistryVer
1f590 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
1f5a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f5b0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1f5c0 6e 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  n registryVersio
1f5d0 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  n; }..          
1f5e0 20 20 20 20 20 20 73 65 74 20 7b 20 72 65 67 69        set { regi
1f5f0 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 76 61  stryVersion = va
1f600 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1f610 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1f620 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1f630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f660 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1f670 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1f680 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72  string configVer
1f690 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
1f6a0 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1f6b0 20 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 0d 0a   ConfigVersion..
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1f6e0 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66  et { return conf
1f6f0 69 67 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20  igVersion; }..  
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1f710 74 20 7b 20 63 6f 6e 66 69 67 56 65 72 73 69 6f  t { configVersio
1f720 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  n = value; }..  
1f730 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f740 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1f750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1f7a0 69 76 61 74 65 20 73 74 72 69 6e 67 20 76 73 56  ivate string vsV
1f7b0 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20  ersionSuffix;.. 
1f7c0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1f7d0 63 20 73 74 72 69 6e 67 20 56 73 56 65 72 73 69  c string VsVersi
1f7e0 6f 6e 53 75 66 66 69 78 0d 0a 20 20 20 20 20 20  onSuffix..      
1f7f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f800 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1f810 65 74 75 72 6e 20 76 73 56 65 72 73 69 6f 6e 53  eturn vsVersionS
1f820 75 66 66 69 78 3b 20 7d 0d 0a 20 20 20 20 20 20  uffix; }..      
1f830 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1f840 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20  vsVersionSuffix 
1f850 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1f860 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f870 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1f880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1f8d0 61 74 65 20 73 74 72 69 6e 67 20 64 65 62 75 67  ate string debug
1f8e0 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
1f8f0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1f900 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a  ng DebugFormat..
1f910 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1f930 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75  et { return debu
1f940 67 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20  gFormat; }..    
1f950 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1f960 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20  { debugFormat = 
1f970 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1f980 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f990 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f9e0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1f9f0 65 20 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f  e string traceFo
1fa00 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
1fa10 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1fa20 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20   TraceFormat..  
1fa30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1fa50 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 46   { return traceF
1fa60 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20  ormat; }..      
1fa70 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1fa80 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61  traceFormat = va
1fa90 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1faa0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fab0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faf0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1fb00 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1fb10 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73  InstallFlags ins
1fb20 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20  tallFlags;..    
1fb30 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 49          public I
1fb40 6e 73 74 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74  nstallFlags Inst
1fb50 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 20 20  allFlags..      
1fb60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fb70 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1fb80 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61  eturn installFla
1fb90 67 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  gs; }..         
1fba0 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73         set { ins
1fbb0 74 61 6c 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75  tallFlags = valu
1fbc0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1fbd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1fbe0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1fbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc20 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1fc30 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72        private Tr
1fc40 61 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75  acePriority debu
1fc50 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  gPriority;..    
1fc60 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54          public T
1fc70 72 61 63 65 50 72 69 6f 72 69 74 79 20 44 65 62  racePriority Deb
1fc80 75 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20  ugPriority..    
1fc90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1fca0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1fcb0 20 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69   return debugPri
1fcc0 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20  ority; }..      
1fcd0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1fce0 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  debugPriority = 
1fcf0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1fd00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fd10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1fd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1fd60 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1fd70 65 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  e TracePriority 
1fd80 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a  tracePriority;..
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1fda0 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ic TracePriority
1fdb0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a   TracePriority..
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1fde0 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63  et { return trac
1fdf0 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20  ePriority; }..  
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1fe10 74 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74  t { tracePriorit
1fe20 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
1fe30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1fe40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1fe90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1fea0 69 76 61 74 65 20 62 6f 6f 6c 20 70 65 72 55 73  ivate bool perUs
1feb0 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er;..           
1fec0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72   public bool Per
1fed0 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20  User..          
1fee0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1fef0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1ff00 6e 20 70 65 72 55 73 65 72 3b 20 7d 0d 0a 20 20  n perUser; }..  
1ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1ff20 74 20 7b 20 70 65 72 55 73 65 72 20 3d 20 76 61  t { perUser = va
1ff30 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1ff40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ff50 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ff60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff90 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1ffa0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1ffb0 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20  bool install;.. 
1ffc0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1ffd0 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a  c bool Install..
1ffe0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
20000 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74  et { return inst
20010 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  all; }..        
20020 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e          set { in
20030 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d  stall = value; }
20040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20050 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
200b0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
200c0 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20  ow64;..         
200d0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57     public bool W
200e0 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
200f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20100 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
20110 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20  n wow64; }..    
20120 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
20130 7b 20 77 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b  { wow64 = value;
20140 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20150 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20160 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
201b0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
201c0 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
201d0 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
201e0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75  public bool NoRu
201f0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20  ntimeVersion..  
20200 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20210 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
20220 20 7b 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74   { return noRunt
20230 69 6d 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20  imeVersion; }.. 
20240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20250 65 74 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65  et { noRuntimeVe
20260 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d  rsion = value; }
20270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20280 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
202d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
202e0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
202f0 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20  oDesktop;..     
20300 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
20310 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20  ol NoDesktop..  
20320 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
20340 20 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b   { return noDesk
20350 74 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  top; }..        
20360 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
20370 44 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b  Desktop = value;
20380 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20390 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
203a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
203b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
203f0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
20400 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20   noCompact;..   
20410 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20420 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a  bool NoCompact..
20430 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
20450 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f  et { return noCo
20460 6d 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20  mpact; }..      
20470 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
20480 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75  noCompact = valu
20490 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
204a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
204b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
204c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204f0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20500 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
20510 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20  ol noNetFx20;.. 
20520 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
20530 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30  c bool NoNetFx20
20540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20560 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
20570 4e 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20  NetFx20; }..    
20580 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
20590 7b 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61  { noNetFx20 = va
205a0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
205b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
205c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
205d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20600 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20610 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20620 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35 3b 0d  bool noNetFx35;.
20630 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
20640 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
20650 33 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  35..            
20660 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20670 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
20680 6e 6f 4e 65 74 46 78 33 35 3b 20 7d 0d 0a 20 20  noNetFx35; }..  
20690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
206a0 74 20 7b 20 6e 6f 4e 65 74 46 78 33 35 20 3d 20  t { noNetFx35 = 
206b0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
206c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
206d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
206e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
206f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20720 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
20730 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30  e bool noNetFx40
20740 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
20750 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74  ublic bool NoNet
20760 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20  Fx40..          
20770 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20780 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
20790 6e 20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a  n noNetFx40; }..
207a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207b0 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20  set { noNetFx40 
207c0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
207d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
207e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
207f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20830 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
20840 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
20850 34 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  45;..           
20860 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
20870 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20  etFx45..        
20880 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20890 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
208a0 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d  urn noNetFx45; }
208b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
208c0 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34    set { noNetFx4
208d0 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  5 = value; }..  
208e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
208f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
20900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
20950 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
20960 30 30 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  005;..          
20970 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
20980 56 73 32 30 30 35 0d 0a 20 20 20 20 20 20 20 20  Vs2005..        
20990 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
209a0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
209b0 75 72 6e 20 6e 6f 56 73 32 30 30 35 3b 20 7d 0d  urn noVs2005; }.
209c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
209d0 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 35 20   set { noVs2005 
209e0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
209f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
20a00 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
20a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20a50 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
20a60 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30  ate bool noVs200
20a70 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  8;..            
20a80 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73  public bool NoVs
20a90 32 30 30 38 0d 0a 20 20 20 20 20 20 20 20 20 20  2008..          
20aa0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20ab0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
20ac0 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d 0d 0a 20  n noVs2008; }.. 
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20ae0 65 74 20 7b 20 6e 6f 56 73 32 30 30 38 20 3d 20  et { noVs2008 = 
20af0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
20b00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20b10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20b60 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
20b70 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 3b  e bool noVs2010;
20b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
20b90 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
20ba0 31 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  10..            
20bb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20bc0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
20bd0 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a 20 20 20  noVs2010; }..   
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
20bf0 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d 20 76 61   { noVs2010 = va
20c00 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
20c10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
20c20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20c70 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20c80 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 3b 0d 0a  bool noVs2012;..
20c90 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20ca0 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 32  ic bool NoVs2012
20cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20cd0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
20ce0 56 73 32 30 31 32 3b 20 7d 0d 0a 20 20 20 20 20  Vs2012; }..     
20cf0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20d00 20 6e 6f 56 73 32 30 31 32 20 3d 20 76 61 6c 75   noVs2012 = valu
20d10 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
20d20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20d30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20d80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
20d90 6f 6c 20 6e 6f 56 73 32 30 31 33 3b 0d 0a 20 20  ol noVs2013;..  
20da0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
20db0 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 33 0d 0a   bool NoVs2013..
20dc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
20de0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
20df0 32 30 31 33 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2013; }..       
20e00 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
20e10 6f 56 73 32 30 31 33 20 3d 20 76 61 6c 75 65 3b  oVs2013 = value;
20e20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20e30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20e40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20e90 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
20ea0 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
20eb0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
20ec0 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20  ol NoTrace..    
20ed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20ee0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
20ef0 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b   return noTrace;
20f00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20f10 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 72 61 63      set { noTrac
20f20 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
20f30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
20f40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
20f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
20fa0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e  ivate bool noCon
20fb0 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  sole;..         
20fc0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
20fd0 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20  oConsole..      
20fe0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20ff0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
21000 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b  eturn noConsole;
21010 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21020 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73      set { noCons
21030 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ole = value; }..
21040 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21050 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
21060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
210b0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c  private bool noL
210c0 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
210d0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c   public bool NoL
210e0 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  og..            
210f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21100 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
21110 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20  noLog; }..      
21120 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
21130 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d  noLog = value; }
21140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21150 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
21160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
211b0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 74    private bool t
211c0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a  hrowOnMissing;..
211d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
211e0 69 63 20 62 6f 6f 6c 20 54 68 72 6f 77 4f 6e 4d  ic bool ThrowOnM
211f0 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  issing..        
21200 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21210 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
21220 75 72 6e 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  urn throwOnMissi
21230 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ng; }..         
21240 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 68 72         set { thr
21250 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 76 61  owOnMissing = va
21260 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
21270 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21280 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
212d0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
212e0 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20  bool whatIf;..  
212f0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
21300 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20   bool WhatIf..  
21310 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21320 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
21330 20 7b 20 72 65 74 75 72 6e 20 77 68 61 74 49 66   { return whatIf
21340 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21350 20 20 20 20 20 73 65 74 20 7b 20 77 68 61 74 49       set { whatI
21360 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  f = value; }..  
21370 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21380 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
21390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
213d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
213e0 69 76 61 74 65 20 62 6f 6f 6c 20 64 65 62 75 67  ivate bool debug
213f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
21400 75 62 6c 69 63 20 62 6f 6f 6c 20 44 65 62 75 67  ublic bool Debug
21410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21430 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
21440 62 75 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  bug; }..        
21450 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
21460 62 75 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  bug = value; }..
21470 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21480 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
21490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
214e0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 76 65 72  private bool ver
214f0 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  bose;..         
21500 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 56     public bool V
21510 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
21520 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21530 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
21540 75 72 6e 20 76 65 72 62 6f 73 65 3b 20 7d 0d 0a  urn verbose; }..
21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21560 73 65 74 20 7b 20 76 65 72 62 6f 73 65 20 3d 20  set { verbose = 
21570 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
21580 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21590 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
215a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
215e0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
215f0 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d  e bool confirm;.
21600 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21610 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d  lic bool Confirm
21620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21640 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f   get { return co
21650 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 20 20 20  nfirm; }..      
21660 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
21670 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c 75 65 3b  confirm = value;
21680 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21690 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
216a0 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
216b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
216c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
216d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
216e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21720 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 46         #region F
21730 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 43 6c 61  rameworkList Cla
21740 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
21750 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
21760 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a   FrameworkList..
21770 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21780 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
21790 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
217a0 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
217b0 70 75 62 6c 69 63 20 46 72 61 6d 65 77 6f 72 6b  public Framework
217c0 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
217d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
217e0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
217f0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
21800 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
21810 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
21820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
21830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
21880 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65  region Public Me
21890 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
218a0 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
218b0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
218c0 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey;..           
218d0 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
218e0 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d  stryKey RootKey.
218f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21910 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f  get { return roo
21920 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tKey; }..       
21930 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
21940 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20  ootKey = value; 
21950 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21960 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21990 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
219c0 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e     private Strin
219d0 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20  gList names;..  
219e0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
219f0 20 53 74 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65   StringList Name
21a00 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
21a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21a20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
21a30 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ames; }..       
21a40 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
21a50 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ames = value; }.
21a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ac0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
21ad0 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e   private Version
21ae0 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20  Map versions;.. 
21af0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
21b00 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 56 65 72  c VersionMap Ver
21b10 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20  sions..         
21b20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21b30 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
21b40 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a  rn versions; }..
21b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b60 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d  set { versions =
21b70 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
21b80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21b90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21be0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
21bf0 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 70 6c  te StringList pl
21c00 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20  atformNames;..  
21c10 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
21c20 20 53 74 72 69 6e 67 4c 69 73 74 20 50 6c 61 74   StringList Plat
21c30 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20  formNames..     
21c40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21c50 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
21c60 72 65 74 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e  return platformN
21c70 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ames; }..       
21c80 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
21c90 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76  latformNames = v
21ca0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
21cb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
21cc0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
21cd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
21ce0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
21cf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
21d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
21d50 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c 61 73 73  ion VsList Class
21d60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21d70 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56  e sealed class V
21d80 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b  sList..        {
21d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
21da0 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
21db0 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
21dc0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 73         public Vs
21dd0 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
21de0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21df0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
21e00 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
21e10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
21e20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
21e30 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 0d  ///////////////.
21e80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
21e90 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
21ea0 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
21eb0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f        private Mo
21ec0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
21ed0 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  otKey;..        
21ee0 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
21ef0 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b  egistryKey RootK
21f00 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
21f10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21f20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
21f30 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20  rootKey; }..    
21f40 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
21f50 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75  { rootKey = valu
21f60 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
21f70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21f80 20 20 20 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 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21fd0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 56 65        private Ve
21fe0 72 73 69 6f 6e 4c 69 73 74 20 76 65 72 73 69 6f  rsionList versio
21ff0 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns;..           
22000 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c   public VersionL
22010 69 73 74 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20  ist Versions..  
22020 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22030 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
22040 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69 6f   { return versio
22050 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ns; }..         
22060 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65 72         set { ver
22070 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d  sions = value; }
22080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22090 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
220a0 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
220b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
220c0 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
220d0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
220e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
220f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22130 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
22140 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
22150 74 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  t Data..        
22160 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
22170 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d  ring CoreFileNam
22180 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
22190 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20  .SQLite.dll";.. 
221a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
221b0 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 69 6e 71  onst string Linq
221c0 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74  FileName = "Syst
221d0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c  em.Data.SQLite.L
221e0 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  inq.dll";..     
221f0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
22200 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72   string Designer
22210 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69  FileName = "SQLi
22220 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22  te.Designer.dll"
22230 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
22240 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
22250 50 72 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20 22  ProviderName = "
22260 53 51 4c 69 74 65 20 44 61 74 61 20 50 72 6f 76  SQLite Data Prov
22270 69 64 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20  ider";..        
22280 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
22290 72 69 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65  ring ProjectName
222a0 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
222b0 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20  SQLite";..      
222c0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
222d0 73 74 72 69 6e 67 20 4c 65 67 61 63 79 50 72 6f  string LegacyPro
222e0 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69  jectName = "SQLi
222f0 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  te";..        pr
22300 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
22310 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  ng InvariantName
22320 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
22330 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20  SQLite";..      
22340 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
22350 73 74 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79  string FactoryTy
22360 70 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  peName = "System
22370 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
22380 69 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20  iteFactory";..  
22390 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
223a0 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73 63 72  nst string Descr
223b0 69 70 74 69 6f 6e 20 3d 20 22 2e 4e 45 54 20 46  iption = ".NET F
223c0 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72  ramework Data Pr
223d0 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
223e0 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  e";....        /
223f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22430 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22440 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
22450 73 74 72 69 6e 67 20 43 4c 52 76 32 49 6d 61 67  string CLRv2Imag
22460 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20  eRuntimeVersion 
22470 3d 20 22 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d  = "v2.0.50727";.
22480 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
22490 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c   const string CL
224a0 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv4ImageRuntimeV
224b0 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33  ersion = "v4.0.3
224c0 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  0319";....      
224d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
224e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22510 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22520 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
22530 73 74 20 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e  st string NameAn
22540 64 56 61 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22  dValueFormat = "
22550 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20  {0}: {1}";..    
22560 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
22570 74 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65  t string LogFile
22580 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b  Suffix = ".log";
22590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
225f0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
22600 69 6e 67 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 20  ing RootKeyName 
22610 3d 20 22 53 6f 66 74 77 61 72 65 22 3b 0d 0a 20  = "Software";.. 
22620 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
22630 6f 6e 73 74 20 73 74 72 69 6e 67 20 57 6f 77 36  onst string Wow6
22640 34 53 75 62 4b 65 79 4e 61 6d 65 20 3d 20 22 57  4SubKeyName = "W
22650 6f 77 36 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a  ow6432Node";....
22660 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
226b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
226c0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
226d0 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  The .NET Framewo
226e0 72 6b 20 68 61 73 20 62 6f 74 68 20 33 32 2d 62  rk has both 32-b
226f0 69 74 20 61 6e 64 20 36 34 2d 62 69 74 20 65 64  it and 64-bit ed
22700 69 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20  itions...       
22710 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69   //..        pri
22720 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
22730 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74 46 78 49  only bool NetFxI
22740 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 66 61 6c  s32BitOnly = fal
22750 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  se;....        /
22760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
227b0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
227c0 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20   NOTE: For now, 
227d0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 69 73  Visual Studio is
227e0 20 61 6c 77 61 79 73 20 61 20 33 32 2d 62 69 74   always a 32-bit
227f0 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20   application... 
22800 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
22810 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
22820 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20  c readonly bool 
22830 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20  VsIs32BitOnly = 
22840 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
22850 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22890 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
228a0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
228b0 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69  ic readonly stri
228c0 6e 67 20 56 73 49 64 46 6f 72 6d 61 74 20 3d 20  ng VsIdFormat = 
228d0 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "B";....        
228e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22920 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22930 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
22940 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
22950 67 20 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65  g XPathForAddEle
22960 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
22970 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
22980 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
22990 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
229a0 65 73 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e  es/add[@invarian
229b0 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a  t=\"{0}\"]";....
229c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
229d0 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
229e0 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52  string XPathForR
229f0 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a  emoveElement =..
22a00 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
22a10 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
22a20 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
22a30 72 46 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76  rFactories/remov
22a40 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b  e[@invariant=\"{
22a50 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20  0}\"]";..       
22a60 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
22a70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22ac0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
22ad0 6e 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63  n Private Static
22ae0 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70   Data..        p
22af0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 41 73  rivate static As
22b00 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73 65 6d  sembly thisAssem
22b10 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47  bly = Assembly.G
22b20 65 74 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d  etExecutingAssem
22b30 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bly();....      
22b40 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
22b50 20 73 74 72 69 6e 67 20 74 72 61 63 65 43 61 74   string traceCat
22b60 65 67 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  egory = Path.Get
22b70 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20  FileName(..     
22b80 20 20 20 20 20 20 20 74 68 69 73 41 73 73 65 6d         thisAssem
22b90 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 20 2f  bly.Location); /
22ba0 2a 20 4e 4f 54 45 3a 20 53 61 6d 65 20 66 6f 72  * NOTE: Same for
22bb0 20 64 65 62 75 67 20 61 6e 64 20 74 72 61 63 65   debug and trace
22bc0 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  . */....        
22bd0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54  private static T
22be0 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62  raceCallback deb
22bf0 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70  ugCallback = App
22c00 44 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20  Debug;..        
22c10 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54  private static T
22c20 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
22c30 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70  ceCallback = App
22c40 54 72 61 63 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  Trace;....      
22c50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22ca0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
22cb0 74 69 63 20 73 74 72 69 6e 67 20 73 79 73 74 65  tic string syste
22cc0 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c  mDirectory = nul
22cd0 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e 44 4f 57  l;....#if WINDOW
22ce0 53 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  S..        priva
22cf0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
22d00 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
22d10 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b 0d 0a 23  Wow64 = null;..#
22d20 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
22d30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22d80 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
22d90 69 63 20 69 6e 74 20 66 69 6c 65 73 43 72 65 61  ic int filesCrea
22da0 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ted = 0;..      
22db0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
22dc0 20 69 6e 74 20 66 69 6c 65 73 4d 6f 64 69 66 69   int filesModifi
22dd0 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ed = 0;..       
22de0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
22df0 69 6e 74 20 66 69 6c 65 73 44 65 6c 65 74 65 64  int filesDeleted
22e00 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 23   = 0;..        #
22e10 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
22e20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22e70 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
22e80 54 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  Trace Handling..
22e90 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22ea0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
22eb0 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20  tLogFileName(.. 
22ec0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
22ed0 67 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20  g typeName..    
22ee0 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72          ) /* thr
22ef0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  ow */..        {
22f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
22f10 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20  ring fileName = 
22f20 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65  Path.GetTempFile
22f30 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Name();..       
22f40 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
22f50 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  ctory = Path.Get
22f60 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 66 69  DirectoryName(fi
22f70 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  leName);..      
22f80 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
22f90 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68  eNameOnly = Path
22fa0 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74 68  .GetFileNameWith
22fb0 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c  outExtension(fil
22fc0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
22fd0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65         string ne
22fe0 77 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  wFileName = Path
22ff0 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
23000 72 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ry, String.Forma
23010 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
23020 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c      "{0}{1}{2}",
23030 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
23040 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
23050 45 6d 70 74 79 28 74 79 70 65 4e 61 6d 65 29 20  Empty(typeName) 
23060 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
23070 20 20 20 20 20 20 20 22 2e 22 20 2b 20 74 79 70         "." + typ
23080 65 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45  eName : String.E
23090 6d 70 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65  mpty, "." + file
230a0 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20  NameOnly +..    
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29 29 3b  LogFileSuffix));
230d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
230e0 46 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61  File.Move(fileNa
230f0 6d 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29  me, newFileName)
23100 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23110 20 72 65 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e   return newFileN
23120 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ame;..        }.
23130 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
23140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23180 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
23190 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
231a0 64 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20 20  d AppDebug(..   
231b0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
231c0 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
231d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
231e0 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
231f0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
23200 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61  .            Tra
23210 63 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65 28  ceOps.DebugCore(
23220 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
23230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23240 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f  TraceOps.DebugFo
23250 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e  rmat, TraceOps.N
23260 65 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a 20  extDebugId(),.. 
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
23280 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d  raceOps.TimeStam
23290 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f  p(DateTime.UtcNo
232a0 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61  w), message), ca
232b0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
232c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
232d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23310 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23320 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
23330 20 76 6f 69 64 20 41 70 70 54 72 61 63 65 28 0d   void AppTrace(.
23340 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
23350 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
23360 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
23370 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
23380 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
23390 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
233a0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 43   TraceOps.TraceC
233b0 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ore(String.Forma
233c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
233d0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
233e0 63 65 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f  ceFormat, TraceO
233f0 70 73 2e 4e 65 78 74 54 72 61 63 65 49 64 28 29  ps.NextTraceId()
23400 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23410 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65     TraceOps.Time
23420 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55  Stamp(DateTime.U
23430 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29  tcNow), message)
23440 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  , category);..  
23450 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23460 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
23470 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
234c0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
234d0 6e 20 47 65 6e 65 72 69 63 20 50 6c 61 74 66 6f  n Generic Platfo
234e0 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rm Handling..   
234f0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
23500 74 69 63 20 62 6f 6f 6c 20 49 73 36 34 42 69 74  tic bool Is64Bit
23510 50 72 6f 63 65 73 73 28 29 0d 0a 20 20 20 20 20  Process()..     
23520 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23530 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
23540 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72    // NOTE: Retur
23550 6e 73 20 74 72 75 65 20 69 66 20 74 68 65 20 63  ns true if the c
23560 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 69  urrent process i
23570 73 20 36 34 2d 62 69 74 2e 20 20 49 66 20 74 68  s 64-bit.  If th
23580 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
23590 2f 2f 20 20 20 20 20 20 20 69 73 20 74 72 75 65  //       is true
235a0 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20 74 68 61 74  , we *know* that
235b0 20 77 65 20 6d 75 73 74 20 62 65 20 72 75 6e 6e   we must be runn
235c0 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 0d  ing on a 64-bit.
235d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
235e0 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20        operating 
235f0 73 79 73 74 65 6d 20 61 73 20 77 65 6c 6c 2e 20  system as well. 
23600 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 69   However, if thi
23610 73 20 69 73 20 66 61 6c 73 65 2c 20 77 65 0d 0a  s is false, we..
23620 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
23630 20 20 20 20 20 64 6f 20 6e 6f 74 20 6e 65 63 65       do not nece
23640 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 74 68 61  ssarily know tha
23650 74 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67  t we are running
23660 20 6f 6e 20 61 20 33 32 2d 62 69 74 0d 0a 20 20   on a 32-bit..  
23670 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
23680 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73     operating sys
23690 74 65 6d 2c 20 64 75 65 20 74 6f 20 57 6f 57 36  tem, due to WoW6
236a0 34 20 28 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36  4 (Win32-on-Win6
236b0 34 29 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  4), etc...      
236c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
236d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e        return (In
236e0 74 50 74 72 2e 53 69 7a 65 20 3d 3d 20 73 69 7a  tPtr.Size == siz
236f0 65 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e  eof(long)); // N
23700 4f 54 45 3a 20 50 6f 69 6e 74 65 72 20 69 73 20  OTE: Pointer is 
23710 36 34 2d 62 69 74 73 3f 0d 0a 20 20 20 20 20 20  64-bits?..      
23720 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
23730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23770 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23780 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
23790 20 62 6f 6f 6c 20 49 73 53 75 70 70 6f 72 74 65   bool IsSupporte
237a0 64 52 6f 6f 74 4b 65 79 28 0d 0a 20 20 20 20 20  dRootKey(..     
237b0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
237c0 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20  try registry,.. 
237d0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
237e0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
237f0 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
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 72 65 74 75 72 6e            return
23820 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63   Object.Referenc
23830 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
23840 20 72 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   registry.Curren
23850 74 55 73 65 72 29 20 7c 7c 0d 0a 20 20 20 20 20  tUser) ||..     
23860 20 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63             Objec
23870 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c  t.ReferenceEqual
23880 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73  s(rootKey, regis
23890 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65  try.LocalMachine
238a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
238b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
238c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
23910 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
23920 67 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65  g GetRootKeyName
23930 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
23940 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
23950 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
23960 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
23970 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
23980 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
23990 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
239a0 55 47 46 49 58 3a 20 41 70 70 61 72 65 6e 74 6c  UGFIX: Apparentl
239b0 79 2c 20 74 68 65 20 70 65 72 2d 75 73 65 72 20  y, the per-user 
239c0 72 65 67 69 73 74 72 79 20 68 69 76 65 20 64 6f  registry hive do
239d0 65 73 20 6e 6f 74 20 75 73 65 0d 0a 20 20 20 20  es not use..    
239e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
239f0 20 20 20 74 68 65 20 22 57 6f 77 36 34 33 32 4e     the "Wow6432N
23a00 6f 64 65 22 20 6e 6f 64 65 20 74 6f 20 73 74 6f  ode" node to sto
23a10 72 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20  re settings for 
23a20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20  32-bit..        
23a30 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61      //         a
23a40 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 75 6e 6e  pplications runn
23a50 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 20  ing on a 64-bit 
23a60 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
23a70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
23a80 2f 20 20 20 20 20 20 20 20 20 54 69 63 6b 65 74  /         Ticket
23a90 20 5b 61 30 36 37 37 33 30 39 66 30 5d 20 68 61   [a0677309f0] ha
23aa0 73 20 66 75 72 74 68 65 72 20 64 65 74 61 69 6c  s further detail
23ab0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
23ac0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
23ad0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
23ae0 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52  rmat("{0}{1}", R
23af0 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  ootKeyName,..   
23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 21 70 65               !pe
23b10 72 55 73 65 72 20 26 26 20 77 6f 77 36 34 20 26  rUser && wow64 &
23b20 26 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73  & Is64BitProcess
23b30 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  () ?..          
23b40 20 20 20 20 20 20 20 20 20 20 22 5c 5c 22 20 2b            "\\" +
23b50 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65   Wow64SubKeyName
23b60 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29   : String.Empty)
23b70 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
23b80 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23bd0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
23be0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
23bf0 20 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74   GetSystemDirect
23c00 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
23c10 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
23c20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
23c30 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44       {..#if WIND
23c40 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OWS..           
23c50 20 69 66 20 28 77 6f 77 36 34 29 0d 0a 20 20 20   if (wow64)..   
23c60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23c70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23c80 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57  systemDirectoryW
23c90 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ow64 == null).. 
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23cc0 20 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65        systemDire
23cd0 63 74 6f 72 79 57 6f 77 36 34 20 3d 0d 0a 20 20  ctoryWow64 =..  
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cf0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
23d00 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 79 73  veMethods.GetSys
23d10 74 65 6d 44 69 72 65 63 74 6f 72 79 28 29 3b 0d  temDirectory();.
23d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23d30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23d40 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 79 73        return sys
23d50 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
23d60 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4;..            
23d70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
23d80 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  lse..#endif..   
23d90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23da0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23db0 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20  systemDirectory 
23dc0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79                sy
23de0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20  stemDirectory = 
23df0 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74  Environment.Syst
23e00 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a  emDirectory;....
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e20 72 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69 72  return systemDir
23e30 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
23e40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23e50 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
23e60 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
23e70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23eb0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
23ec0 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65      #region Gene
23ed0 72 69 63 20 53 74 72 69 6e 67 20 48 61 6e 64 6c  ric String Handl
23ee0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
23ef0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
23f00 6e 67 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ng ForDisplay(..
23f10 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
23f20 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ct value..      
23f30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
23f40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23f50 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
23f60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
23f70 20 20 20 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c      return "<nul
23f80 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  l>";....        
23f90 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
23fa0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
23fb0 54 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c 75  Type type = valu
23fc0 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a  e.GetType();....
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23fe0 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 58  type == typeof(X
23ff0 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20  mlElement))..   
24000 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24010 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
24020 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d  lement element =
24030 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c   (XmlElement)val
24040 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
24050 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
24060 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c  element.OuterXml
24070 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
24080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
24090 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74  se if (type == t
240a0 79 70 65 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d  ypeof(Version)).
240b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
240c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240d0 56 65 72 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20  Version version 
240e0 3d 20 28 56 65 72 73 69 6f 6e 29 76 61 6c 75 65  = (Version)value
240f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24100 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74       result = St
24110 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30  ring.Format("v{0
24120 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20  }", version);.. 
24130 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24140 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
24150 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24170 65 73 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f  esult = value.To
24180 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20  String();....   
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
241a0 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d  (result.Length =
241b0 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
241c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
241d0 20 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20   "<empty>";.... 
241e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
241f0 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46  esult = String.F
24200 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
24210 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
24220 2e 49 73 53 75 62 63 6c 61 73 73 4f 66 28 74 79  .IsSubclassOf(ty
24230 70 65 6f 66 28 56 61 6c 75 65 54 79 70 65 29 29  peof(ValueType))
24240 20 3f 20 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30   ? "{0}" : "\"{0
24250 7d 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  }\"",..         
24260 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
24270 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
24280 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
24290 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
242a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
242b0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
242c0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
242d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24310 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
24320 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41  egion Assembly A
24330 74 74 72 69 62 75 74 65 20 48 61 6e 64 6c 69 6e  ttribute Handlin
24340 67 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  g..        publi
24350 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
24360 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69  GetAssemblyConfi
24370 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20  guration(..     
24380 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
24390 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..      
243a0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
243b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
243c0 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20  if (assembly != 
243d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
243e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
243f0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
24400 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24420 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49    if (assembly.I
24430 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20  sDefined(..     
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24450 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
24460 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74  semblyConfigurat
24470 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 20 66  ionAttribute), f
24480 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  alse))..        
24490 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244b0 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 43         AssemblyC
244c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72  onfigurationAttr
244d0 69 62 75 74 65 20 63 6f 6e 66 69 67 75 72 61 74  ibute configurat
244e0 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ion =..         
244f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24500 20 20 20 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66     (AssemblyConf
24510 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
24520 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
24530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24540 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73   assembly.GetCus
24550 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a  tomAttributes(..
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24580 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43  typeof(AssemblyC
24590 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72  onfigurationAttr
245a0 69 62 75 74 65 29 2c 0d 0a 20 20 20 20 20 20 20  ibute),..       
245b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245c0 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 29 5b           false)[
245d0 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  0];....         
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
245f0 65 74 75 72 6e 20 63 6f 6e 66 69 67 75 72 61 74  eturn configurat
24600 69 6f 6e 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f  ion.Configuratio
24610 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
24620 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24630 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
24650 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
24660 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24670 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
24680 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
24690 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
246a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
246b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
246c0 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
246d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
246e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24720 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24730 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
24740 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62  string GetAssemb
24750 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20 20 20 20  lyTitle(..      
24760 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
24770 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
24780 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
24790 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
247a0 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e  f (assembly != n
247b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
247c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
247d0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
247e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24800 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73   if (assembly.Is
24810 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20  Defined(..      
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73        typeof(Ass
24840 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62  emblyTitleAttrib
24850 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20  ute), false)).. 
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24870 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
24890 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
248a0 62 75 74 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20  bute title =..  
248b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248c0 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65 6d            (Assem
248d0 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
248e0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
248f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24900 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74  assembly.GetCust
24910 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20  omAttributes(.. 
24920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24940 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69  ypeof(AssemblyTi
24950 74 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20 66  tleAttribute), f
24960 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20  alse)[0];....   
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24980 20 20 20 20 20 72 65 74 75 72 6e 20 74 69 74 6c       return titl
24990 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20  e.Title;..      
249a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
249b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
249c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
249d0 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
249e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a00 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
24a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24a20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
24a30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
24a40 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
24a50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24a60 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
24a70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
24a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ac0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
24ad0 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ion .NET Framewo
24ae0 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rk Handling..   
24af0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
24b00 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72  tic string GetFr
24b10 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61  ameworkRootKeyNa
24b20 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
24b30 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
24b40 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
24b50 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
24b60 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
24b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
24b80 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
24b90 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f  at("{0}\\Microso
24ba0 66 74 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72  ft\\.NETFramewor
24bb0 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k",..           
24bc0 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e       GetRootKeyN
24bd0 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77  ame(perUser, wow
24be0 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  64));..        }
24bf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
24c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c40 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
24c50 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
24c60 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72  ring GetFramewor
24c70 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  kKeyName(..     
24c80 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
24c90 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
24ca0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
24cb0 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
24cc0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
24cd0 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
24ce0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
24cf0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
24d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
24d10 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
24d20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
24d30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24d40 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20  string format = 
24d50 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
24d60 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61  Empty(platformNa
24d70 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  me) ?..         
24d80 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63         "{0}\\Mic
24d90 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32  rosoft\\{1}\\v{2
24da0 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20 20  }\\{3}" :..     
24db0 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
24dc0 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c  \Microsoft\\{1}\
24dd0 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20  \v{2}";....     
24de0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
24df0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d  ring.Format(form
24e00 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61  at, GetRootKeyNa
24e10 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
24e20 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4),..           
24e30 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
24e40 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
24e50 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
24e60 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  me);..        }.
24e70 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
24e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ec0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
24ed0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
24ee0 69 6e 67 20 47 65 74 49 6d 61 67 65 52 75 6e 74  ing GetImageRunt
24ef0 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  imeVersion(..   
24f00 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
24f10 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..      
24f20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
24f30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24f40 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
24f50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24f60 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
24f70 65 6d 62 6c 79 20 3d 0d 0a 20 20 20 20 20 20 20  embly =..       
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
24f90 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e  embly.Reflection
24fa0 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 66 69 6c  OnlyLoadFrom(fil
24fb0 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
24fc0 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
24fd0 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
24fe0 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly != null)..  
24ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25000 20 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c    return assembl
25010 79 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  y.ImageRuntimeVe
25020 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
25030 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
25040 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
25050 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25060 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
25070 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
25080 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25090 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
250a0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  l;..        }...
250b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
250c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
25110 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
25120 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69  g GetFrameworkDi
25130 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
25140 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
25150 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
25160 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
25170 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
25180 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
25190 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
251a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
251b0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
251c0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
251d0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
251e0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
251f0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
25200 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25210 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
25220 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
25230 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
25240 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25260 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74 46 72    rootKey, GetFr
25270 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61  ameworkRootKeyNa
25280 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
25290 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4),..           
252a0 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20           false, 
252b0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
252c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
252d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
252e0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
252f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
25300 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
25310 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
25320 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
25330 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48  alue = RegistryH
25340 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d  elper.GetValue(.
25350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25360 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61       key, "Insta
25370 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20 77  llRoot", null, w
25380 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
25390 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
253a0 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20      if (!(value 
253b0 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20  is string))..   
253c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253d0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
253e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
253f0 20 72 65 74 75 72 6e 20 50 61 74 68 2e 43 6f 6d   return Path.Com
25400 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  bine(..         
25410 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
25420 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 69 6e 67  ng)value, String
25430 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20  .Format("v{0}", 
25440 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
25450 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
25460 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
25470 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
25480 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
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 2f  ////////////////
254d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
254e0 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61 6d  #region Per-Fram
254f0 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20 48  ework/Platform H
25500 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
25510 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
25520 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 46  void InitializeF
25530 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a 20  rameworkList(.. 
25540 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
25550 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
25560 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
25570 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
25580 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
25590 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 46             ref F
255a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61  rameworkList fra
255b0 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20  meworkList..    
255c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
255d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
255e0 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
255f0 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ist == null)..  
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
25610 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 65  ameworkList = ne
25620 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28  w FrameworkList(
25630 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
25640 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
25650 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e  ist.RootKey == n
25660 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
25670 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
25680 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f  ist.RootKey = ro
25690 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  otKey;....      
256a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
256b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256c0 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
256f0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
25700 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
25710 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
25720 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25730 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
25740 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 20  orkList.Names = 
25750 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29  new StringList()
25760 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25770 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
25780 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
25790 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
257a0 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
257b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257c0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
257d0 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54  .Names.Add(".NET
257e0 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d 0a  Framework");....
257f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25800 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
25810 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
25820 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
25830 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  Compact)..      
25840 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25860 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
25870 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f  ames.Add(".NETCo
25880 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29  mpactFramework")
25890 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
258a0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
258b0 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22  List.Names.Add("
258c0 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65  .NETCompactFrame
258d0 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  work");..       
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
258f0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
25900 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63  .Add(".NETCompac
25910 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20  tFramework");.. 
25920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25940 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
25950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25990 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
259a0 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
259b0 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
259c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
259d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
259e0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
259f0 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e  ist.Versions = n
25a00 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 3b  ew VersionMap();
25a10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25a20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
25a30 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
25a40 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
25a50 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20  n.NoDesktop)..  
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25a80 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74       VersionList
25a90 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
25aa0 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ist = new Versio
25ab0 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  nList();....    
25ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ad0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
25ae0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
25af0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
25b00 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20 20  NetFx20)..      
25b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
25b30 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
25b40 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32 37  sion(2, 0, 50727
25b50 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
25b60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
25b70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
25b80 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
25b90 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
25ba0 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40)..           
25bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
25bc0 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
25bd0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
25be0 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d 0a  4, 0, 30319));..
25bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c00 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
25c10 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
25c20 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
25c30 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 29 0d 0a  ion.NoNetFx45)..
25c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c50 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
25c60 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
25c70 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c  ew Version(4, 5,
25c80 20 35 30 37 30 39 29 29 3b 0d 0a 0d 0a 20 20 20   50709));....   
25c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ca0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56   frameworkList.V
25cb0 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45  ersions.Add(".NE
25cc0 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20  TFramework",..  
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ce0 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
25cf0 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20  sionList);..    
25d00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
25d30 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
25d40 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
25d50 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
25d60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d80 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
25d90 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e  Versions.Add(".N
25da0 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
25db0 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rk",..          
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
25dd0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65  w VersionList(ne
25de0 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20  w Version[] {.. 
25df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e00 20 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69         new Versi
25e10 6f 6e 28 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20  on(2, 0, 0, 0), 
25e20 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35  new Version(3, 5
25e30 2c 20 30 2c 20 30 29 0d 0a 20 20 20 20 20 20 20  , 0, 0)..       
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 29               }))
25e50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
25e60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25e70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25e80 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ec0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25ed0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
25ee0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
25ef0 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
25f00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
25f20 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
25f30 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77  tformNames = new
25f40 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a   StringList();..
25f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25f60 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
25f70 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
25f80 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
25f90 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20  NoDesktop)..    
25fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fb0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
25fc0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28  atformNames.Add(
25fd0 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
25fe0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
25ff0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
26000 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
26010 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63  uration.NoCompac
26020 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
26030 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26040 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
26050 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
26060 6d 4e 61 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b  mNames.Add("Pock
26070 65 74 50 43 22 29 3b 0d 0a 20 20 20 20 20 20 20  etPC");..       
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
26090 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
260a0 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d  ormNames.Add("Sm
260b0 61 72 74 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20  artphone");..   
260c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260d0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
260e0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
260f0 28 22 57 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a  ("WindowsCE");..
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26110 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
26120 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
26130 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26180 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
26190 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61  e static bool Ha
261a0 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63  veFrameworkDirec
261b0 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
261c0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
261d0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
261e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
261f0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
26200 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
26210 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
26220 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
26230 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
26240 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
26250 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
26260 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
26270 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
26280 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
26290 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
262a0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
262b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
262c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
262d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
262e0 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65  yName = GetFrame
262f0 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  workKeyName(..  
26300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
26310 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
26320 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
26330 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72  latformName, per
26340 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
26350 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a         wow64);..
26360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
26370 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
26380 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
26390 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
263a0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
263b0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
263c0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
263d0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
263e0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
263f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26400 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
26410 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
26420 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
26430 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
26440 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26450 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d  (platformName !=
26460 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20   null) // NOTE: 
26470 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70  Skip non-desktop
26480 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26490 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
264a0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
264b0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
264c0 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61  rectory = GetFra
264d0 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
264e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
264f0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
26500 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
26510 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
26520 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
26540 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
26550 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
26560 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
26570 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d  pty(directory)).
26580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26590 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
265a0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
265b0 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63        if (!Direc
265c0 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65  tory.Exists(dire
265d0 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
265e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
265f0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
26600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
26610 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
26620 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
26630 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20  ty.Lower,..     
26640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
26650 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
26660 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
26670 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
26680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26690 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
266a0 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61 20 64   {0} found via d
266b0 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d  irectory {1}.",.
266c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
266d0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
266e0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
266f0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69  ), ForDisplay(di
26700 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20  rectory)),..    
26710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26720 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
26730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26740 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
26750 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26760 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26770 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
26780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
267c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
267d0 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65  static bool Have
267e0 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
267f0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
26800 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
26810 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
26820 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
26830 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
26840 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
26850 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
26860 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
26870 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
26880 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
26890 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
268a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
268b0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
268c0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
268d0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
268e0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
268f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
26900 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26910 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
26920 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72  me = GetFramewor
26930 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  kKeyName(..     
26940 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
26950 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
26960 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
26970 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65  formName, perUse
26980 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
26990 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20      wow64);.... 
269a0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
269b0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
269c0 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
269d0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
269e0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
269f0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
26a00 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
26a10 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
26a20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
26a30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26a40 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
26a50 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
26a60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26a70 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
26a80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
26a90 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75  atformName != nu
26aa0 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69  ll) // NOTE: Ski
26ab0 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a  p non-desktop...
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ad0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
26ae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26af0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
26b00 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
26b10 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
26b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26b30 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
26b40 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
26b50 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
26b60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26b70 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
26b80 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64  mework {0} found
26b90 20 76 69 61 20 72 65 67 69 73 74 72 79 20 7b 31   via registry {1
26ba0 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
26bb0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
26bc0 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
26bd0 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c  rsion), ForDispl
26be0 61 79 28 6b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20  ay(keyName)),.. 
26bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c00 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
26c10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26c20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
26c30 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26c40 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
26c50 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
26ca0 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
26cb0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
26cc0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
26cd0 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
26ce0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
26cf0 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77  ol ForEachFramew
26d00 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20  orkConfig(..    
26d10 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
26d20 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a  stry registry,..
26d30 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
26d40 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77  eworkList framew
26d50 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20  orkList,..      
26d60 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43        FrameworkC
26d70 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61  onfigCallback ca
26d80 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
26d90 20 20 20 20 20 73 74 72 69 6e 67 20 76 65 72 73       string vers
26da0 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70  ion, /* NOTE: Op
26db0 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20  tional. */..    
26dc0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
26dd0 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20  nvariant,..     
26de0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
26df0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
26e00 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
26e10 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
26e20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
26e30 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
26e40 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
26e50 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
26e60 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
26e70 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
26e80 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
26e90 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
26ea0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
26ec0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
26ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
26ee0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
26ef0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
26f00 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
26f10 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
26f20 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
26f30 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
26f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
26f50 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
26f60 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
26f70 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
26f80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
26fa0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
26fb0 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
26fc0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26fd0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
26fe0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26ff0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
27000 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  workList == null
27010 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
27020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27030 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
27040 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73  id framework lis
27050 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
27060 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27070 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27080 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27090 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
270a0 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65   rootKey = frame
270b0 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  workList.RootKey
270c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
270d0 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
270e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
270f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27100 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
27110 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
27120 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27130 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
27140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27150 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
27160 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52  f (!IsSupportedR
27170 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c  ootKey(registry,
27180 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20   rootKey))..    
27190 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
271a0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
271b0 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
271c0 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
271d0 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
271e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271f0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
27200 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27210 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27220 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
27230 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
27240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
27260 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
27270 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rk names found";
27280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27290 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
272a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
272b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
272c0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
272d0 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
272e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
272f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27300 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
27310 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
27320 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
27330 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27340 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
27350 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27360 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
27370 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
27380 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
27390 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
273b0 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66  rror = "no platf
273c0 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  orm names found"
273d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
273e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
273f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
27410 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
27420 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20  .Names.Count != 
27430 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
27440 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
27450 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
27460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27470 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
27480 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77  g.Format("framew
27490 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  ork name count {
274a0 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d  0} does not " +.
274b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
274c0 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74       "match plat
274d0 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20  form name count 
274e0 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c  {1}", frameworkL
274f0 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c  ist.Names.Count,
27500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27510 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
27520 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
27530 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  s.Count);....   
27540 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27550 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
27560 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27570 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
27580 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
27590 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ex < frameworkLi
275a0 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20  st.Names.Count; 
275b0 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
275c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
275d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
275e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
275f0 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
27600 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
27610 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
27620 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
27630 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
27640 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
27650 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
27660 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
27670 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
27680 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27690 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
276a0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
276b0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
276c0 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  .Names[index];..
276d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276e0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
276f0 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
27700 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
27710 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
27720 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
27730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27740 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61   // NOTE: Skip a
27750 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66  ll non-desktop f
27760 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20  rameworks (i.e. 
27770 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d  if the platform.
27780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27790 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20 69   //       name i
277a0 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20  s not null)...  
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
277c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
277d0 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61    if (platformNa
277e0 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
277f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27800 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
27810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
27820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27830 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
27840 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65  the supported ve
27850 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70  rsions of this p
27860 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20  articular..     
27870 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
27880 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a      framework...
27890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278a0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
278b0 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20      VersionList 
278c0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
278d0 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
278e0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
278f0 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  sion != null).. 
27900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
27910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27920 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
27930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
27940 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76   NOTE: Manual ov
27950 65 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f  erride of the *O
27960 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65  NE* framework ve
27970 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  rsion..         
27980 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
27990 20 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d      to process..
279a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
279b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
279c0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
279d0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
279e0 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  t = new VersionL
279f0 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ist();..        
27a00 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
27a10 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
27a20 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
27a30 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20  (version));..   
27a40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
27a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a60 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
27a70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27a80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
27a90 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  (!frameworkList.
27aa0 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56  Versions.TryGetV
27ab0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ad0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
27ae0 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56  , out frameworkV
27af0 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a  ersionList) ||..
27b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b10 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f          (framewo
27b20 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d  rkVersionList ==
27b30 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
27b40 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
27b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b60 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
27b70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27b80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
27b90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
27bb0 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20  oreach (Version 
27bc0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27bd0 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72   in frameworkVer
27be0 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20  sionList)..     
27bf0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c10 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
27c20 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
27c30 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
27c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c50 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
27c60 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
27c70 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
27c80 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
27c90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72               "fr
27ca0 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30  ameworkName = {0
27cb0 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  }, frameworkVers
27cc0 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a  ion = {1}, " +..
27cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ce0 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72          "platfor
27cf0 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f  mName = {2}", Fo
27d00 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
27d10 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  rkName),..      
27d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d30 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61    ForDisplay(fra
27d40 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
27d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d60 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
27d70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  lay(platformName
27d80 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
27d90 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
27da0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
27db0 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72  HaveFrameworkDir
27dc0 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27de0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
27df0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
27e00 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74              plat
27e30 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65  formName, perUse
27e40 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  r, wow64, whatIf
27e50 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
27e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27e80 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
27e90 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
27ea0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
27eb0 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
27ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ed0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
27ee0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
27ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
27f10 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 64 69  NET Framework di
27f20 72 65 63 74 6f 72 79 20 6e 6f 74 20 66 6f 75 6e  rectory not foun
27f30 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c  d, skipping...",
27f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
27f60 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
27f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27f80 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
27f90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27fa0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fc0 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d   if (callback ==
27fd0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
27fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ff0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
28000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28010 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
28020 79 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  y = GetFramework
28030 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
28040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28050 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
28060 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
28070 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77  erUser, wow64, w
28080 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
28090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280a0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
280b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280c0 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
280d0 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74  llOrEmpty(direct
280e0 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
280f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28110 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
28120 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
28130 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
28140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
28160 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
28170 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
28180 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
28190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281a0 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
281b0 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63  mework {0} direc
281c0 74 6f 72 79 20 69 73 20 69 6e 76 61 6c 69 64 2c  tory is invalid,
281d0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
281e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281f0 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
28200 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
28210 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d  eworkVersion)),.
28220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28230 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
28240 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
28250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28260 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
28270 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28280 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282a0 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68  directory = Path
282b0 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
282c0 72 79 2c 20 22 43 6f 6e 66 69 67 22 29 3b 0d 0a  ry, "Config");..
282d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
282e0 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63        if (!Direc
282f0 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65  tory.Exists(dire
28300 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
28310 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
28320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28330 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
28340 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
28350 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
28360 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
28380 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
28390 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
283a0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
283b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283c0 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
283d0 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72  ramework {0} dir
283e0 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f 65 73 20  ectory {1} does 
283f0 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  not " +..       
28400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28410 20 20 20 20 20 22 65 78 69 73 74 2c 20 73 6b 69       "exist, ski
28420 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
28430 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
28440 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
28450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28460 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
28470 28 64 69 72 65 63 74 6f 72 79 29 29 2c 20 74 72  (directory)), tr
28480 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
28490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
284a0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
284b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
284c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
284d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284e0 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
284f0 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
28500 64 69 72 65 63 74 6f 72 79 2c 20 22 6d 61 63 68  directory, "mach
28510 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b 0d 0a 0d  ine.config");...
28520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28530 20 20 20 20 20 69 66 20 28 21 46 69 6c 65 2e 45       if (!File.E
28540 78 69 73 74 73 28 66 69 6c 65 4e 61 6d 65 29 29  xists(fileName))
28550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28560 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28580 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
28590 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
285a0 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
285b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285c0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
285d0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
285e0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
285f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28610 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
28620 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31 7d 20 64  k {0} file {1} d
28630 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22  oes not exist, "
28640 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
28650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28660 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46  "skipping...", F
28670 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
28680 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
28690 20 20 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 46 6f 72 44 69 73            ForDis
286b0 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65 29 29 2c  play(fileName)),
286c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
286d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
286e0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
286f0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
28700 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28720 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61      bool localSa
28730 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ved = false;....
28740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28750 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63      if (!callbac
28760 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
28770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28780 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
28790 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72  ant, name, descr
287a0 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65  iption, typeName
287b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
287c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
287d0 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 63 6c 69  ssemblyName, cli
287e0 65 6e 74 44 61 74 61 2c 20 70 65 72 55 73 65 72  entData, perUser
287f0 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  , wow64,..      
28800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28810 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73        throwOnMis
28820 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
28830 72 62 6f 73 65 2c 20 72 65 66 20 6c 6f 63 61 6c  rbose, ref local
28840 53 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  Saved,..        
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28860 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d      ref error)).
28870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28880 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
288b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
288d0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
288e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
28910 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 26 26  f (localSaved &&
28920 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20 20 20   !saved)..      
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28940 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72        saved = tr
28950 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
28960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
28970 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
28980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28990 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
289a0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
289b0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
289c0 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  west,..         
289d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289e0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
289f0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
28a00 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
28a10 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a30 20 20 20 20 20 22 6c 6f 63 61 6c 53 61 76 65 64       "localSaved
28a40 20 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20   = {0}, saved = 
28a50 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
28a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a70 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
28a80 79 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20 46  y(localSaved), F
28a90 6f 72 44 69 73 70 6c 61 79 28 73 61 76 65 64 29  orDisplay(saved)
28aa0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
28ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ac0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
28ad0 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
28ae0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
28af0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
28b00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28b10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28b20 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
28b30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
28b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b80 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
28b90 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
28ba0 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
28bb0 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
28bc0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
28bd0 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63  atic bool ForEac
28be0 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74  hFrameworkRegist
28bf0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
28c00 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65   MockRegistry re
28c10 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
28c20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69       FrameworkLi
28c30 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  st frameworkList
28c40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ,..            F
28c50 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79  rameworkRegistry
28c60 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63  Callback callbac
28c70 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
28c80 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20  string version, 
28c90 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61  /* NOTE: Optiona
28ca0 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  l. */..         
28cb0 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
28cc0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
28cd0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
28ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28cf0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
28d00 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
28d10 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
28d20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
28d30 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
28d40 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
28d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
28d60 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
28d70 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
28d80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28d90 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73 74        if (regist
28da0 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
28db0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28dc0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
28dd0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67  r = "invalid reg
28de0 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20  istry";..       
28df0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28e00 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
28e10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28e20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
28e30 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  rkList == null).
28e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e60 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
28e70 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22   framework list"
28e80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28e90 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
28ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28eb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
28ec0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
28ed0 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f  ootKey = framewo
28ee0 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d  rkList.RootKey;.
28ef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
28f00 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
28f10 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28f20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28f30 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
28f40 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
28f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f60 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
28f70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28f90 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f  (!IsSupportedRoo
28fa0 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20 72  tKey(registry, r
28fb0 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20  ootKey))..      
28fc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28fd0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
28fe0 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
28ff0 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
29000 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29020 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
29030 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29040 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
29050 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
29060 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
29070 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29080 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
29090 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
290a0 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
290d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
290e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
290f0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
29100 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
29110 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29130 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
29140 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66  ework versions f
29150 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
29160 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
29170 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
29180 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29190 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
291a0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
291b0 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
291c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
291d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
291e0 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72  or = "no platfor
291f0 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  m names found";.
29200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29210 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
29220 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
29230 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
29240 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
29250 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72  ames.Count != fr
29260 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
29270 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
29280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
292a0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
292b0 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72  Format("framewor
292c0 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d  k name count {0}
292d0 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
292e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292f0 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f     "match platfo
29300 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31  rm name count {1
29310 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  }", frameworkLis
29320 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a  t.Names.Count,..
29330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29340 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
29350 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
29360 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
29370 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29380 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
29390 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
293a0 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
293b0 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
293c0 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   < frameworkList
293d0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e  .Names.Count; in
293e0 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
293f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29400 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
29410 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
29420 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d  TE: Grab the nam
29430 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  e of the framewo
29440 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72  rk (e.g. ".NETFr
29450 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20  amework")..     
29460 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
29470 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65      and the name
29480 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   of the platform
29490 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43   (e.g. "WindowsC
294a0 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  E")...          
294b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
294c0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
294d0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d   frameworkName =
294e0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
294f0 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  ames[index];..  
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
29510 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
29520 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
29530 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b  t.PlatformNames[
29540 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
29550 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
29560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29570 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
29580 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69   supported versi
29590 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74  ons of this part
295a0 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20  icular..        
295b0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
295c0 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20   framework...   
295d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
295e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
295f0 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61   VersionList fra
29600 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
29610 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
29620 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69 6f        if (versio
29630 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n != null)..    
29640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29660 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
29670 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
29680 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72  TE: Manual overr
29690 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a  ide of the *ONE*
296a0 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   framework versi
296b0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
296c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
296d0 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20   to process...  
296e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296f0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
29700 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
29710 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  orkVersionList =
29720 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
29730 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
29740 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
29750 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  rkVersionList.Ad
29760 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76 65  d(new Version(ve
29770 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20  rsion));..      
29780 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
29790 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
297a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
297b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
297c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66            if (!f
297d0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
297e0 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  sions.TryGetValu
297f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
29800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29810 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f  frameworkName, o
29820 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ut frameworkVers
29830 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20  ionList) ||..   
29840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29850 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56       (frameworkV
29860 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75  ersionList == nu
29870 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
29880 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298a0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
298b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
298d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
298e0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
298f0 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61  ach (Version fra
29900 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e  meworkVersion in
29910 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
29920 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20  nList)..        
29930 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
29950 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
29960 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
29970 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
29980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29990 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
299a0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
299b0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
299c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
299d0 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65            "frame
299e0 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20  workName = {0}, 
299f0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
29a00 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {1}, " +..   
29a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61       "platformNa
29a30 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69  me = {2}", ForDi
29a40 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e  splay(frameworkN
29a50 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
29a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
29a70 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
29a80 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
29a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29aa0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
29ab0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c  (platformName)),
29ac0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
29ad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29ae0 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
29af0 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74  eFrameworkRegist
29b00 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
29b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
29b30 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
29b40 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
29b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b60 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
29b70 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77  Name, perUser, w
29b80 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
29b90 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
29ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
29bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bc0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
29bd0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
29be0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
29bf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
29c10 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
29c20 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
29c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c40 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
29c50 46 72 61 6d 65 77 6f 72 6b 20 72 65 67 69 73 74  Framework regist
29c60 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b  ry not found, sk
29c70 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20  ipping...",..   
29c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
29ca0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cc0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
29cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ce0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29d00 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c  callback == null
29d10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
29d20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
29d30 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
29d40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29d50 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  !callback(..    
29d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d70 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
29d80 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
29d90 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
29da0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
29dc0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 63 6c 69  latformName, cli
29dd0 65 6e 74 44 61 74 61 2c 20 70 65 72 55 73 65 72  entData, perUser
29de0 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  , wow64,..      
29df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e00 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73        throwOnMis
29e10 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
29e20 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
29e30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
29e40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e60 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
29e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29e80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
29e90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
29ea0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29eb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29ec0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
29ed0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
29ee0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
29ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f30 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29f40 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 56     #region Per-V
29f50 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72  isual Studio Ver
29f60 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  sion Handling.. 
29f70 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
29f80 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
29f90 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20  alizeVsList(..  
29fa0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
29fb0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
29fc0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
29fd0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
29fe0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
29ff0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 56 73            ref Vs
2a000 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20 20  List vsList..   
2a010 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2a020 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a030 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d     if (vsList ==
2a040 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2a050 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 20 3d          vsList =
2a060 20 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a   new VsList();..
2a070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2a080 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79   (vsList.RootKey
2a090 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2a0a0 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
2a0b0 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74  t.RootKey = root
2a0c0 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Key;....        
2a0d0 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56      if (vsList.V
2a0e0 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
2a0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a110 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2a120 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
2a130 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
2a140 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2a150 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2a160 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2a170 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35 29  ration.NoVs2005)
2a180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a190 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2a1a0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2a1b0 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f  rsion(8, 0)); //
2a1c0 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20   2005....       
2a1d0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2a1e0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2a1f0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2a200 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29  ration.NoVs2008)
2a210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a220 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2a230 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2a240 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f  rsion(9, 0)); //
2a250 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20   2008....       
2a260 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2a270 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2a280 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2a290 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29  ration.NoVs2010)
2a2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a2b0 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2a2c0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2a2d0 72 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f  rsion(10, 0));//
2a2e0 20 32 30 31 30 0d 0a 0d 0a 20 20 20 20 20 20 20   2010....       
2a2f0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2a300 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2a310 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2a320 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 32 29  ration.NoVs2012)
2a330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a340 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2a350 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2a360 72 73 69 6f 6e 28 31 31 2c 20 30 29 29 3b 2f 2f  rsion(11, 0));//
2a370 20 32 30 31 32 0d 0a 0d 0a 20 20 20 20 20 20 20   2012....       
2a380 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2a390 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2a3a0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2a3b0 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 33 29  ration.NoVs2013)
2a3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a3d0 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2a3e0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2a3f0 72 73 69 6f 6e 28 31 32 2c 20 30 29 29 3b 2f 2f  rsion(12, 0));//
2a400 20 32 30 31 33 0d 0a 20 20 20 20 20 20 20 20 20   2013..         
2a410 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2a420 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2a430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a470 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2a480 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2a490 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28  l HaveVsVersion(
2a4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2a4b0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2a4c0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
2a4d0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
2a4e0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2a4f0 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
2a500 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
2a510 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
2a520 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a530 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2a540 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2a550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2a560 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
2a570 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2a580 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a590 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
2a5a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2a5b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a5c0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2a5d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
2a5e0 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
2a5f0 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
2a600 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c  suffix, perUser,
2a610 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2a620 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2a630 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2a640 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2a650 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2a660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a670 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2a680 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
2a690 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2a6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6c0 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
2a6d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a6e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2a6f0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
2a700 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
2a710 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48 65  lue = RegistryHe
2a720 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a  lper.GetValue(..
2a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a740 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c      key, "Instal
2a750 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c 20 77 68 61  lDir", null, wha
2a760 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
2a770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a780 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69 73    if (!(value is
2a790 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20   string))..     
2a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a7b0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7d0 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
2a7e0 20 3d 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65   = (string)value
2a7f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a800 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
2a810 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
2a820 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
2a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a840 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
2a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a860 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45  if (!Directory.E
2a870 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29  xists(directory)
2a880 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a890 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2a8a0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
2a8b0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2a8c0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2a8d0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
2a8e0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2a8f0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2a900 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2a910 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2a920 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2a930 20 20 20 20 20 20 20 20 20 20 20 22 56 69 73 75             "Visu
2a940 61 6c 20 53 74 75 64 69 6f 20 7b 30 7d 20 66 6f  al Studio {0} fo
2a950 75 6e 64 20 69 6e 20 64 69 72 65 63 74 6f 72 79  und in directory
2a960 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20   {1}.",..       
2a970 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
2a980 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f  Display(vsVersio
2a990 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  n), ForDisplay(d
2a9a0 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20  irectory)),..   
2a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2a9d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a9e0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2a9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2aa00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2aa10 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2aa60 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64  .        [Method
2aa70 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
2aa80 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
2aa90 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  g)]..        pri
2aaa0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2aab0 20 46 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f   ForEachVsVersio
2aac0 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20  nRegistry(..    
2aad0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2aae0 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a  stry registry,..
2aaf0 20 20 20 20 20 20 20 20 20 20 20 20 56 73 4c 69              VsLi
2ab00 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20 20 20 20  st vsList,..    
2ab10 20 20 20 20 20 20 20 20 56 69 73 75 61 6c 53 74          VisualSt
2ab20 75 64 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c  udioRegistryCall
2ab30 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a  back callback,..
2ab40 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2ab50 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
2ab60 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
2ab70 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
2ab80 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
2ab90 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
2aba0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
2abb0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2abc0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
2abd0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
2abe0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
2abf0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2ac00 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2ac10 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2ac20 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2ac30 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2ac40 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2ac50 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2ac60 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67           if (reg
2ac70 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  istry == null)..
2ac80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2aca0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2acb0 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20  registry";..    
2acc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2acd0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2ace0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2acf0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69          if (vsLi
2ad00 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
2ad10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ad20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2ad30 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2ad40 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20  list";..        
2ad50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2ad60 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2ad70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2ad80 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2ad90 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 76 73  Key rootKey = vs
2ada0 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d  List.RootKey;...
2adb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2adc0 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  (rootKey == null
2add0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ade0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2adf0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2ae00 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20  id root key";.. 
2ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ae20 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2ae30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2ae40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2ae50 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b  IsSupportedRootK
2ae60 65 79 28 72 65 67 69 73 74 72 79 2c 20 72 6f 6f  ey(registry, roo
2ae70 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tKey))..        
2ae80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ae90 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2aea0 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65  root key must be
2aeb0 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72   per-user or per
2aec0 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20  -machine";..    
2aed0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2aee0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2aef0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2af00 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69          if (vsLi
2af10 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e  st.Versions == n
2af20 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2af30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2af40 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
2af50 20 56 53 20 76 65 72 73 69 6f 6e 73 20 66 6f 75   VS versions fou
2af60 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
2af70 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2af80 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2af90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2afa0 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69    foreach (Versi
2afb0 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20 69 6e 20  on vsVersion in 
2afc0 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 29  vsList.Versions)
2afd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2afe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aff0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2b000 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2b010 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
2b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b030 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2b040 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2b050 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b070 20 20 20 20 22 76 73 56 65 72 73 69 6f 6e 20 3d      "vsVersion =
2b080 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {0}", ForDispla
2b090 79 28 76 73 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  y(vsVersion)),..
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0b0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2b0c0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2b0d0 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65         if (!Have
2b0e0 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  VsVersion(..    
2b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b100 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
2b110 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
2b120 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
2b130 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b150 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2b160 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b180 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2b190 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2b1a0 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
2b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1c0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2b1d0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2b1e0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
2b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56 69               "Vi
2b200 73 75 61 6c 20 53 74 75 64 69 6f 20 76 65 72 73  sual Studio vers
2b210 69 6f 6e 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73  ion not found, s
2b220 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20  kipping...",..  
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b240 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2b250 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2b260 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2b270 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
2b280 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b290 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2b2a0 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c  (callback == nul
2b2b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2b2c0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
2b2d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b2e0 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61       if (!callba
2b2f0 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
2b300 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2b310 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
2b320 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
2b330 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  , clientData,.. 
2b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b350 20 20 20 20 20 20 20 70 65 72 55 73 65 72 2c 20         perUser, 
2b360 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69  wow64, throwOnMi
2b370 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76  ssing, whatIf, v
2b380 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3a0 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
2b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2b3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b3d0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2b3e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2b3f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2b400 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2b410 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2b420 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2b430 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2b440 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2b450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b490 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2b4a0 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74  egion Configurat
2b4b0 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e  ion File Handlin
2b4c0 67 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  g..        [Meth
2b4d0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2b4e0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2b4f0 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
2b500 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2b510 6f 6c 20 41 64 64 44 62 50 72 6f 76 69 64 65 72  ol AddDbProvider
2b520 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
2b530 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
2b540 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
2b550 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72      string invar
2b560 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  iant,..         
2b570 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
2b580 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2b590 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  ing description,
2b5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2b5b0 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a  ring typeName,..
2b5c0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
2b5d0 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c  mblyName assembl
2b5e0 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
2b5f0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2b600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2b610 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2b620 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f           ref boo
2b630 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20  l saved,..      
2b640 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2b650 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2b660 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2b670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2b680 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65  ol dirty = false
2b690 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58  ;..            X
2b6a0 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d  mlDocument docum
2b6b0 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63  ent = new XmlDoc
2b6c0 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  ument();....    
2b6d0 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
2b6e0 2e 50 72 65 73 65 72 76 65 57 68 69 74 65 73 70  .PreserveWhitesp
2b6f0 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ace = true;..   
2b700 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
2b710 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29  t.Load(fileName)
2b720 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b730 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45   XmlElement addE
2b740 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
2b750 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
2b760 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de(..           
2b770 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
2b780 61 74 28 58 50 61 74 68 46 6f 72 41 64 64 45 6c  at(XPathForAddEl
2b790 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74  ement, invariant
2b7a0 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74  )) as XmlElement
2b7b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b7c0 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20   if (addElement 
2b7d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2b7e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b7f0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
2b800 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d  ] elementNames =
2b810 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b820 20 20 20 20 20 20 20 20 22 73 79 73 74 65 6d 2e          "system.
2b830 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76 69 64  data", "DbProvid
2b840 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a 20 20  erFactories"..  
2b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b                };
2b860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b870 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70      XmlElement p
2b880 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d  reviousElement =
2b890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b8a0 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44        document.D
2b8b0 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20  ocumentElement; 
2b8c0 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  /* configuration
2b8d0 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
2b8e0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
2b8f0 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61  string elementNa
2b900 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d  me in elementNam
2b910 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es)..           
2b920 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b930 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
2b940 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f 75  lement = previou
2b950 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53  sElement.SelectS
2b960 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20  ingleNode(..    
2b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b980 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29      elementName)
2b990 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
2b9a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b9b0 20 20 20 20 20 20 20 69 66 20 28 61 64 64 45 6c         if (addEl
2b9c0 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
2b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2ba00 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75  ddElement = docu
2ba10 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65  ment.CreateEleme
2ba20 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
2ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba40 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74   elementName, St
2ba50 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a  ring.Empty);....
2ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba70 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73          previous
2ba80 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68  Element.AppendCh
2ba90 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b  ild(addElement);
2baa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bab0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2bad0 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d  reviousElement =
2bae0 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20   addElement;..  
2baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2bb00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2bb10 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20     addElement = 
2bb20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45  document.CreateE
2bb30 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20  lement(..       
2bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64               "ad
2bb50 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  d", String.Empty
2bb60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2bb70 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c        previousEl
2bb80 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c  ement.AppendChil
2bb90 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a  d(addElement);..
2bba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bbb0 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
2bbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2bbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2bbe0 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
2bbf0 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
2bc00 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22 29  ttribute("name")
2bc10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2bc20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53 74 72         name, Str
2bc30 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
2bc40 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20  dinal))..       
2bc50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2bc60 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
2bc70 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28  nt.SetAttribute(
2bc80 22 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a  "name", name);..
2bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bca0 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2bcb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2bcc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2bcd0 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
2bce0 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
2bcf0 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e  ribute("invarian
2bd00 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t"),..          
2bd10 20 20 20 20 20 20 20 20 20 20 69 6e 76 61 72 69            invari
2bd20 61 6e 74 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ant, StringCompa
2bd30 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
2bd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd60 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74  addElement.SetAt
2bd70 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 61  tribute("invaria
2bd80 6e 74 22 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b  nt", invariant);
2bd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bda0 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
2bdb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2bdc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2bdd0 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
2bde0 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
2bdf0 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69  ttribute("descri
2be00 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20  ption"),..      
2be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2be20 73 63 72 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e  scription, Strin
2be30 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
2be40 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nal))..         
2be50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2be60 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
2be70 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 64  .SetAttribute("d
2be80 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73  escription", des
2be90 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20  cription);..    
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
2beb0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
2bec0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2bed0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2bee0 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74  ullTypeName = St
2bef0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
2bf00 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  , {1}",..       
2bf10 20 20 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d           typeNam
2bf20 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29  e, assemblyName)
2bf30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2bf40 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
2bf50 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47  als(addElement.G
2bf60 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70  etAttribute("typ
2bf70 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e"),..          
2bf80 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c 54 79            fullTy
2bf90 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f  peName, StringCo
2bfa0 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
2bfb0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2bfc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2bfd0 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65     addElement.Se
2bfe0 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70 65  tAttribute("type
2bff0 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29  ", fullTypeName)
2c000 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c010 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
2c020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c030 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2c040 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74  f (dirty || what
2c050 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
2c060 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c070 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
2c080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c090 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
2c0a0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
2c0b0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
2c0c0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
2c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2c0e0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2c0f0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2c100 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c120 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d     "addElement =
2c130 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {0}", ForDispla
2c140 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 29 2c 0d  y(addElement)),.
2c150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c160 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2c170 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2c180 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2c190 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
2c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
2c1b0 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65  cument.Save(file
2c1c0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2c1d0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 73 4d            filesM
2c1e0 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20  odified++;....  
2c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
2c200 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ved = true;..   
2c210 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c220 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c230 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2c240 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2c250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c290 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c2a0 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
2c2b0 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
2c2c0 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
2c2d0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2c2e0 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62  ic bool RemoveDb
2c2f0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
2c300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2c310 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
2c320 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2c330 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20  ng invariant,.. 
2c340 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c350 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2c360 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2c370 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2c380 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d  ref bool saved,.
2c390 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2c3a0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2c3b0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2c3c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c3d0 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20       bool dirty 
2c3e0 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
2c3f0 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e        XmlDocumen
2c400 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77  t document = new
2c410 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d   XmlDocument();.
2c420 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ...            d
2c430 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65  ocument.Preserve
2c440 57 68 69 74 65 73 70 61 63 65 20 3d 20 74 72 75  Whitespace = tru
2c450 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2c460 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69  document.Load(fi
2c470 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
2c480 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65          XmlEleme
2c490 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20  nt addElement = 
2c4a0 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53  document.SelectS
2c4b0 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20  ingleNode(..    
2c4c0 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
2c4d0 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46  ng.Format(XPathF
2c4e0 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e  orAddElement, in
2c4f0 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c  variant)) as Xml
2c500 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
2c510 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64 45          if (addE
2c520 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d  lement != null).
2c530 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c550 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e  addElement.Paren
2c560 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c  tNode.RemoveChil
2c570 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a  d(addElement);..
2c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c590 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2c5a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c5b0 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
2c5c0 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65 45 6c 65  lement removeEle
2c5d0 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
2c5e0 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
2c5f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c600 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
2c610 28 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45  (XPathForRemoveE
2c620 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e  lement, invarian
2c630 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  t)) as XmlElemen
2c640 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
2c650 20 20 69 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d    if (removeElem
2c660 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent != null)..  
2c670 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c680 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d               rem
2c690 6f 76 65 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e  oveElement.Paren
2c6a0 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c  tNode.RemoveChil
2c6b0 64 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29  d(removeElement)
2c6c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c6d0 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
2c6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c6f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2c700 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74  f (dirty || what
2c710 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
2c720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c730 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
2c740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c750 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
2c760 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
2c770 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
2c780 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
2c790 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2c7a0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2c7b0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2c7c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7e0 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d     "addElement =
2c7f0 20 7b 30 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d   {0}, removeElem
2c800 65 6e 74 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ent = {1}",..   
2c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c820 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2c830 61 64 64 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72  addElement), For
2c840 44 69 73 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c  Display(removeEl
2c850 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20  ement)),..      
2c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c870 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
2c880 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c890 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
2c8a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2c8b0 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
2c8c0 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Save(fileName);.
2c8d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c8e0 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64     filesModified
2c8f0 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
2c900 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74         saved = t
2c910 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2c920 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2c930 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
2c940 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2c950 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2c9a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2c9b0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
2c9c0 63 65 73 73 44 62 50 72 6f 76 69 64 65 72 46 61  cessDbProviderFa
2c9d0 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
2c9e0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
2c9f0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2ca00 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61    string invaria
2ca10 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
2ca20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
2ca30 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2ca40 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
2ca50 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2ca60 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
2ca70 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
2ca80 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
2ca90 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2caa0 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
2cab0 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
2cac0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2cad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2cae0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2caf0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
2cb00 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
2cb10 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2cb20 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2cb30 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2cb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2cb50 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
2cb60 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2cb70 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2cb80 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2cb90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2cba0 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
2cbb0 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
2cbc0 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
2cbd0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
2cbe0 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
2cbf0 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
2cc00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2cc10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2cc20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2cc30 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20  valid framework 
2cc40 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b 20  config callback 
2cc50 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
2cc60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2cc70 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2cc80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2cc90 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
2cca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccc0 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50  return RemoveDbP
2ccd0 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
2cce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ccf0 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
2cd00 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66  nvariant, whatIf
2cd10 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
2cd20 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2cd30 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
2cd40 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20  rror) &&..      
2cd50 20 20 20 20 20 20 20 20 20 20 41 64 64 44 62 50            AddDbP
2cd60 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
2cd70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cd80 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
2cd90 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20  nvariant, name, 
2cda0 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70  description, typ
2cdb0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
2cdd0 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  mblyName, whatIf
2cde0 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
2cdf0 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29  aved, ref error)
2ce00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2ce10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
2ce20 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2ce30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ce40 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
2ce50 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
2ce60 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2ce70 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
2ce80 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61  , invariant, wha
2ce90 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
2cea0 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20  f saved,..      
2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2cec0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
2ced0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2cee0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2cef0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2cf00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2cf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2cf50 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73        #region As
2cf60 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20 48  sembly Folders H
2cf70 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
2cf80 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2cf90 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62  string GetAssemb
2cfa0 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65  lyFoldersKeyName
2cfb0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2cfc0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
2cfd0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2cfe0 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
2cff0 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
2d000 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2d010 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
2d020 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2d030 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2d040 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2d050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2d060 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2d070 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2d080 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2d090 20 54 68 69 73 20 72 65 67 69 73 74 72 79 20 6b   This registry k
2d0a0 65 79 20 61 70 70 65 61 72 73 20 74 6f 20 61 6c  ey appears to al
2d0b0 77 61 79 73 20 62 65 20 33 32 2d 62 69 74 20 6f  ways be 32-bit o
2d0c0 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nly..           
2d0d0 20 2f 2f 20 20 20 20 20 20 20 28 69 2e 65 2e 20   //       (i.e. 
2d0e0 70 72 6f 62 61 62 6c 79 20 62 65 63 61 75 73 65  probably because
2d0f0 20 69 74 20 69 73 20 6f 6e 6c 79 20 75 73 65 64   it is only used
2d100 20 62 79 20 56 69 73 75 61 6c 0d 0a 20 20 20 20   by Visual..    
2d110 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2d120 20 53 74 75 64 69 6f 2c 20 77 68 69 63 68 20 69   Studio, which i
2d130 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6c 77 61  s currently alwa
2d140 79 73 20 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e  ys 32-bit only).
2d150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d170 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53  ring format = !S
2d180 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
2d190 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  pty(platformName
2d1a0 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
2d1b0 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f       "{0}\\Micro
2d1c0 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c  soft\\{1}\\v{2}\
2d1d0 5c 7b 33 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f  \{3}\\AssemblyFo
2d1e0 6c 64 65 72 73 45 78 22 20 3a 0d 0a 20 20 20 20  ldersEx" :..    
2d1f0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
2d200 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
2d210 5c 5c 76 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79  \\v{2}\\Assembly
2d220 46 6f 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20  FoldersEx";.... 
2d230 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2d240 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
2d250 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b  format, GetRootK
2d260 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20  eyName(perUser, 
2d270 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20  wow64),..       
2d280 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2d290 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2d2a0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2d2b0 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  rmName);..      
2d2c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2d2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d310 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d320 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2d330 20 62 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d   bool AddToAssem
2d340 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20  blyFolders(..   
2d350 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2d360 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2d370 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2d380 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
2d390 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2d3a0 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
2d3b0 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
2d3c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2d3d0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
2d3e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2d3f0 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
2d400 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2d410 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
2d420 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
2d430 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
2d440 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2d450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2d460 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2d470 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2d480 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2d490 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2d4a0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2d4b0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2d4c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2d4d0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41  g keyName = GetA
2d4e0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65  ssemblyFoldersKe
2d4f0 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
2d500 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2d510 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
2d520 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
2d530 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d  mName, perUser,.
2d540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d550 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2d560 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2d570 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2d580 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2d590 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2d5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d5b0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2d5c0 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61  yName, true, wha
2d5d0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2d600 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2d610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d620 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d630 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2d640 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d660 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2d670 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2d680 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2d690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d6a0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2d6b0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
2d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2d6e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d6f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2d700 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2d710 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
2d720 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
2d730 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
2d740 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2d760 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77  y, subKeyName, w
2d770 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2d780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d790 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d7a0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
2d7b0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2d7f0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2d800 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d820 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
2d830 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
2d840 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
2d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d860 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
2d870 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  bKeyName);....  
2d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d890 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2d8a0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2d8b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8d0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2d8e0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d900 20 20 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c      subKey, null
2d910 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 61  , directory, wha
2d920 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
2d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d940 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2d950 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d960 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2d970 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d980 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
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 0d 0a 0d 0a 20 20  //////////....  
2d9d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2d9e0 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
2d9f0 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64  FromAssemblyFold
2da00 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
2da10 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2da20 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
2da30 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2da40 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
2da50 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2da60 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
2da70 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2da80 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
2da90 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
2daa0 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
2dab0 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
2dac0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
2dad0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2dae0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2daf0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
2db00 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
2db10 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2db20 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2db30 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2db40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2db50 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
2db60 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2db70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2db80 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
2db90 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d  yName = GetAssem
2dba0 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
2dbb0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2dbc0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
2dbd0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
2dbe0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
2dbf0 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  e, perUser,..   
2dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77               wow
2dc10 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
2dc20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2dc30 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
2dc40 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2dc50 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc70 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2dc80 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  e, true, whatIf,
2dc90 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2dca0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2dcb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
2dcc0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcf0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2dd00 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2dd30 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2dd40 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
2dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd60 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2dd70 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
2dd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd90 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ddb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ddc0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2ddd0 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28  er.DeleteSubKey(
2dde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ddf0 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
2de00 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  yName, throwOnMi
2de10 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76  ssing, whatIf, v
2de20 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
2de30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2de40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2de50 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
2de60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2de70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2deb0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2dec0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2ded0 20 50 72 6f 63 65 73 73 41 73 73 65 6d 62 6c 79   ProcessAssembly
2dee0 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
2def0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2df00 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
2df10 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2df20 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2df30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2df40 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
2df50 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2df60 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
2df70 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
2df80 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
2df90 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2dfa0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2dfb0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2dfc0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2dfd0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2dfe0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2dff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2e000 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2e010 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2e020 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2e030 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2e040 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2e050 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2e060 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
2e070 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
2e080 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
2e090 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
2e0a0 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
2e0b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e0c0 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
2e0d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2e0f0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
2e100 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63  ramework callbac
2e110 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
2e120 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2e130 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2e140 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e150 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
2e160 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2e170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e180 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46    return RemoveF
2e190 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  romAssemblyFolde
2e1a0 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
2e1b0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2e1c0 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
2e1d0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2e1e0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
2e1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e200 20 20 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a        LegacyProj
2e210 65 63 74 4e 61 6d 65 2c 20 70 65 72 55 73 65 72  ectName, perUser
2e220 2c 20 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20  , wow64, false, 
2e230 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2e240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e250 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2e260 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
2e270 20 20 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62       AddToAssemb
2e280 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
2e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2a0 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
2e2b0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2e2c0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2e2d0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
2e2f0 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58  jectName, pair.X
2e300 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2e310 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2e320 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2e330 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
2e340 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2e350 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2e360 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2e370 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e380 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
2e390 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f  veFromAssemblyFo
2e3a0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2e3c0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
2e3d0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2e3e0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2e3f0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2e400 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74           Project
2e410 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77  Name, perUser, w
2e420 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  ow64, throwOnMis
2e430 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 0d 0a 20  sing, whatIf,.. 
2e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e450 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20     verbose, ref 
2e460 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
2e470 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2e480 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2e490 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2e4a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2e4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2e4f0 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75      #region Visu
2e500 61 6c 20 53 74 75 64 69 6f 20 48 61 6e 64 6c 69  al Studio Handli
2e510 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
2e520 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
2e530 67 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61  g GetVsRootKeyNa
2e540 6d 65 28 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 0d 0a 20 20 20 20 20 20 20 20   wow64..        
2e580 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2e590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2e5a0 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
2e5b0 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f  at("{0}\\Microso
2e5c0 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f  ft\\VisualStudio
2e5d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2e5e0 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61      GetRootKeyNa
2e5f0 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
2e600 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  4));..        }.
2e610 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2e620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e660 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2e670 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
2e680 69 6e 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  ing GetVsKeyName
2e690 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  (..            V
2e6a0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2e6b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2e6c0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
2e6d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2e6e0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2e6f0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2e700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2e710 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2e720 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
2e730 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
2e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e750 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
2e760 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e770 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
2e780 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e790 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d 22     "{0}\\{1}{2}"
2e7a0 2c 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61  , GetVsRootKeyNa
2e7b0 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
2e7c0 34 29 2c 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  4), vsVersion,..
2e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7e0 73 75 66 66 69 78 29 3b 0d 0a 20 20 20 20 20 20  suffix);..      
2e7f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2e800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e840 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2e850 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c    #region Visual
2e860 20 53 74 75 64 69 6f 20 44 61 74 61 20 53 6f 75   Studio Data Sou
2e870 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  rce Handling..  
2e880 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2e890 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44  atic bool AddVsD
2e8a0 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
2e8b0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2e8c0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2e8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2e8e0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2e8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2e900 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
2e910 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2e920 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2e930 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2e940 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2e950 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2e960 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e970 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2e980 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2e990 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2e9a0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2e9b0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2e9c0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2e9d0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
2e9e0 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
2e9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea10 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2ea20 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
2ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ea40 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2ea50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2ea60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2ea70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
2ea80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eaa0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2eab0 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
2eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ead0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2eae0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2eaf0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2eb00 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
2eb10 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
2eb20 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55  on, suffix, perU
2eb30 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ser, wow64);....
2eb40 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2eb50 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
2eb60 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
2eb70 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2eb80 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2eb90 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2eba0 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
2ebb0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2ebc0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2ebd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ebe0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
2ebf0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2ec00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2ec20 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2ec30 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2ec50 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2ec60 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2ec70 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ec90 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
2eca0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ecb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ecc0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2ecd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
2ecf0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2ed00 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
2ed10 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2ed20 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed40 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63   key, "DataSourc
2ed50 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
2ed60 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2ed80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed90 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
2eda0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2edc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2edd0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2ede0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2edf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2ee10 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2ee20 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2ee30 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20  DataSources",.. 
2ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee50 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
2ee60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ee70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ee80 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2eea0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2eeb0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2eec0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
2eed0 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a  ataSourceKey =..
2eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eef0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2ef00 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
2ef10 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d  eSubKey(subKey,.
2ef20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2ef40 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
2ef50 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2ef60 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef80 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2ef90 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2efa0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efc0 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61 53         if (dataS
2efd0 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c  ourceKey == null
2efe0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2eff0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f010 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2f020 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2f030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f050 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
2f060 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
2f070 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79  : {0}\\{1}", key
2f080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0a0 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53     package.DataS
2f0b0 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  ourceId.ToString
2f0c0 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
2f0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f0f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f110 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f130 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2f140 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
2f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f160 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75 72          dataSour
2f170 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72  ceKey, null, Str
2f180 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1a0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61           "{0} Da
2f1b0 74 61 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72  tabase File", Pr
2f1c0 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74  ojectName), what
2f1d0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1f0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f210 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f230 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
2f240 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20  value is new as 
2f250 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20  of 1.0.83.0...  
2f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f270 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f290 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2f2a0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
2f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2c0 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75 72          dataSour
2f2d0 63 65 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 50  ceKey, "DefaultP
2f2e0 72 6f 76 69 64 65 72 22 2c 0d 0a 20 20 20 20 20  rovider",..     
2f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f300 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
2f310 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
2f320 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2f330 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
2f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f350 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2f360 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2f380 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2f390 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 53 6f  ateSubKey(dataSo
2f3a0 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20  urceKey,..      
2f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3c0 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
2f3d0 6d 61 74 28 22 53 75 70 70 6f 72 74 69 6e 67 50  mat("SupportingP
2f3e0 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d  roviders\\{0}",.
2f3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f400 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2f410 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
2f420 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
2f430 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20  dFormat)),..    
2f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f450 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2f460 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2f480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f490 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2f4a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2f4b0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2f4c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f4d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2f4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f520 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2f530 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
2f540 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  veVsDataSource(.
2f550 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2f560 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2f570 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
2f580 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
2f590 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2f5a0 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
2f5b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
2f5c0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
2f5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2f5e0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
2f5f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2f600 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2f610 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2f620 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2f630 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2f640 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2f650 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2f660 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2f670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2f680 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
2f690 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2f6a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f6b0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2f6c0 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e  valid VS version
2f6d0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2f6e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2f6f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2f700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f710 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
2f720 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2f730 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f740 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2f750 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
2f760 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2f770 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2f780 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2f790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f7a0 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
2f7b0 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
2f7c0 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
2f7d0 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29   perUser, wow64)
2f7e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f7f0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2f800 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
2f810 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2f820 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2f840 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
2f850 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
2f860 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2f870 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f880 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
2f890 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2f8a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8c0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2f8d0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8f0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2f900 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2f910 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
2f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f930 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2f940 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f960 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2f970 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2f980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f990 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2f9a0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
2f9b0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2f9c0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9e0 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
2f9f0 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20  Sources", true, 
2fa00 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2fa10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2fa20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2fa30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
2fa40 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
2fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2fa80 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2fa90 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fab0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2fac0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2fad0 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73  {0}\\DataSources
2fae0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb00 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
2fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2fb60 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
2fb70 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
2fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb90 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
2fba0 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
2fbb0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
2fbc0 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
2fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbe0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2fbf0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
2fc00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2fc10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2fc20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2fc30 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
2fc40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2fc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2fca0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2fcb0 50 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75  ProcessVsDataSou
2fcc0 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
2fcd0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2fce0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
2fcf0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2fd00 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
2fd10 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
2fd20 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
2fd30 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
2fd40 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
2fd50 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
2fd60 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
2fd70 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2fd80 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2fd90 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2fda0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
2fdb0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
2fdc0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2fdd0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2fde0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2fdf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2fe00 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2fe10 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2fe20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2fe30 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
2fe40 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2fe50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fe60 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2fe70 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61  = "invalid VS pa
2fe80 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20  ckage";..       
2fe90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2fea0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2feb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2fec0 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
2fed0 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
2fee0 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
2fef0 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
2ff00 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
2ff10 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
2ff20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2ff30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ff40 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2ff50 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
2ff60 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
2ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ff80 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2ff90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ffa0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
2ffb0 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
2ffc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ffd0 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
2ffe0 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
2fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30000 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
30010 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61  sion, suffix, pa
30020 63 6b 61 67 65 2c 20 70 65 72 55 73 65 72 2c 20  ckage, perUser, 
30030 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
30040 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
30050 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
30060 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
30070 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30080 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
30090 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
300a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
300b0 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75   RemoveVsDataSou
300c0 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
300d0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
300e0 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  y, vsVersion, su
300f0 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70  ffix, package, p
30100 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a  erUser, wow64,..
30110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30120 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
30130 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
30140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30150 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
30160 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
30170 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
30180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
301d0 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
301e0 69 6f 20 44 61 74 61 20 50 72 6f 76 69 64 65 72  io Data Provider
301f0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
30200 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
30210 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61  c bool AddVsData
30220 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
30230 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
30240 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
30250 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
30260 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
30270 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
30280 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
30290 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
302a0 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
302b0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
302c0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
302d0 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
302e0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
302f0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
30300 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
30310 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
30320 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
30330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
30340 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
30350 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
30360 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30370 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
30380 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
30390 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
303a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
303b0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
303c0 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
303d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
303e0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
303f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30400 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
30410 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
30420 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30430 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
30440 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
30450 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
30460 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30470 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
30480 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30490 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
304a0 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
304b0 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
304c0 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72   suffix, perUser
304d0 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
304e0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
304f0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
30500 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
30510 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
30520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30530 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
30540 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
30550 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
30560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30580 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
30590 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
305a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
305b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
305c0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
305d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
305e0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
305f0 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
30600 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
30610 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
30620 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
30630 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
30640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30650 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
30660 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
30670 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30680 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
30690 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
306a0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
306b0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
306c0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
306d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
306e0 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65 72  y, "DataProvider
306f0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
30700 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
30710 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
30720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30730 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
30740 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30750 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
30760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30770 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
30780 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
30790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307a0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
307b0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
307c0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44  stry key: {0}\\D
307d0 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a  ataProviders",..
307e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307f0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
30800 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30810 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
30820 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
30830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30840 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30850 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
30860 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
30870 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20  dataProviderKey 
30880 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
30890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
308a0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
308b0 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
308c0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
308d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308e0 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76  package.DataProv
308f0 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28  iderId.ToString(
30900 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
30910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30920 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
30930 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
30940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30960 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30970 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20  dataProviderKey 
30980 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
30990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
309b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309c0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
309d0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
309e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309f0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
30a00 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
30a10 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
30a20 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  }", key,..      
30a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a40 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
30a50 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
30a60 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
30a70 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  rmat));....     
30a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
30aa0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
30ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
30ac0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30ad0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
30ae0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
30af0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
30b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b10 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
30b20 2c 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74  , null, Descript
30b30 69 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  ion, whatIf,..  
30b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b50 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
30b60 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
30b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30b80 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
30b90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
30ba0 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65 20 69  TE: This value i
30bb0 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e 30 2e  s new as of 1.0.
30bc0 38 33 2e 30 2e 20 20 48 6f 77 65 76 65 72 2c 0d  83.0.  However,.
30bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30be0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
30bf0 20 20 69 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79    it should only
30c00 20 62 65 20 73 65 74 20 69 66 20 74 68 65 20 70   be set if the p
30c10 61 63 6b 61 67 65 20 61 73 73 65 6d 62 6c 79 0d  ackage assembly.
30c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c30 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
30c40 20 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 61 73    and all the as
30c50 73 65 6d 62 6c 69 65 73 20 69 74 20 72 65 66 65  semblies it refe
30c60 72 73 20 74 6f 20 61 72 65 20 62 65 69 6e 67 0d  rs to are being.
30c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c80 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
30c90 20 20 70 6c 61 63 65 64 20 69 6e 74 6f 20 74 68    placed into th
30ca0 65 20 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c  e global assembl
30cb0 79 20 63 61 63 68 65 2e 0d 0a 20 20 20 20 20 20  y cache...      
30cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cd0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
30ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
30cf0 20 28 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c   (package.Global
30d00 41 73 73 65 6d 62 6c 79 43 61 63 68 65 29 0d 0a  AssemblyCache)..
30d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d40 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
30d50 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
30d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d80 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
30d90 2c 20 22 41 73 73 65 6d 62 6c 79 22 2c 0d 0a 20  , "Assembly",.. 
30da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
30dc0 61 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e  ackage.AssemblyN
30dd0 61 6d 65 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d  ame.ToString(),.
30de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e00 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
30e10 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
30e20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30e40 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
30e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e60 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
30e70 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20  is value is new 
30e80 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d  as of 1.0.83.0..
30e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30ea0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
30eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ec0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
30ed0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
30ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ef0 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
30f00 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73  roviderKey, "Ass
30f10 6f 63 69 61 74 65 64 53 6f 75 72 63 65 22 2c 0d  ociatedSource",.
30f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30f30 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
30f40 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
30f50 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
30f60 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
30f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f80 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
30f90 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
30fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fb0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
30fc0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
30fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fe0 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
30ff0 69 64 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69  iderKey, "Invari
31000 61 6e 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69  antName", Invari
31010 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  antName,..      
31020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31030 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
31040 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
31050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31060 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
31070 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
31080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31090 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
310a0 76 69 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e  viderKey, "Techn
310b0 6f 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20  ology",..       
310c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310d0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f       package.Ado
310e0 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e  NetTechnologyId.
310f0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
31100 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
31110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31120 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
31130 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
31140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31150 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
31160 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
31170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31180 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
31190 65 72 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65  erKey, "CodeBase
311a0 22 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61  ", fileName, wha
311b0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
311c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311d0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
311e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311f0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
31200 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
31210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
31230 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46  aProviderKey, "F
31240 61 63 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d  actoryService",.
31250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31260 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
31270 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54  kage.ServiceId.T
31280 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
31290 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  at), whatIf,..  
312a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312b0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
312c0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
312d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
312e0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
312f0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
31300 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
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 22 53 75 70 70 6f 72           "Suppor
31330 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
31340 43 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74  ConnectionUICont
31350 72 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  rol",..         
31360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31370 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
31380 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
31390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313a0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
313b0 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
313c0 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
313d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313e0 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
313f0 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
31400 61 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65  aConnectionPrope
31410 72 74 69 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  rties",..       
31420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31430 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
31440 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
31450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31460 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
31470 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
31480 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
31490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314a0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
314b0 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
314c0 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70  ataConnectionSup
314d0 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a  port", whatIf,..
314e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314f0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
31500 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
31510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31520 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
31530 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
31540 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
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 20 20 20 22 53 75 70 70             "Supp
31570 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
31580 74 61 4f 62 6a 65 63 74 53 75 70 70 6f 72 74 22  taObjectSupport"
31590 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
315a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315b0 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
315c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
315d0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
315e0 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
315f0 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
31600 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
31610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31620 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
31630 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 56 69 65  Objects\\DataVie
31640 77 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49  wSupport", whatI
31650 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
31660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31670 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
31680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
31690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
316a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
316b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
316c0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
316d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
316e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
316f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
31730 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
31740 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
31750 76 65 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  veVsDataProvider
31760 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
31770 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
31780 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
31790 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
317a0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
317b0 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
317c0 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
317d0 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
317e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
317f0 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
31800 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
31810 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
31820 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
31830 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
31840 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
31850 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
31860 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
31870 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
31880 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31890 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
318a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
318b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
318c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
318d0 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69  invalid VS versi
318e0 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
318f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
31900 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
31910 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
31920 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
31930 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
31940 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
31950 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  x, perUser, wow6
31960 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
31970 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
31980 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
31990 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
319a0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
319b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319c0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
319d0 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
319e0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
319f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31a00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
31a10 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
31a20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
31a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a40 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
31a50 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
31a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a70 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
31a80 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
31a90 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
31aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ab0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
31ac0 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
31ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ae0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
31af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
31b00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31b10 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
31b20 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
31b30 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
31b40 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
31b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b60 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61          key, "Da
31b70 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72  taProviders", tr
31b80 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
31b90 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
31ba0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
31bc0 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
31bd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31be0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c00 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
31c10 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
31c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c30 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
31c40 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
31c50 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f  ey: {0}\\DataPro
31c60 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20  viders",..      
31c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c80 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
31c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ca0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
31cb0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
31cc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ce0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
31cf0 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  r.DeleteSubKeyTr
31d00 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
31d20 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74  Key, package.Dat
31d30 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
31d40 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
31d50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31d60 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
31d70 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
31d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
31d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
31da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
31db0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
31dc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
31dd0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
31de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
31e20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
31e30 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56  ic bool ProcessV
31e40 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
31e50 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
31e60 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
31e70 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
31e80 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
31e90 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
31ea0 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
31eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
31ec0 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
31ed0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
31ee0 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31f00 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
31f10 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
31f20 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
31f30 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
31f40 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
31f50 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
31f60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31f70 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
31f80 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
31f90 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
31fa0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
31fb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
31fc0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
31fd0 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
31fe0 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
31ff0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
32000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32010 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
32020 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
32030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32040 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
32050 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64  id VS callback d
32060 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
32070 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
32080 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
32090 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
320a0 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
320b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
320c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
320d0 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 50  eturn AddVsDataP
320e0 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
32100 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
32110 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67  , suffix, packag
32120 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55 73  e, pair.X, perUs
32130 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
32140 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c 20           wow64, 
32150 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
32160 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
32170 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
32180 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
32190 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
321a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
321b0 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74  turn RemoveVsDat
321c0 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20  aProvider(..    
321d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321e0 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
321f0 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b  on, suffix, pack
32200 61 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  age, perUser, wo
32210 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
32220 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
32230 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
32240 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
32250 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
32260 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
32270 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
32280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
322d0 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
322e0 6c 20 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65  l Studio Package
322f0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
32300 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
32310 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a  c void Initializ
32320 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  eVsPackage(..   
32330 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
32340 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
32350 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
32360 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65   bool globalAsse
32370 6d 62 6c 79 43 61 63 68 65 2c 0d 0a 20 20 20 20  mblyCache,..    
32380 20 20 20 20 20 20 20 20 72 65 66 20 50 61 63 6b          ref Pack
32390 61 67 65 20 70 61 63 6b 61 67 65 0d 0a 20 20 20  age package..   
323a0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
323b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
323c0 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
323d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
323e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
323f0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20          package 
32400 3d 20 6e 65 77 20 50 61 63 6b 61 67 65 28 29 3b  = new Package();
32410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32420 20 20 20 20 70 61 63 6b 61 67 65 2e 41 73 73 65      package.Asse
32430 6d 62 6c 79 4e 61 6d 65 20 3d 20 61 73 73 65 6d  mblyName = assem
32440 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  blyName;..      
32450 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
32460 65 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  e.GlobalAssembly
32470 43 61 63 68 65 20 3d 20 67 6c 6f 62 61 6c 41 73  Cache = globalAs
32480 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 0d 0a  semblyCache;....
32490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324a0 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65  package.AdoNetTe
324b0 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77  chnologyId = new
324c0 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20   Guid(..        
324d0 20 20 20 20 20 20 20 20 20 20 20 20 22 37 37 41              "77A
324e0 42 39 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d  B9A9D-78B9-4BA7-
324f0 39 31 41 43 2d 38 37 33 46 35 33 33 38 46 31 44  91AC-873F5338F1D
32500 32 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2");....        
32510 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
32520 50 61 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20  PackageId = new 
32530 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20  Guid(..         
32540 20 20 20 20 20 20 20 20 20 20 20 22 44 43 42 45             "DCBE
32550 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41  6C8D-0E57-4099-A
32560 31 38 33 2d 39 38 46 46 37 34 43 36 34 44 39 43  183-98FF74C64D9C
32570 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
32580 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53         package.S
32590 65 72 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47  erviceId = new G
325a0 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
325b0 20 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36            "DCBE6
325c0 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31  C8D-0E57-4099-A1
325d0 38 33 2d 39 38 46 46 37 34 43 36 34 44 39 44 22  83-98FF74C64D9D"
325e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
325f0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
32600 74 61 53 6f 75 72 63 65 49 64 20 3d 20 6e 65 77  taSourceId = new
32610 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20   Guid(..        
32620 20 20 20 20 20 20 20 20 20 20 20 20 22 30 45 42              "0EB
32630 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d  AAB6E-CA80-4B4A-
32640 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 43 37  8DDF-CBE6BF058C7
32650 31 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  1");....        
32660 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
32670 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d  DataProviderId =
32680 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
32690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326a0 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34  "0EBAAB6E-CA80-4
326b0 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30  B4A-8DDF-CBE6BF0
326c0 35 38 43 37 30 22 29 3b 0d 0a 20 20 20 20 20 20  58C70");..      
326d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
326e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
326f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32730 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
32740 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
32750 62 6f 6f 6c 20 41 64 64 56 73 50 61 63 6b 61 67  bool AddVsPackag
32760 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
32770 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
32780 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
32790 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
327a0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
327b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
327c0 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
327d0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
327e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
327f0 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
32800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32810 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
32820 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
32830 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
32840 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
32850 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
32860 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
32870 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
32880 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
32890 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
328a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
328b0 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
328c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
328d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
328e0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
328f0 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
32900 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
32910 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32920 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32930 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32940 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
32950 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
32960 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
32970 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
32980 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
32990 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
329a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
329b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
329c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
329d0 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
329e0 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
329f0 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
32a00 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
32a10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32a20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
32a30 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
32a40 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
32a50 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
32a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32a70 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
32a80 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
32a90 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
32aa0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32ab0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
32ac0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
32ad0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32af0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
32b00 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
32b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
32b30 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
32b40 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
32b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b60 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
32b70 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
32b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32b90 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
32ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32bb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32bc0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
32bd0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
32be0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
32bf0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
32c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c10 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63         key, "Pac
32c20 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68  kages", true, wh
32c30 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
32c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32c50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32c60 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
32c70 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
32c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32ca0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
32cb0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
32cc0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
32cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ce0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
32cf0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
32d00 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20  }\\Packages",.. 
32d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
32d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32d40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32d50 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
32d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32d70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32d80 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
32d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32da0 2f 2f 20 4e 4f 54 45 3a 20 2a 57 41 52 4e 49 4e  // NOTE: *WARNIN
32db0 47 2a 20 43 68 61 6e 67 69 6e 67 20 61 6e 79 20  G* Changing any 
32dc0 6f 66 20 74 68 65 73 65 20 76 61 6c 75 65 73 20  of these values 
32dd0 77 69 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20 20 20  will likely..   
32de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32df0 20 2f 2f 20 20 20 20 20 20 20 72 65 71 75 69 72   //       requir
32e00 65 20 61 20 6e 65 77 20 22 70 61 63 6b 61 67 65  e a new "package
32e10 20 6c 6f 61 64 20 6b 65 79 22 20 28 50 4c 4b 29   load key" (PLK)
32e20 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
32e30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
32e40 20 20 20 20 20 67 65 6e 65 72 61 74 65 64 20 69       generated i
32e50 6e 20 6f 72 64 65 72 20 74 6f 20 70 72 6f 70 65  n order to prope
32e60 72 6c 79 20 73 75 70 70 6f 72 74 20 6c 6f 61 64  rly support load
32e70 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
32e80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
32e90 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 69 6e        package in
32ea0 74 6f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  to Visual Studio
32eb0 20 32 30 30 38 20 61 6e 64 20 65 61 72 6c 69 65   2008 and earlie
32ec0 72 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20  r without..     
32ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32ee0 2f 20 20 20 20 20 20 20 74 68 65 20 6d 61 74 63  /       the matc
32ef0 68 69 6e 67 20 56 69 73 75 61 6c 20 53 74 75 64  hing Visual Stud
32f00 69 6f 20 53 44 4b 20 62 65 69 6e 67 20 69 6e 73  io SDK being ins
32f10 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20  talled...       
32f20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
32f30 20 20 20 20 20 20 50 6c 65 61 73 65 20 72 65 66        Please ref
32f40 65 72 20 74 6f 20 74 68 65 20 22 53 51 4c 69 74  er to the "SQLit
32f50 65 2e 44 65 73 69 67 6e 65 72 5c 70 6c 6b 2e 74  e.Designer\plk.t
32f60 78 74 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20  xt" file..      
32f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32f80 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 65         for the e
32f90 78 69 73 74 69 6e 67 20 6f 66 66 69 63 69 61 6c  xisting official
32fa0 20 76 61 6c 75 65 73 20 61 6e 64 20 75 70 64 61   values and upda
32fb0 74 65 20 74 68 65 6d 20 69 66 0d 0a 20 20 20 20  te them if..    
32fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fd0 2f 2f 20 20 20 20 20 20 20 6e 65 63 65 73 73 61  //       necessa
32fe0 72 79 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 6e  ry.  Also, the n
32ff0 65 77 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70  ewly generated p
33000 61 63 6b 61 67 65 20 6c 6f 61 64 0d 0a 20 20 20  ackage load..   
33010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33020 20 2f 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74   //       key it
33030 73 65 6c 66 2c 20 77 68 69 63 68 20 69 73 20 61  self, which is a
33040 20 31 32 38 20 63 68 61 72 61 63 74 65 72 20 61   128 character a
33050 6c 70 68 61 6e 75 6d 65 72 69 63 0d 0a 20 20 20  lphanumeric..   
33060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33070 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67   //       string
33080 2c 20 6d 75 73 74 20 62 65 20 70 6c 61 63 65 64  , must be placed
33090 20 69 6e 20 74 68 65 20 72 65 73 6f 75 72 63 65   in the resource
330a0 20 73 74 72 69 6e 67 20 6e 61 6d 65 64 0d 0a 20   string named.. 
330b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330c0 20 20 20 2f 2f 20 20 20 20 20 20 20 22 34 30 30     //       "400
330d0 22 20 69 6e 20 74 68 65 20 22 53 51 4c 69 74 65  " in the "SQLite
330e0 2e 44 65 73 69 67 6e 65 72 5c 56 53 50 61 63 6b  .Designer\VSPack
330f0 61 67 65 2e 72 65 73 78 22 20 66 69 6c 65 0d 0a  age.resx" file..
33100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33110 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64      //       and
33120 20 74 68 65 6e 20 74 68 65 20 64 65 73 69 67 6e   then the design
33130 65 72 20 61 73 73 65 6d 62 6c 79 20 69 74 73 65  er assembly itse
33140 6c 66 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20  lf must be..    
33150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33160 2f 2f 20 20 20 20 20 20 20 72 65 63 6f 6d 70 69  //       recompi
33170 6c 65 64 2e 20 20 41 73 20 6f 66 20 74 68 69 73  led.  As of this
33180 20 77 72 69 74 69 6e 67 20 28 69 6e 20 46 65 62   writing (in Feb
33190 72 75 61 72 79 20 32 30 31 32 29 2c 0d 0a 20 20  ruary 2012),..  
331a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331b0 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 66    //       the f
331c0 6f 6c 6c 6f 77 69 6e 67 20 55 52 4c 20 69 73 20  ollowing URL is 
331d0 74 68 65 20 70 72 6f 70 65 72 20 70 6c 61 63 65  the proper place
331e0 20 74 6f 20 67 65 6e 65 72 61 74 65 0d 0a 20 20   to generate..  
331f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33200 20 20 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61    //       packa
33210 67 65 20 6c 6f 61 64 20 6b 65 79 73 3a 0d 0a 20  ge load keys:.. 
33220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33230 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
33240 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33250 20 20 20 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e      http://msdn.
33260 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e  microsoft.com/en
33270 2d 75 73 2f 76 73 74 75 64 69 6f 2f 63 63 36 35  -us/vstudio/cc65
33280 35 37 39 35 0d 0a 20 20 20 20 20 20 20 20 20 20  5795..          
33290 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
332a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332b0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
332c0 69 73 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65  istryKey package
332d0 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  Key =..         
332e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332f0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
33300 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73  r.CreateSubKey(s
33310 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  ubKey,..        
33320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33330 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b      package.Pack
33340 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ageId.ToString(V
33350 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74  sIdFormat), what
33360 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
33370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33380 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
33390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
333b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
333c0 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c  ackageKey == nul
333d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
333e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
333f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33400 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
33410 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
33420 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33440 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
33450 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
33460 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
33470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
33490 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b  ey, package.Pack
334a0 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ageId.ToString(V
334b0 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
334c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
334e0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
334f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33500 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33520 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
33530 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
33540 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ey, null,..     
33550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33560 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
33570 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e  rmat("{0} Design
33580 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f  er Package", Pro
33590 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  jectName),..    
335a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335b0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
335c0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
335d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335e0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
335f0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
33600 6b 61 67 65 4b 65 79 2c 20 22 43 6c 61 73 73 22  kageKey, "Class"
33610 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
33630 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e  SQLite.Designer.
33640 53 51 4c 69 74 65 50 61 63 6b 61 67 65 22 2c 20  SQLitePackage", 
33650 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
33660 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33670 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
33680 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
33690 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
336a0 20 22 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20   "CodeBase",..  
336b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336c0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
336d0 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  me, whatIf, verb
336e0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
336f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33700 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
33710 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
33720 4b 65 79 2c 20 22 49 44 22 2c 20 34 30 30 2c 20  Key, "ID", 400, 
33730 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
33740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33750 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
33760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33770 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
33780 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74   directory = Get
33790 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28  SystemDirectory(
337a0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
337b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337c0 20 20 20 69 66 20 28 64 69 72 65 63 74 6f 72 79     if (directory
337d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
337e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337f0 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
33800 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b   = String.Empty;
33810 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33820 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
33830 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
33840 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
33850 22 49 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22  "InprocServer32"
33860 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
33880 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
33890 63 74 6f 72 79 2c 20 22 6d 73 63 6f 72 65 65 2e  ctory, "mscoree.
338a0 64 6c 6c 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  dll"),..        
338b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338c0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
338d0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
338e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338f0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
33900 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
33910 4b 65 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d  Key, "CompanyNam
33920 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
33930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33940 20 22 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e   "http://system.
33950 64 61 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f  data.sqlite.org/
33960 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
33970 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
33980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33990 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
339a0 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
339b0 65 79 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22  ey, "MinEdition"
339c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
339d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
339e0 73 74 61 6e 64 61 72 64 22 2c 20 77 68 61 74 49  standard", whatI
339f0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
33a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a10 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
33a20 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
33a30 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f  packageKey, "Pro
33a40 64 75 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20  ductName",..    
33a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a60 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
33a70 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67  ormat("{0} Desig
33a80 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72  ner Package", Pr
33a90 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20  ojectName),..   
33aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ab0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
33ac0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
33ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ae0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
33af0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
33b00 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75  ckageKey, "Produ
33b10 63 74 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20  ctVersion",..   
33b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b30 20 20 20 20 20 20 20 20 20 22 31 2e 30 22 2c 20           "1.0", 
33b40 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
33b50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33b60 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
33b70 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
33b80 4b 65 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d  Key toolboxKey =
33b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bb0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
33bc0 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 70 61  .CreateSubKey(pa
33bd0 63 6b 61 67 65 4b 65 79 2c 0d 0a 20 20 20 20 20  ckageKey,..     
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bf0 20 20 20 20 20 20 20 20 20 20 20 22 54 6f 6f 6c             "Tool
33c00 62 6f 78 22 2c 20 77 68 61 74 49 66 2c 20 76 65  box", whatIf, ve
33c10 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
33c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c50 69 66 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d  if (toolboxKey =
33c60 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ca0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
33cb0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
33cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ce0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63      "could not c
33cf0 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b  reate registry k
33d00 65 79 3a 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  ey: " +..       
33d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
33d30 7d 5c 5c 54 6f 6f 6c 62 6f 78 22 2c 20 70 61 63  }\\Toolbox", pac
33d40 6b 61 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20  kageKey);....   
33d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
33d70 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
33d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33db0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
33dc0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
33dd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33df0 20 20 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22     toolboxKey, "
33e00 44 65 66 61 75 6c 74 20 49 74 65 6d 73 22 2c 20  Default Items", 
33e10 33 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  3, whatIf,..    
33e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e30 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
33e40 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
33e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
33e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33e70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33e80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
33ea0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
33eb0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
33ec0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
33ed0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
33ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ef0 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20    key, "Menus", 
33f00 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
33f10 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
33f20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f40 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
33f50 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
33f60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f80 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
33f90 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fb0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
33fc0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
33fd0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73   key: {0}\\Menus
33fe0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
33ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34000 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
34010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34020 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
34030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34040 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34050 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
34060 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
34070 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
34080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
34090 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50  ubKey, package.P
340a0 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
340b0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
340c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340d0 20 20 20 20 20 20 20 20 22 2c 20 31 30 30 30 2c          ", 1000,
340e0 20 33 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72   3", whatIf, ver
340f0 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
34100 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34110 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
34120 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
34130 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
34140 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
34150 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
34160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34170 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73 22   key, "Services"
34180 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
34190 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
341a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
341b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341c0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
341d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
341e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
341f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34200 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
34210 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
34220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34230 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
34240 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
34250 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72  ry key: {0}\\Ser
34260 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  vices",..       
34270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34280 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
34290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
342b0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
342c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
342d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342e0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
342f0 69 73 74 72 79 4b 65 79 20 73 65 72 76 69 63 65  istryKey service
34300 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  Key =..         
34310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34320 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
34330 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73  r.CreateSubKey(s
34340 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  ubKey,..        
34350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34360 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76      package.Serv
34370 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  iceId.ToString(V
34380 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74  sIdFormat), what
34390 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
343a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343b0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
343c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
343e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
343f0 65 72 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c  erviceKey == nul
34400 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
34410 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34430 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
34440 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
34450 28 0d 0a 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 20 20 20 20                  
34470 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
34480 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
34490 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
344a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
344c0 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76  ey, package.Serv
344d0 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  iceId.ToString(V
344e0 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
344f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34500 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
34510 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
34520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34530 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
34540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34550 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
34560 65 74 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b  etValue(serviceK
34570 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ey, null,..     
34580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34590 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50         package.P
345a0 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
345b0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
345c0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
345d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345e0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
345f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34600 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
34610 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
34620 28 73 65 72 76 69 63 65 4b 65 79 2c 20 22 4e 61  (serviceKey, "Na
34630 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me",..          
34640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34650 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
34660 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 53 65  "{0} Designer Se
34670 72 76 69 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e  rvice", ProjectN
34680 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
34690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346a0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
346b0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
346c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
346d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
346e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
346f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
34700 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
34710 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
34720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34760 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
34770 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
34780 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50  c bool RemoveVsP
34790 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20  ackage(..       
347a0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
347b0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
347c0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
347d0 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
347e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
347f0 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
34800 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
34810 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
34820 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
34830 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
34840 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
34850 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
34860 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
34870 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
34880 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
34890 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
348a0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
348b0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
348c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
348d0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
348e0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
348f0 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
34900 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
34920 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
34930 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
34940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34950 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
34960 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34970 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
34980 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
34990 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
349a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
349b0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
349c0 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
349d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
349e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
349f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34a00 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
34a10 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
34a20 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
34a30 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73  n, suffix, perUs
34a40 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  er, wow64);.... 
34a50 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34a60 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34a70 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
34a80 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
34a90 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
34aa0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
34ab0 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
34ac0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34ad0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
34ae0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34af0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
34b00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
34b10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34b20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
34b30 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
34b40 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
34b50 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
34b60 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
34b70 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
34b80 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
34b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
34ba0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
34bb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34bc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
34bd0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
34be0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34bf0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
34c00 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
34c10 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
34c20 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
34c30 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
34c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c50 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c  key, "Packages",
34c60 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
34c70 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
34c80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ca0 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
34cb0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
34cc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ce0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
34cf0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
34d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d10 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
34d20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
34d30 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b  y key: {0}\\Pack
34d40 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ages",..        
34d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d60 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
34d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d80 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
34d90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
34da0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34dc0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
34dd0 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
34de0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34df0 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
34e00 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61  y, package.Packa
34e10 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
34e20 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
34e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e40 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
34e50 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
34e60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34e70 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
34e80 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
34e90 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
34ea0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
34eb0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
34ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ed0 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72  key, "Menus", tr
34ee0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
34ef0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
34f00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
34f20 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
34f30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34f40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f60 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
34f70 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 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 22 63 6f 75 6c 64 20 6e 6f 74        "could not
34fa0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
34fb0 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c  ey: {0}\\Menus",
34fc0 0d 0a 20 20 20 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 20 6b 65                ke
34fe0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
34ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35000 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35020 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
35030 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
35040 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65  tryHelper.Delete
35050 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
35060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35070 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e  subKey, package.
35080 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69  PackageId.ToStri
35090 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
350a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
350b0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e           throwOn
350c0 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c  Missing, whatIf,
350d0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
350e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
350f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35100 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
35110 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
35120 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
35130 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
35140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35150 20 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69       key, "Servi
35160 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ces", true, what
35170 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
35180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
35190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
351a0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
351b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
351c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
351d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
351e0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
351f0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
35200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
35220 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
35230 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
35240 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20  \Services",..   
35250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35260 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
35270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35280 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35290 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
352a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
352b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
352c0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
352d0 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65  lper.DeleteSubKe
352e0 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
352f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35300 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e  subKey, package.
35310 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69  ServiceId.ToStri
35320 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
35330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35340 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
35350 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
35360 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
35370 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
35380 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
35390 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
353a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
353b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353f0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
35400 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
35410 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 50   bool ProcessVsP
35420 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20  ackage(..       
35430 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
35440 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
35450 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
35460 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
35470 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
35480 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
35490 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
354a0 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
354b0 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
354c0 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
354d0 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
354e0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
354f0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
35500 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
35510 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
35520 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
35530 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
35540 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
35550 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
35560 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
35570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
35580 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
35590 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
355a0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
355b0 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
355c0 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
355d0 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
355e0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
355f0 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
35600 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35610 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
35620 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63   = "invalid VS c
35630 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
35640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35650 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
35660 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
35670 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35680 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
35690 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
356a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41          return A
356b0 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  ddVsPackage(..  
356c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356d0 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
356e0 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61  sion, suffix, pa
356f0 63 6b 61 67 65 2c 20 70 61 69 72 2e 58 2c 20 70  ckage, pair.X, p
35700 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
35710 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77               wow
35720 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  64, whatIf, verb
35730 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
35740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
35750 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
35760 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
35770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35780 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56    return RemoveV
35790 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
357a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
357b0 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
357c0 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
357d0 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ge, perUser, wow
357e0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
357f0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e           throwOn
35800 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c  Missing, whatIf,
35810 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
35820 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
35830 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
35840 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
35850 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ion..        #en
35860 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
35870 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
35880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
358c0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 70        #region Ap
358d0 70 6c 69 63 61 74 69 6f 6e 20 45 6e 74 72 79 20  plication Entry 
358e0 50 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 5b  Point..        [
358f0 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
35900 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
35910 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
35920 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
35930 63 20 69 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20  c int Main(..   
35940 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
35950 5d 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20  ] args..        
35960 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
35970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
35980 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
35990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
359a0 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
359b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20  configuration = 
359c0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
359d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72         string er
359e0 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ror = null;.... 
359f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35a50 20 20 23 72 65 67 69 6f 6e 20 44 65 62 75 67 67    #region Debugg
35a60 65 72 20 48 6f 6f 6b 0d 0a 20 20 20 20 20 20 20  er Hook..       
35a70 20 20 20 20 20 20 20 20 20 69 66 20 28 45 6e 76           if (Env
35a80 69 72 6f 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69  ironment.GetEnvi
35a90 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28  ronmentVariable(
35aa0 22 42 72 65 61 6b 22 29 20 21 3d 20 6e 75 6c 6c  "Break") != null
35ab0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
35ac0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35ad0 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
35ae0 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20  e.WriteLine(..  
35af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b00 20 20 20 20 20 20 22 41 74 74 61 63 68 20 61 20        "Attach a 
35b10 64 65 62 75 67 67 65 72 20 74 6f 20 70 72 6f 63  debugger to proc
35b20 65 73 73 20 7b 30 7d 20 61 6e 64 20 22 20 2b 0d  ess {0} and " +.
35b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35b40 20 20 20 20 20 20 20 20 20 22 70 72 65 73 73 20           "press 
35b50 61 6e 79 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69  any key to conti
35b60 6e 75 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  nue.",..        
35b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b80 50 72 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65  Process.GetCurre
35b90 6e 74 50 72 6f 63 65 73 73 28 29 2e 49 64 29 3b  ntProcess().Id);
35ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35bb0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
35bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35be0 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73              Cons
35bf0 6f 6c 65 2e 52 65 61 64 4b 65 79 28 74 72 75 65  ole.ReadKey(true
35c00 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
35c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
35c30 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
35c40 20 28 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69   (InvalidOperati
35c50 6f 6e 45 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20  onException) // 
35c60 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d  Console.ReadKey.
35c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35c80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ca0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
35cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62               Deb
35ce0 75 67 67 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a  ugger.Break();..
35cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d00 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
35d10 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
35d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35d30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
35d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35d80 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d      #region Comm
35d90 61 6e 64 20 4c 69 6e 65 20 50 72 6f 63 65 73 73  and Line Process
35da0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
35db0 20 20 20 20 20 69 66 20 28 21 43 6f 6e 66 69 67       if (!Config
35dc0 75 72 61 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73  uration.FromArgs
35dd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35de0 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 2c             args,
35df0 20 74 72 75 65 2c 20 72 65 66 20 63 6f 6e 66 69   true, ref confi
35e00 67 75 72 61 74 69 6f 6e 2c 20 72 65 66 20 65 72  guration, ref er
35e10 72 6f 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ror) ||..       
35e20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 43 6f               !Co
35e30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63  nfiguration.Proc
35e40 65 73 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ess(..          
35e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
35e60 67 73 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  gs, configuratio
35e70 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65 72 72  n, true, ref err
35e80 6f 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  or) ||..        
35e90 20 20 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e              !Con
35ea0 66 69 67 75 72 61 74 69 6f 6e 2e 43 68 65 63 6b  figuration.Check
35eb0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d  RuntimeVersion(.
35ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35ed0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
35ee0 72 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65  ration, true, re
35ef0 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
35f00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
35f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
35f30 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
35f40 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
35f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f60 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
35f70 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
35f80 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c  ack, thisAssembl
35f90 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
35fb0 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
35fc0 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
35fd0 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
35fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ff0 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
36000 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
36010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
36020 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
36030 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
36040 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
36050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36060 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
36070 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
36080 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e  lback, "Failure.
36090 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
360a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
360b0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
360c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360d0 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20     return 1; /* 
360e0 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20  FAILURE */..    
360f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
36100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
36110 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
36120 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
36130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
36170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36180 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
36190 74 72 79 20 72 65 67 69 73 74 72 79 20 3d 20 6e  try registry = n
361a0 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28  ew MockRegistry(
361b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
361c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
361d0 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20  uration.WhatIf, 
361e0 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 29 0d 0a  false, false))..
361f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36200 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36210 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43         #region C
36220 6f 72 65 20 41 73 73 65 6d 62 6c 79 20 4e 61 6d  ore Assembly Nam
36230 65 20 43 68 65 63 6b 0d 0a 20 20 20 20 20 20 20  e Check..       
36240 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
36250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36260 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f       // NOTE: Do
36270 20 74 68 69 73 20 66 69 72 73 74 2c 20 62 65 66   this first, bef
36280 6f 72 65 20 6d 61 6b 69 6e 67 20 61 6e 79 20 63  ore making any c
36290 68 61 6e 67 65 73 20 74 6f 20 74 68 65 0d 0a 20  hanges to the.. 
362a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362b0 20 20 20 2f 2f 20 20 20 20 20 20 20 73 79 73 74     //       syst
362c0 65 6d 2c 20 62 65 63 61 75 73 65 20 69 74 20 77  em, because it w
362d0 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 65 78 63  ill throw an exc
362e0 65 70 74 69 6f 6e 20 69 66 20 74 68 65 0d 0a 20  eption if the.. 
362f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36300 20 20 20 2f 2f 20 20 20 20 20 20 20 66 69 6c 65     //       file
36310 20 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 72   name does not r
36320 65 70 72 65 73 65 6e 74 20 61 20 76 61 6c 69 64  epresent a valid
36330 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20   managed..      
36340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
36350 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e         assembly.
36360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36370 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
36380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
36390 73 65 6d 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41  semblyName coreA
363a0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 0d 0a 20  ssemblyName =.. 
363b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363c0 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
363d0 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e  ame.GetAssemblyN
363e0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
363f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36400 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
36410 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f  CoreFileName); /
36420 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20  * throw */....  
36430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36440 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64    AssemblyName d
36450 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
36460 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ame =..         
36470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
36480 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41  ssemblyName.GetA
36490 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20  ssemblyName(..  
364a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
364c0 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72  uration.Designer
364d0 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
364e0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
364f0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
36500 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
36510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
36520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36550 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36570 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 20   #region System 
36580 44 69 72 65 63 74 6f 72 79 20 43 68 65 63 6b 0d  Directory Check.
36590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
365a0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
365b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
365c0 4e 4f 54 45 3a 20 47 65 74 74 69 6e 67 20 74 68  NOTE: Getting th
365d0 65 20 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f  e system directo
365e0 72 79 20 76 61 6c 75 65 20 68 65 72 65 20 73 65  ry value here se
365f0 72 76 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  rves..          
36600 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
36610 20 20 20 74 77 6f 20 70 75 72 70 6f 73 65 73 3a     two purposes:
36620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36630 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
36640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
36650 20 20 20 20 20 20 20 31 2e 20 49 74 20 65 6e 61         1. It ena
36660 62 6c 65 73 20 75 73 20 74 6f 20 6c 6f 67 20 74  bles us to log t
36670 68 65 20 73 79 73 74 65 6d 20 64 69 72 65 63 74  he system direct
36680 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
36690 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
366a0 20 20 20 20 20 76 61 6c 75 65 20 76 65 72 79 20       value very 
366b0 65 61 72 6c 79 20 69 6e 20 74 68 65 20 69 6e 73  early in the ins
366c0 74 61 6c 6c 61 74 69 6f 6e 20 70 72 6f 63 65 73  tallation proces
366d0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
366e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
366f0 20 20 20 28 69 2e 65 2e 20 65 76 65 6e 20 74 68     (i.e. even th
36700 6f 75 67 68 20 74 68 65 20 76 61 6c 75 65 20 69  ough the value i
36710 74 73 65 6c 66 20 69 73 20 6e 6f 74 0d 0a 20 20  tself is not..  
36720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36730 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 65    //          ne
36740 65 64 65 64 20 75 6e 74 69 6c 20 6d 75 63 68 20  eded until much 
36750 6c 61 74 65 72 29 2e 0d 0a 20 20 20 20 20 20 20  later)...       
36760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
36770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36780 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 32 2e       //       2.
36790 20 53 69 6e 63 65 20 74 68 65 20 76 61 6c 75 65   Since the value
367a0 20 69 73 20 63 61 63 68 65 64 2c 20 69 74 20 70   is cached, it p
367b0 72 65 76 65 6e 74 73 20 61 6e 0d 0a 20 20 20 20  revents an..    
367c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367d0 2f 2f 20 20 20 20 20 20 20 20 20 20 65 78 63 65  //          exce
367e0 70 74 69 6f 6e 20 66 72 6f 6d 20 62 65 69 6e 67  ption from being
367f0 20 74 68 72 6f 77 6e 20 6d 75 63 68 20 6c 61 74   thrown much lat
36800 65 72 20 64 75 72 69 6e 67 0d 0a 20 20 20 20 20  er during..     
36810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
36820 2f 20 20 20 20 20 20 20 20 20 20 74 68 65 20 69  /          the i
36830 6e 73 74 61 6c 6c 20 77 68 65 6e 20 74 68 65 20  nstall when the 
36840 76 61 6c 75 65 20 69 73 20 71 75 65 72 69 65 64  value is queried
36850 20 61 67 61 69 6e 0d 0a 20 20 20 20 20 20 20 20   again..        
36860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
36870 20 20 20 20 20 20 20 20 28 69 2e 65 2e 20 77 69          (i.e. wi
36880 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  th the same valu
36890 65 20 66 6f 72 20 74 68 65 20 22 77 6f 77 36 34  e for the "wow64
368a0 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "..             
368b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
368c0 20 20 20 70 61 72 61 6d 65 74 65 72 29 2e 0d 0a     parameter)...
368d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
368f0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
36900 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
36910 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
36920 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20  .MediumLow,..   
36930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36940 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
36950 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
36960 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
36970 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36980 20 20 20 20 20 20 20 20 20 20 20 22 53 79 73 74             "Syst
36990 65 6d 20 64 69 72 65 63 74 6f 72 79 20 69 73 20  em directory is 
369a0 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61  {0}.", ForDispla
369b0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
369c0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 53              GetS
369d0 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 63  ystemDirectory(c
369e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77  onfiguration.Wow
369f0 36 34 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  64))),..        
36a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a10 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 20  traceCategory); 
36a20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
36a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a40 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
36a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
36a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
36aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36ab0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
36ac0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 2f 20 56  ET Framework / V
36ad0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74  isual Studio Dat
36ae0 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  a..             
36af0 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
36b00 61 63 6b 61 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  ackage = null;..
36b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73      FrameworkLis
36b30 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20  t frameworkList 
36b40 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
36b50 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73 4c               VsL
36b60 69 73 74 20 76 73 4c 69 73 74 20 3d 20 6e 75 6c  ist vsList = nul
36b70 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
36b80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
36b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
36bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 69               Ini
36be0 74 69 61 6c 69 7a 65 56 73 50 61 63 6b 61 67 65  tializeVsPackage
36bf0 28 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c  (designerAssembl
36c00 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
36c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
36c30 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20  sFlags(..       
36c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c50 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
36c60 73 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  s.GlobalAssembly
36c70 43 61 63 68 65 2c 20 74 72 75 65 29 20 26 26 0d  Cache, true) &&.
36c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36c90 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
36ca0 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
36cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
36cd0 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63  stallFlags.VsPac
36ce0 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62  kageGlobalAssemb
36cf0 6c 79 43 61 63 68 65 2c 20 74 72 75 65 29 2c 0d  lyCache, true),.
36d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36d10 20 20 20 20 20 20 20 20 20 72 65 66 20 70 61 63           ref pac
36d20 6b 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kage);....      
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
36d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d90 20 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65   InitializeFrame
36da0 77 6f 72 6b 4c 69 73 74 28 63 6f 6e 66 69 67 75  workList(configu
36db0 72 61 74 69 6f 6e 2e 50 65 72 55 73 65 72 20 3f  ration.PerUser ?
36dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36dd0 20 20 20 20 20 20 20 20 20 20 72 65 67 69 73 74            regist
36de0 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 20 3a  ry.CurrentUser :
36df0 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   registry.LocalM
36e00 61 63 68 69 6e 65 2c 0d 0a 20 20 20 20 20 20 20  achine,..       
36e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
36e30 72 65 66 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  ref frameworkLis
36e40 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
36e50 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69             Initi
36e60 61 6c 69 7a 65 56 73 4c 69 73 74 28 63 6f 6e 66  alizeVsList(conf
36e70 69 67 75 72 61 74 69 6f 6e 2e 50 65 72 55 73 65  iguration.PerUse
36e80 72 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r ?..           
36e90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67               reg
36ea0 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65  istry.CurrentUse
36eb0 72 20 3a 20 72 65 67 69 73 74 72 79 2e 4c 6f 63  r : registry.Loc
36ec0 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a 20 20 20 20  alMachine,..    
36ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ee0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
36ef0 6e 2c 20 72 65 66 20 76 73 4c 69 73 74 29 3b 0d  n, ref vsList);.
36f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36f10 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
36f20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36f30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
36f80 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
36f90 6e 20 53 68 61 72 65 64 20 43 6c 69 65 6e 74 20  n Shared Client 
36fa0 44 61 74 61 20 43 72 65 61 74 69 6f 6e 0d 0a 20  Data Creation.. 
36fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fc0 20 20 20 6f 62 6a 65 63 74 20 64 69 72 65 63 74     object direct
36fd0 6f 72 79 44 61 74 61 20 3d 20 6e 65 77 20 41 6e  oryData = new An
36fe0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
36ff0 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ol>(..          
37000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
37010 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 69 72 65  nfiguration.Dire
37020 63 74 6f 72 79 2c 20 63 6f 6e 66 69 67 75 72 61  ctory, configura
37030 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a  tion.Install);..
37040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37050 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 69 6c        object fil
37060 65 4e 61 6d 65 44 61 74 61 20 3d 20 6e 65 77 20  eNameData = new 
37070 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
37080 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20  bool>(..        
37090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65  configuration.De
370b0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20  signerFileName, 
370c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e  configuration.In
370d0 73 74 61 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20  stall);..       
370e0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e               #en
370f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
37100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
37110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
37150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37160 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 47    #region .NET G
37170 41 43 20 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76  AC Install/Remov
37180 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
37190 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
371a0 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
371b0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
371c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371d0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 47 6c 6f  InstallFlags.Glo
371e0 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
371f0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37220 20 20 20 20 20 20 20 20 20 50 75 62 6c 69 73 68           Publish
37230 20 70 75 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b   publish = null;
37240 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37250 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
37260 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
37270 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
37280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37290 20 20 20 20 70 75 62 6c 69 73 68 20 3d 20 6e 65      publish = ne
372a0 77 20 50 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a  w Publish();....
372b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372c0 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
372d0 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c  iguration.Instal
372e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
372f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37310 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
37320 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
37330 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
37340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37350 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
37360 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
37370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37380 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49      publish.GacI
37390 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61  nstall(configura
373a0 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  tion.CoreFileNam
373b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
373c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373d0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
373e0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
373f0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
37400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37420 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
37430 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
37440 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
37450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37470 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73  "GacInstall: ass
37480 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22  emblyPath = {0}"
37490 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
374a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374b0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f     ForDisplay(co
374c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65  nfiguration.Core
374d0 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
374e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
37500 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
37510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37520 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
37530 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 73  configuration.Is
37540 4c 69 6e 71 53 75 70 70 6f 72 74 65 64 28 29 29  LinqSupported())
37550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37590 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
375a0 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20  ion.WhatIf)..   
375b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375d0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
375e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37600 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73    publish.GacIns
37610 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69  tall(configurati
37620 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  on.LinqFileName)
37630 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37650 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
37660 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
37670 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
37680 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
37690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376a0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
376b0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
376c0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
376d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
376e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376f0 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49 6e            "GacIn
37700 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50  stall: assemblyP
37710 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20  ath = {0}",..   
37720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37740 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
37750 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69  iguration.LinqFi
37760 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
37770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
37790 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
377a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
377c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
377d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
377e0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48  (configuration.H
377f0 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20  asFlags(..      
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
37820 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63  stallFlags.VsPac
37830 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62  kageGlobalAssemb
37840 6c 79 43 61 63 68 65 2c 20 74 72 75 65 29 29 0d  lyCache, true)).
37850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37860 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
37870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37890 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
378a0 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20  on.WhatIf)..    
378b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378d0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
378e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37900 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74   publish.GacInst
37910 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  all(configuratio
37920 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.DesignerFileNa
37930 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
37940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37950 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
37960 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
37970 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
37980 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
37990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379a0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
379b0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
379c0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
379d0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
379e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61               "Ga
37a00 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62  cInstall: assemb
37a10 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
37a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a40 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
37a50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73  onfiguration.Des
37a60 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c  ignerFileName)),
37a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a90 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
37aa0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
37ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ac0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
37ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
37ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37af0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
37b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b30 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
37b40 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73  uration.HasFlags
37b50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b70 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
37b80 61 67 73 2e 56 73 50 61 63 6b 61 67 65 47 6c 6f  ags.VsPackageGlo
37b90 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
37ba0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
37bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37be0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
37bf0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
37c00 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
37c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f           /* thro
37c30 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
37c40 20 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 70 75 62 6c 69 73            publis
37c60 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66  h.GacRemove(conf
37c70 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e  iguration.Design
37c80 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  erFileName);....
37c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cb0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
37cc0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
37cd0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
37ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d00 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
37d10 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
37d20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
37d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d50 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a       "GacRemove:
37d60 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20   assemblyPath = 
37d70 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
37d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d90 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
37da0 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74  splay(configurat
37db0 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65  ion.DesignerFile
37dc0 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
37dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37de0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
37df0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
37e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
37e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
37e40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 73 4c  onfiguration.IsL
37e50 69 6e 71 53 75 70 70 6f 72 74 65 64 28 29 29 0d  inqSupported()).
37e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37e70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
37e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ea0 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
37eb0 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20  on.WhatIf)..    
37ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ee0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
37ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f10 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f   publish.GacRemo
37f20 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ve(configuration
37f30 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d  .LinqFileName);.
37f40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f60 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
37f70 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
37f80 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
37f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fb0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
37fc0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
37fd0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
37fe0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
37ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38000 20 20 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f          "GacRemo
38010 76 65 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68  ve: assemblyPath
38020 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20   = {0}",..      
38030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
38050 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75  rDisplay(configu
38060 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e  ration.LinqFileN
38070 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
38080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38090 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
380a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
380b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
380d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
380f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
38100 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
38110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38120 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a        /* throw *
38130 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
38140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38150 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65     publish.GacRe
38160 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69  move(configurati
38170 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
38180 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
38190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381a0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
381b0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
381c0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
381d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381f0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
38200 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
38210 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
38220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
38240 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62  acRemove: assemb
38250 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
38260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38280 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
38290 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
382a0 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
382b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
382d0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
382e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
38300 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
38310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38320 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
38330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38340 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
38350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
38380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38390 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
383a0 45 54 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  ET AssemblyFolde
383b0 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
383c0 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
383d0 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
383e0 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
383f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38400 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 73   InstallFlags.As
38410 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20 74  semblyFolders, t
38420 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
38430 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
38440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38450 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61        if (!ForEa
38460 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  chFrameworkRegis
38470 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20  try(registry,.. 
38480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
384a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72  rameworkList, Pr
384b0 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
384c0 64 65 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ders,..         
384d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384e0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
384f0 74 69 6f 6e 2e 52 65 67 69 73 74 72 79 56 65 72  tion.RegistryVer
38500 73 69 6f 6e 2c 20 64 69 72 65 63 74 6f 72 79 44  sion, directoryD
38510 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
38520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38530 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
38540 69 6f 6e 2e 50 65 72 55 73 65 72 2c 0d 0a 20 20  ion.PerUser,..  
38550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 65                Ne
38570 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c  tFxIs32BitOnly |
38580 7c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  | configuration.
38590 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  Wow64,..        
385a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385b0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
385c0 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73  ation.ThrowOnMis
385d0 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
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 63 6f 6e 66 69 67 75 72 61         configura
38600 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e  tion.WhatIf, con
38610 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f  figuration.Verbo
38620 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
38630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38640 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29       ref error))
38650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38660 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
38670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38680 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
38690 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72  s.ShowMessage(Tr
386a0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
386b0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
386c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386d0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
386e0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
386f0 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79  ck, thisAssembly
38700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
38710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38720 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43     error, traceC
38730 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65  ategory, Message
38740 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a  BoxButtons.OK,..
38750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38770 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45  MessageBoxIcon.E
38780 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
38790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387a0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
387b0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
387c0 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
387d0 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  mHigh,..        
387e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387f0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
38800 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
38810 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22  back, "Failure."
38820 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..